Module: wine Branch: master Commit: 6e4f74f71b640db7eb7fd0f9b1a7ea6996177607 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6e4f74f71b640db7eb7fd0f9b1...
Author: Jacek Caban jacek@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;