Jacek Caban : vbscript: Added interp_icall implementation.

Alexandre Julliard julliard at winehq.org
Fri Sep 9 10:56:47 CDT 2011


Module: wine
Branch: master
Commit: 62a21545726ab580128b664a6f257838dbafe5d4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=62a21545726ab580128b664a6f257838dbafe5d4

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Sep  9 14:49:00 2011 +0200

vbscript: Added interp_icall implementation.

---

 dlls/vbscript/interp.c |   32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index d88439a..ec56fa9 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -168,13 +168,7 @@ static void vbstack_to_dp(exec_ctx_t *ctx, unsigned arg_cnt, DISPPARAMS *dp)
     }
 }
 
-static HRESULT interp_icall(exec_ctx_t *ctx)
-{
-    FIXME("\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT interp_icallv(exec_ctx_t *ctx)
+static HRESULT do_icall(exec_ctx_t *ctx, VARIANT *res)
 {
     BSTR identifier = ctx->instr->arg1.bstr;
     const unsigned arg_cnt = ctx->instr->arg2.uint;
@@ -182,8 +176,6 @@ static HRESULT interp_icallv(exec_ctx_t *ctx)
     DISPPARAMS dp;
     HRESULT hres;
 
-    TRACE("\n");
-
     hres = lookup_identifier(ctx, identifier, &ref);
     if(FAILED(hres))
         return hres;
@@ -192,7 +184,7 @@ static HRESULT interp_icallv(exec_ctx_t *ctx)
 
     switch(ref.type) {
     case REF_DISP:
-        hres = disp_call(ctx->script, ref.u.d.disp, ref.u.d.id, &dp, NULL);
+        hres = disp_call(ctx->script, ref.u.d.disp, ref.u.d.id, &dp, res);
         if(FAILED(hres))
             return hres;
         break;
@@ -205,6 +197,26 @@ static HRESULT interp_icallv(exec_ctx_t *ctx)
     return S_OK;
 }
 
+static HRESULT interp_icall(exec_ctx_t *ctx)
+{
+    VARIANT v;
+    HRESULT hres;
+
+    TRACE("\n");
+
+    hres = do_icall(ctx, &v);
+    if(FAILED(hres))
+        return hres;
+
+    return stack_push(ctx, &v);
+}
+
+static HRESULT interp_icallv(exec_ctx_t *ctx)
+{
+    TRACE("\n");
+    return do_icall(ctx, NULL);
+}
+
 static HRESULT interp_ret(exec_ctx_t *ctx)
 {
     TRACE("\n");




More information about the wine-cvs mailing list