jscript: Fixed typeof implementation for null VT_DISPATCH.
This commit is contained in:
parent
d1f5fa65d0
commit
dda957d87c
|
@ -2336,8 +2336,7 @@ static HRESULT typeof_exprval(exec_ctx_t *ctx, exprval_t *exprval, jsexcept_t *e
|
||||||
case VT_DISPATCH: {
|
case VT_DISPATCH: {
|
||||||
DispatchEx *dispex;
|
DispatchEx *dispex;
|
||||||
|
|
||||||
dispex = iface_to_jsdisp((IUnknown*)V_DISPATCH(&val));
|
if(V_DISPATCH(&val) && (dispex = iface_to_jsdisp((IUnknown*)V_DISPATCH(&val)))) {
|
||||||
if(dispex) {
|
|
||||||
*ret = is_class(dispex, JSCLASS_FUNCTION) ? functionW : objectW;
|
*ret = is_class(dispex, JSCLASS_FUNCTION) ? functionW : objectW;
|
||||||
jsdisp_release(dispex);
|
jsdisp_release(dispex);
|
||||||
}else {
|
}else {
|
||||||
|
|
|
@ -922,6 +922,9 @@ ok(re.source === "=(\\?|%3F)", "re.source = " + re.source);
|
||||||
|
|
||||||
ok(createNullBSTR() === '', "createNullBSTR() !== ''");
|
ok(createNullBSTR() === '', "createNullBSTR() !== ''");
|
||||||
|
|
||||||
|
ok(getVT(nullDisp) === "VT_DISPATCH", "getVT(nullDisp) = " + typeof(nullDisp));
|
||||||
|
ok(typeof(nullDisp) === "object", "typeof(nullDisp) = " + typeof(nullDisp));
|
||||||
|
|
||||||
function do_test() {}
|
function do_test() {}
|
||||||
function nosemicolon() {} nosemicolon();
|
function nosemicolon() {} nosemicolon();
|
||||||
function () {} nosemicolon();
|
function () {} nosemicolon();
|
||||||
|
|
|
@ -76,6 +76,7 @@ DEFINE_EXPECT(GetItemInfo_testVal);
|
||||||
#define DISPID_GLOBAL_GETVT 0x1005
|
#define DISPID_GLOBAL_GETVT 0x1005
|
||||||
#define DISPID_GLOBAL_TESTOBJ 0x1006
|
#define DISPID_GLOBAL_TESTOBJ 0x1006
|
||||||
#define DISPID_GLOBAL_NULL_BSTR 0x1007
|
#define DISPID_GLOBAL_NULL_BSTR 0x1007
|
||||||
|
#define DISPID_GLOBAL_NULL_DISP 0x1008
|
||||||
|
|
||||||
static const WCHAR testW[] = {'t','e','s','t',0};
|
static const WCHAR testW[] = {'t','e','s','t',0};
|
||||||
static const CHAR testA[] = "test";
|
static const CHAR testA[] = "test";
|
||||||
|
@ -298,6 +299,10 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
|
||||||
*pid = DISPID_GLOBAL_NULL_BSTR;
|
*pid = DISPID_GLOBAL_NULL_BSTR;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
if(!strcmp_wa(bstrName, "nullDisp")) {
|
||||||
|
*pid = DISPID_GLOBAL_NULL_DISP;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
if(!strcmp_wa(bstrName, "notExists")) {
|
if(!strcmp_wa(bstrName, "notExists")) {
|
||||||
CHECK_EXPECT(global_notexists_d);
|
CHECK_EXPECT(global_notexists_d);
|
||||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||||
|
@ -456,6 +461,21 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
|
||||||
V_BSTR(pvarRes) = NULL;
|
V_BSTR(pvarRes) = NULL;
|
||||||
}
|
}
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
|
case DISPID_GLOBAL_NULL_DISP:
|
||||||
|
ok(wFlags == INVOKE_PROPERTYGET, "wFlags = %x\n", wFlags);
|
||||||
|
ok(pdp != NULL, "pdp == NULL\n");
|
||||||
|
ok(!pdp->rgvarg, "rgvarg != NULL\n");
|
||||||
|
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
|
||||||
|
ok(!pdp->cArgs, "cArgs = %d\n", pdp->cArgs);
|
||||||
|
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||||
|
ok(pvarRes != NULL, "pvarRes == NULL\n");
|
||||||
|
ok(V_VT(pvarRes) == VT_EMPTY, "V_VT(pvarRes) = %d\n", V_VT(pvarRes));
|
||||||
|
ok(pei != NULL, "pei == NULL\n");
|
||||||
|
|
||||||
|
V_VT(pvarRes) = VT_DISPATCH;
|
||||||
|
V_DISPATCH(pvarRes) = NULL;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok(0, "unexpected call %x\n", id);
|
ok(0, "unexpected call %x\n", id);
|
||||||
|
|
Loading…
Reference in New Issue