From: Jacek Caban Subject: jscript: Don't use builtin property for exposing ActiveXObject constructor. Message-Id: <543BAB2E.5030600@codeweavers.com> Date: Mon, 13 Oct 2014 12:36:30 +0200 --- dlls/jscript/global.c | 24 ++++++++++-------------- dlls/jscript/jscript.h | 1 - dlls/jscript/tests/lang.js | 3 +++ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 4d1350f..5ae6019 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -249,14 +249,6 @@ static HRESULT JSGlobal_RegExp(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, u return constructor_call(ctx->regexp_constr, flags, argc, argv, r); } -static HRESULT JSGlobal_ActiveXObject(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, - jsval_t *r) -{ - TRACE("\n"); - - return constructor_call(ctx->activex_constr, flags, argc, argv, r); -} - static HRESULT JSGlobal_VBArray(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { @@ -1087,7 +1079,6 @@ static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W } static const builtin_prop_t JSGlobal_props[] = { - {ActiveXObjectW, JSGlobal_ActiveXObject, PROPF_CONSTR|1}, {ArrayW, JSGlobal_Array, PROPF_CONSTR|1}, {BooleanW, JSGlobal_Boolean, PROPF_CONSTR|1}, {CollectGarbageW, JSGlobal_CollectGarbage, PROPF_METHOD}, @@ -1146,10 +1137,6 @@ static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype) if(FAILED(hres)) return hres; - hres = create_activex_constr(ctx, &ctx->activex_constr); - if(FAILED(hres)) - return hres; - hres = create_array_constr(ctx, object_prototype, &ctx->array_constr); if(FAILED(hres)) return hres; @@ -1187,7 +1174,7 @@ static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype) HRESULT init_global(script_ctx_t *ctx) { - jsdisp_t *math, *object_prototype; + jsdisp_t *math, *object_prototype, *constr; HRESULT hres; if(ctx->global) @@ -1215,6 +1202,15 @@ HRESULT init_global(script_ctx_t *ctx) if(FAILED(hres)) return hres; + hres = create_activex_constr(ctx, &constr); + if(FAILED(hres)) + return hres; + + hres = jsdisp_propput_dontenum(ctx->global, ActiveXObjectW, jsval_obj(constr)); + jsdisp_release(constr); + if(FAILED(hres)) + return hres; + hres = jsdisp_propput_dontenum(ctx->global, undefinedW, jsval_undefined()); if(FAILED(hres)) return hres; diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h index 0273b00..1e306b6 100644 --- a/dlls/jscript/jscript.h +++ b/dlls/jscript/jscript.h @@ -395,7 +395,6 @@ struct _script_ctx_t { jsdisp_t *global; jsdisp_t *function_constr; - jsdisp_t *activex_constr; jsdisp_t *array_constr; jsdisp_t *bool_constr; jsdisp_t *date_constr; diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js index ccbdb51..a55bf75 100644 --- a/dlls/jscript/tests/lang.js +++ b/dlls/jscript/tests/lang.js @@ -1450,6 +1450,9 @@ function returnTest() { ok(returnTest() === undefined, "returnTest = " + returnTest()); +ActiveXObject = 1; +ok(ActiveXObject === 1, "ActiveXObject = " + ActiveXObject); + /* Keep this test in the end of file */ undefined = 6; ok(undefined === 6, "undefined = " + undefined);