From 6e4f74f71b640db7eb7fd0f9b1a7ea6996177607 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 24 Jul 2012 13:15:53 +0200 Subject: [PATCH] jscript: Use prototype for builtin Array properties. --- dlls/jscript/array.c | 15 ++++++++++++++- dlls/jscript/tests/api.js | 6 ++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 68814120177..856e063aa02 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 f8885dd00e9..4675e08f888 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; -- 2.11.4.GIT