Bug 476873 - TM: Trace JSOP_ARRAYPUSH. r=brendan.

This commit is contained in:
Jason Orendorff
2009-02-06 13:19:06 -06:00
parent 4fd190c5ff
commit 6ec7d2cd58
6 changed files with 75 additions and 17 deletions

View File

@@ -2137,6 +2137,29 @@ array_push1_dense(JSContext* cx, JSObject* obj, jsval v, jsval *rval)
return IndexToValue(cx, obj->fslots[JSSLOT_ARRAY_LENGTH], rval);
}
JS_FASTCALL JSBool
js_ArrayCompPush(JSContext *cx, JSObject *obj, jsval v)
{
JS_ASSERT(OBJ_IS_DENSE_ARRAY(cx, obj));
uint32_t length = (uint32_t) obj->fslots[JSSLOT_ARRAY_LENGTH];
JS_ASSERT(length <= ARRAY_DENSE_LENGTH(obj));
if (length == ARRAY_DENSE_LENGTH(obj)) {
if (length >= ARRAY_INIT_LIMIT) {
JS_ReportErrorNumberUC(cx, js_GetErrorMessage, NULL,
JSMSG_ARRAY_INIT_TOO_BIG);
return JS_FALSE;
}
if (!ResizeSlots(cx, obj, length, length + ARRAY_GROWBY))
return JS_FALSE;
}
obj->fslots[JSSLOT_ARRAY_LENGTH] = length + 1;
obj->fslots[JSSLOT_ARRAY_COUNT]++;
obj->dslots[length] = v;
return JS_TRUE;
}
#ifdef JS_TRACER
static jsval FASTCALL
Array_p_push1(JSContext* cx, JSObject* obj, jsval v)
@@ -3416,3 +3439,4 @@ JS_DEFINE_CALLINFO_2(extern, OBJECT, js_FastNewArray, CONTEXT, OBJECT,
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_NewUninitializedArray, CONTEXT, OBJECT, UINT32, 0, 0)
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_FastNewArrayWithLength, CONTEXT, OBJECT, UINT32, 0, 0)
JS_DEFINE_CALLINFO_3(extern, OBJECT, js_Array_1str, CONTEXT, OBJECT, STRING, 0, 0)
JS_DEFINE_CALLINFO_3(extern, BOOL, js_ArrayCompPush, CONTEXT, OBJECT, JSVAL, 0, 0)