Jacek Caban : vbscript: Added interp_nothing implementation and tests.

Alexandre Julliard julliard at winehq.org
Thu Sep 15 12:34:55 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Sep 15 14:19:19 2011 +0200

vbscript: Added interp_nothing implementation and tests.

---

 dlls/vbscript/interp.c       |    9 +++++++--
 dlls/vbscript/tests/lang.vbs |    5 +++++
 dlls/vbscript/tests/run.c    |   29 +++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 4094ac1..f8e0011 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -599,8 +599,13 @@ static HRESULT interp_null(exec_ctx_t *ctx)
 
 static HRESULT interp_nothing(exec_ctx_t *ctx)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    VARIANT v;
+
+    TRACE("\n");
+
+    V_VT(&v) = VT_DISPATCH;
+    V_DISPATCH(&v) = NULL;
+    return stack_push(ctx, &v);
 }
 
 static HRESULT interp_not(exec_ctx_t *ctx)
diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs
index c89009b..a94b2cd 100644
--- a/dlls/vbscript/tests/lang.vbs
+++ b/dlls/vbscript/tests/lang.vbs
@@ -71,9 +71,14 @@ Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
 Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))
 Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))
 Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y))
+Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
+set x = nothing
+Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
 x = true
 Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
 
+Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
+
 x = "xx"
 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
 Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index aa2e3f1..4281b16 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -70,6 +70,7 @@ DEFINE_EXPECT(testobj_propput_i);
 #define DISPID_GLOBAL_ISENGLOC      1004
 #define DISPID_GLOBAL_VBVAR         1005
 #define DISPID_GLOBAL_TESTOBJ       1006
+#define DISPID_GLOBAL_ISNULLDISP    1007
 
 #define DISPID_TESTOBJ_PROPPUT      2001
 
@@ -329,6 +330,12 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
         *pid = DISPID_GLOBAL_VBVAR;
         return S_OK;
     }
+    if(!strcmp_wa(bstrName, "isNullDisp")) {
+        test_grfdex(grfdex, fdexNameCaseInsensitive);
+        *pid = DISPID_GLOBAL_ISNULLDISP;
+        return S_OK;
+    }
+
 
     if(strict_dispid_check && strcmp_wa(bstrName, "x"))
         ok(0, "unexpected call %s %x\n", wine_dbgstr_w(bstrName), grfdex);
@@ -459,6 +466,28 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
         V_VT(pvarRes) = VT_DISPATCH;
         V_DISPATCH(pvarRes) = (IDispatch*)&testObj;
         return S_OK;
+
+    case DISPID_GLOBAL_ISNULLDISP: {
+        VARIANT *v;
+
+        ok(wFlags == (INVOKE_FUNC|INVOKE_PROPERTYGET), "wFlags = %x\n", wFlags);
+        ok(pdp != NULL, "pdp == NULL\n");
+        ok(pdp->rgvarg != NULL, "rgvarg == NULL\n");
+        ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
+        ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
+        ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
+        ok(pvarRes != NULL, "pvarRes == NULL\n");
+        ok(pei != NULL, "pei == NULL\n");
+
+        v = pdp->rgvarg;
+        if(V_VT(v) == (VT_VARIANT|VT_BYREF))
+            v = V_VARIANTREF(v);
+
+        ok(V_VT(v) == VT_DISPATCH, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
+        V_VT(pvarRes) = VT_BOOL;
+        V_BOOL(pvarRes) = V_DISPATCH(v) ? VARIANT_FALSE : VARIANT_TRUE;
+        return S_OK;
+    }
     }
 
     ok(0, "unexpected call %d\n", id);




More information about the wine-cvs mailing list