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