Bug 476873 - TM: Trace JSOP_ARRAYPUSH. r=brendan.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user