jscript: Use prototype for builtin Array properties.

This commit is contained in:
Jacek Caban 2012-07-24 13:15:53 +02:00 committed by Alexandre Julliard
parent 3a724d58eb
commit 6e4f74f71b
2 changed files with 20 additions and 1 deletions

View File

@ -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);

View File

@ -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;