Jacek Caban : jscript: Don' t use builtin property for a few more constructors.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Feb 5 10:42:43 CST 2015


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Feb  5 14:47:44 2015 +0100

jscript: Don't use builtin property for a few more constructors.

---

 dlls/jscript/global.c      | 133 +++++++++++++++------------------------------
 dlls/jscript/tests/lang.js |  12 ++++
 2 files changed, 56 insertions(+), 89 deletions(-)

diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c
index 774ed05..1d1ec5b 100644
--- a/dlls/jscript/global.c
+++ b/dlls/jscript/global.c
@@ -121,30 +121,6 @@ static HRESULT constructor_call(jsdisp_t *constr, WORD flags, unsigned argc, jsv
     return S_OK;
 }
 
-static HRESULT JSGlobal_Array(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->array_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_Date(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->date_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_Error(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->error_constr, flags, argc, argv, r);
-}
-
 static HRESULT JSGlobal_EvalError(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
@@ -201,54 +177,6 @@ static HRESULT JSGlobal_URIError(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
     return constructor_call(ctx->uri_error_constr, flags, argc, argv, r);
 }
 
-static HRESULT JSGlobal_Function(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->function_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_Number(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->number_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_Object(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->object_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_String(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->string_constr, flags, argc, argv, r);
-}
-
-static HRESULT JSGlobal_RegExp(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
-        jsval_t *r)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->regexp_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)
-{
-    TRACE("\n");
-
-    return constructor_call(ctx->vbarray_constr, flags, argc, argv, r);
-}
-
 static HRESULT JSGlobal_Enumerator(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
         jsval_t *r)
 {
@@ -1071,29 +999,20 @@ static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, W
 }
 
 static const builtin_prop_t JSGlobal_props[] = {
-    {ArrayW,                     JSGlobal_Array,                     PROPF_CONSTR|1},
     {CollectGarbageW,            JSGlobal_CollectGarbage,            PROPF_METHOD},
-    {DateW,                      JSGlobal_Date,                      PROPF_CONSTR|7},
     {EnumeratorW,                JSGlobal_Enumerator,                PROPF_METHOD|7},
-    {ErrorW,                     JSGlobal_Error,                     PROPF_CONSTR|1},
     {EvalErrorW,                 JSGlobal_EvalError,                 PROPF_CONSTR|1},
-    {FunctionW,                  JSGlobal_Function,                  PROPF_CONSTR|1},
     {_GetObjectW,                JSGlobal_GetObject,                 PROPF_METHOD|2},
-    {NumberW,                    JSGlobal_Number,                    PROPF_CONSTR|1},
-    {ObjectW,                    JSGlobal_Object,                    PROPF_CONSTR|1},
     {RangeErrorW,                JSGlobal_RangeError,                PROPF_CONSTR|1},
     {ReferenceErrorW,            JSGlobal_ReferenceError,            PROPF_CONSTR|1},
-    {RegExpW,                    JSGlobal_RegExp,                    PROPF_CONSTR|2},
     {RegExpErrorW,               JSGlobal_RegExpError,               PROPF_CONSTR|1},
     {ScriptEngineW,              JSGlobal_ScriptEngine,              PROPF_METHOD},
     {ScriptEngineBuildVersionW,  JSGlobal_ScriptEngineBuildVersion,  PROPF_METHOD},
     {ScriptEngineMajorVersionW,  JSGlobal_ScriptEngineMajorVersion,  PROPF_METHOD},
     {ScriptEngineMinorVersionW,  JSGlobal_ScriptEngineMinorVersion,  PROPF_METHOD},
-    {StringW,                    JSGlobal_String,                    PROPF_CONSTR|1},
     {SyntaxErrorW,               JSGlobal_SyntaxError,               PROPF_CONSTR|1},
     {TypeErrorW,                 JSGlobal_TypeError,                 PROPF_CONSTR|1},
     {URIErrorW,                  JSGlobal_URIError,                  PROPF_CONSTR|1},
-    {VBArrayW,                   JSGlobal_VBArray,                   PROPF_CONSTR|1},
     {decodeURIW,                 JSGlobal_decodeURI,                 PROPF_METHOD|1},
     {decodeURIComponentW,        JSGlobal_decodeURIComponent,        PROPF_METHOD|1},
     {encodeURIW,                 JSGlobal_encodeURI,                 PROPF_METHOD|1},
@@ -1124,42 +1043,82 @@ static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, FunctionW, jsval_obj(ctx->function_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_object_constr(ctx, object_prototype, &ctx->object_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, ObjectW, jsval_obj(ctx->object_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_array_constr(ctx, object_prototype, &ctx->array_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, ArrayW, jsval_obj(ctx->array_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_bool_constr(ctx, object_prototype, &ctx->bool_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, BooleanW, jsval_obj(ctx->bool_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_date_constr(ctx, object_prototype, &ctx->date_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, DateW, jsval_obj(ctx->date_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = init_error_constr(ctx, object_prototype);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, ErrorW, jsval_obj(ctx->error_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_number_constr(ctx, object_prototype, &ctx->number_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, NumberW, jsval_obj(ctx->number_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_regexp_constr(ctx, object_prototype, &ctx->regexp_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, RegExpW, jsval_obj(ctx->regexp_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_string_constr(ctx, object_prototype, &ctx->string_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, StringW, jsval_obj(ctx->string_constr));
+    if(FAILED(hres))
+        return hres;
+
     hres = create_vbarray_constr(ctx, object_prototype, &ctx->vbarray_constr);
     if(FAILED(hres))
         return hres;
 
+    hres = jsdisp_propput_dontenum(ctx->global, VBArrayW, jsval_obj(ctx->vbarray_constr));
+    if(FAILED(hres))
+        return hres;
+
     return S_OK;
 }
 
@@ -1171,16 +1130,16 @@ HRESULT init_global(script_ctx_t *ctx)
     if(ctx->global)
         return S_OK;
 
-    hres = create_object_prototype(ctx, &object_prototype);
+    hres = create_dispex(ctx, &JSGlobal_info, NULL, &ctx->global);
     if(FAILED(hres))
         return hres;
 
-    hres = init_constructors(ctx, object_prototype);
-    jsdisp_release(object_prototype);
+    hres = create_object_prototype(ctx, &object_prototype);
     if(FAILED(hres))
         return hres;
 
-    hres = create_dispex(ctx, &JSGlobal_info, NULL, &ctx->global);
+    hres = init_constructors(ctx, object_prototype);
+    jsdisp_release(object_prototype);
     if(FAILED(hres))
         return hres;
 
@@ -1197,10 +1156,6 @@ HRESULT init_global(script_ctx_t *ctx)
     if(FAILED(hres))
         return hres;
 
-    hres = jsdisp_propput_dontenum(ctx->global, BooleanW, jsval_obj(ctx->bool_constr));
-    if(FAILED(hres))
-        return hres;
-
     hres = jsdisp_propput_dontenum(ctx->global, ActiveXObjectW, jsval_obj(constr));
     jsdisp_release(constr);
     if(FAILED(hres))
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js
index b846eb2..3e60aba 100644
--- a/dlls/jscript/tests/lang.js
+++ b/dlls/jscript/tests/lang.js
@@ -1456,6 +1456,18 @@ ok(ActiveXObject === 1, "ActiveXObject = " + ActiveXObject);
 Boolean = 1;
 ok(Boolean === 1, "Boolean = " + Boolean);
 
+Object = 1;
+ok(Object === 1, "Object = " + Object);
+
+Array = 1;
+ok(Array === 1, "Array = " + Array);
+
+Date = 1;
+ok(Date === 1, "Date = " + Date);
+
+Error = 1;
+ok(Error === 1, "Error = " + Error);
+
 /* Keep this test in the end of file */
 undefined = 6;
 ok(undefined === 6, "undefined = " + undefined);




More information about the wine-cvs mailing list