vbscript: Use default object value for objets in stack_pop_val.
authorJacek Caban <jacek@codeweavers.com>
Fri, 16 Sep 2011 11:29:02 +0000 (13:29 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 16 Sep 2011 15:23:14 +0000 (17:23 +0200)
dlls/vbscript/interp.c
dlls/vbscript/tests/lang.vbs

index 4599cbf67bae815aeb4a0573e63b134648c618c3..474957c1b80d3a2a42887d26a791e57170c782f9 100644 (file)
@@ -199,8 +199,17 @@ static HRESULT stack_pop_val(exec_ctx_t *ctx, variant_val_t *v)
     }
 
     if(V_VT(var) == VT_DISPATCH) {
-        FIXME("got dispatch - get its default value\n");
-        return E_NOTIMPL;
+        DISPPARAMS dp = {0};
+        HRESULT hres;
+
+        hres = disp_call(ctx->script, V_DISPATCH(var), DISPID_VALUE, &dp, &v->store);
+        if(v->owned)
+            IDispatch_Release(V_DISPATCH(var));
+        if(FAILED(hres))
+            return hres;
+
+        v->owned = TRUE;
+        v->v = &v->store;
     }else {
         v->v = var;
     }
index 24bfecc151beb4e8514ec96225fa7012672ee525..cb0c7eb28cf5b923a9ecff7c7a65093663303669 100644 (file)
@@ -473,4 +473,13 @@ Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
 Set obj.gsProp = New testclass
 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
 
+x = obj
+Call ok(x = 3, "(x = obj) = " & x)
+Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
+funcCalled = ""
+Call ok(obj = 3, "(x = obj) = " & obj)
+Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
+
+x = (New testclass).publicProp
+
 reportSuccess()