jscript: Add VT_I2 support (try 2)
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Fri Mar 30 05:29:50 CDT 2012
Hi,
Changelog:
jscript: Add VT_I2 support
Best Regards
Alistair Leslie-Hughes
-------------- next part --------------
>From 7fcc060cfee37a39164a651f2244797d3a973888 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Thu, 29 Mar 2012 15:31:55 +1100
Subject: [PATCH] Add VT_I2 support
To: wine-patches <wine-patches at winehq.org>
---
dlls/jscript/dispex.c | 5 +++++
dlls/jscript/jsutils.c | 4 ++++
dlls/jscript/tests/lang.js | 26 ++++++++++++++++++++++++++
dlls/jscript/tests/run.c | 12 ++++++++++++
4 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index 0e209db..6c3ee82 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1055,6 +1055,11 @@ HRESULT disp_call(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD flags, DIS
}
hres = IDispatchEx_InvokeEx(dispex, id, ctx->lcid, flags, dp, retv, &ei->ei, &ctx->jscaller->IServiceProvider_iface);
+ if(SUCCEEDED(hres) && retv)
+ {
+ if(V_VT(retv) == VT_I2)
+ VariantChangeType(retv, retv, 0, VT_I4);
+ }
IDispatchEx_Release(dispex);
return hres;
diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c
index 040ec58..3b20d05 100644
--- a/dlls/jscript/jsutils.c
+++ b/dlls/jscript/jsutils.c
@@ -191,6 +191,10 @@ HRESULT to_primitive(script_ctx_t *ctx, VARIANT *v, jsexcept_t *ei, VARIANT *ret
case VT_R8:
*ret = *v;
break;
+ case VT_I2:
+ V_VT(ret) = VT_I4;
+ V_I4(ret) = V_I2(v);
+ break;
case VT_BSTR:
V_VT(ret) = VT_BSTR;
V_BSTR(ret) = SysAllocString(V_BSTR(v));
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js
index 8f5e5d5..bb3ac2b 100644
--- a/dlls/jscript/tests/lang.js
+++ b/dlls/jscript/tests/lang.js
@@ -1260,6 +1260,32 @@ ok(tmp === "VT_DISPATCH", "getVT(Object(nullDisp) = " + tmp);
tmp = Object(nullDisp).toString();
ok(tmp === "[object Object]", "Object(nullDisp).toString() = " + tmp);
+function TestVT_I2()
+{
+ varI2 = GetShort();
+ num3 = 3
+
+ ok(getVT(varI2) === "VT_I4", "getVT(varI2) = " + getVT(varI2));
+
+ ok("2" == varI2, "string");
+ ok("2" == varI2.toString(), "string");
+
+ ok(2 == varI2, "2 != varI2");
+ ok(varI2 == 2, "varI2 != 2");
+
+ ok(varI2 != num3, "varI2 == num3");
+ ok(num3 != varI2, "num3 == varI2");
+
+ ok((varI2 <= 1) === false, "(varI2 <= 1) !== false");
+ ok((varI2 <= 2) === true, "(varI2 <= 2) !== true");
+ ok((varI2 < 2) === false, "(varI2 < 2) !== false");
+ ok((varI2 > 2) === false, "(varI2 > 2) !== false");
+ ok((varI2 >= 2) === true, "(varI2 >= 2) !== true");
+ ok((varI2 > 1) === true, "(varI2 > 1) !== true");
+}
+
+TestVT_I2();
+
function do_test() {}
function nosemicolon() {} nosemicolon();
function () {} nosemicolon();
diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c
index e6f0009..763cd9d 100644
--- a/dlls/jscript/tests/run.c
+++ b/dlls/jscript/tests/run.c
@@ -96,6 +96,7 @@ DEFINE_EXPECT(DeleteMemberByDispID);
#define DISPID_GLOBAL_PUREDISP 0x1010
#define DISPID_GLOBAL_TESTPROPDELETE 0x1010
#define DISPID_GLOBAL_ISNULLBSTR 0x1011
+#define DISPID_GLOBAL_SHORT 0x1012
#define DISPID_TESTOBJ_PROP 0x2000
#define DISPID_TESTOBJ_ONLYDISPID 0x2001
@@ -451,6 +452,10 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
*pid = DISPID_GLOBAL_NULL_DISP;
return S_OK;
}
+ if(!strcmp_wa(bstrName, "GetShort")) {
+ *pid = DISPID_GLOBAL_SHORT;
+ return S_OK;
+ }
if(!strcmp_wa(bstrName, "notExists")) {
CHECK_EXPECT(global_notexists_d);
test_grfdex(grfdex, fdexNameCaseSensitive);
@@ -697,6 +702,13 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
}
return S_OK;
+ case DISPID_GLOBAL_SHORT:
+ if(pvarRes) {
+ V_VT(pvarRes) = VT_I2;
+ V_I2(pvarRes) = 2;
+ }
+ return S_OK;
+
case DISPID_GLOBAL_NULL_DISP:
ok(wFlags == INVOKE_PROPERTYGET, "wFlags = %x\n", wFlags);
ok(pdp != NULL, "pdp == NULL\n");
--
1.7.5.4
More information about the wine-patches
mailing list