Jacek Caban : jscript: Use prototype for builtin Array properties.

Alexandre Julliard julliard at winehq.org
Tue Jul 24 14:39:31 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Jul 24 13:15:53 2012 +0200

jscript: Use prototype for builtin Array properties.

---

 dlls/jscript/array.c      |   15 ++++++++++++++-
 dlls/jscript/tests/api.js |    6 ++++++
 2 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c
index 6881412..856e063 100644
--- a/dlls/jscript/array.c
+++ b/dlls/jscript/array.c
@@ -1100,6 +1100,19 @@ static const builtin_info_t Array_info = {
     Array_on_put
 };
 
+static const builtin_prop_t ArrayInst_props[] = {
+    {lengthW,                Array_length,               0}
+};
+
+static const builtin_info_t ArrayInst_info = {
+    JSCLASS_ARRAY,
+    {NULL, Array_value, 0},
+    sizeof(ArrayInst_props)/sizeof(*ArrayInst_props),
+    ArrayInst_props,
+    Array_destructor,
+    Array_on_put
+};
+
 static HRESULT ArrayConstr_value(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, VARIANT *argv,
         VARIANT *retv, jsexcept_t *ei)
 {
@@ -1161,7 +1174,7 @@ static HRESULT alloc_array(script_ctx_t *ctx, jsdisp_t *object_prototype, ArrayI
     if(object_prototype)
         hres = init_dispex(&array->dispex, ctx, &Array_info, object_prototype);
     else
-        hres = init_dispex_from_constr(&array->dispex, ctx, &Array_info, ctx->array_constr);
+        hres = init_dispex_from_constr(&array->dispex, ctx, &ArrayInst_info, ctx->array_constr);
 
     if(FAILED(hres)) {
         heap_free(array);
diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js
index f8885dd..4675e08 100644
--- a/dlls/jscript/tests/api.js
+++ b/dlls/jscript/tests/api.js
@@ -211,6 +211,12 @@ ok(!Object.hasOwnProperty('isPrototypeOf'), "Object.hasOwnProperty('isPrototypeO
 ok(!parseFloat.hasOwnProperty('call'), "parseFloat.hasOwnProperty('call') is true");
 ok(!Function.hasOwnProperty('call'), "Function.hasOwnProperty('call') is true");
 
+obj = new Array();
+ok(Array.prototype.hasOwnProperty('sort'), "Array.prototype.hasOwnProperty('sort') is false");
+ok(Array.prototype.hasOwnProperty('length'), "Array.prototype.hasOwnProperty('length') is false");
+ok(!obj.hasOwnProperty('sort'), "obj.hasOwnProperty('sort') is true");
+ok(obj.hasOwnProperty('length'), "obj.hasOwnProperty('length') is true");
+
 tmp = "" + new Object();
 ok(tmp === "[object Object]", "'' + new Object() = " + tmp);
 (tmp = new Array).f = Object.prototype.toString;




More information about the wine-cvs mailing list