Fix ComputeThis perf regression (420426, r=mrbkap, a=sayrer).

This commit is contained in:
brendan@mozilla.org 2008-02-29 23:37:27 -08:00
parent 8b7a32637b
commit 1575ad453e

View File

@ -4202,10 +4202,13 @@ interrupt:
: !OBJ_GET_PROPERTY(cx, obj, id, &rval)) { : !OBJ_GET_PROPERTY(cx, obj, id, &rval)) {
goto error; goto error;
} }
/* Assert that we can avoid calling ComputeThis. */
JS_ASSERT(OBJ_GET_CLASS(cx, obj) != &js_CallClass);
JS_ASSERT(!obj->map->ops->thisObject);
STORE_OPND(-1, OBJECT_TO_JSVAL(obj)); STORE_OPND(-1, OBJECT_TO_JSVAL(obj));
STORE_OPND(-2, rval); STORE_OPND(-2, rval);
if (!ComputeThis(cx, JS_FALSE, sp))
goto error;
} else { } else {
JS_ASSERT(obj->map->ops->getProperty == js_GetProperty); JS_ASSERT(obj->map->ops->getProperty == js_GetProperty);
if (!js_GetPropertyHelper(cx, obj, id, &rval, &entry)) if (!js_GetPropertyHelper(cx, obj, id, &rval, &entry))
@ -4888,12 +4891,8 @@ interrupt:
do_push_rval: do_push_rval:
PUSH_OPND(rval); PUSH_OPND(rval);
if (op == JSOP_CALLNAME) { if (op == JSOP_CALLNAME)
PUSH_OPND(OBJECT_TO_JSVAL(obj)); PUSH_OPND(OBJECT_TO_JSVAL(obj));
SAVE_SP(fp);
if (!ComputeThis(cx, JS_FALSE, sp))
goto error;
}
} }
END_CASE(JSOP_NAME) END_CASE(JSOP_NAME)
@ -5089,6 +5088,12 @@ interrupt:
if (!obj) if (!obj)
goto error; goto error;
fp->thisp = obj; fp->thisp = obj;
} else {
/* |this| must be an outer object by definition. */
OBJ_TO_OUTER_OBJECT(cx, obj);
if (!obj)
goto error;
fp->thisp = obj;
} }
PUSH_OPND(OBJECT_TO_JSVAL(obj)); PUSH_OPND(OBJECT_TO_JSVAL(obj));
END_CASE(JSOP_THIS) END_CASE(JSOP_THIS)
@ -6316,10 +6321,8 @@ interrupt:
goto error; goto error;
STORE_OPND(-1, rval); STORE_OPND(-1, rval);
if (op == JSOP_CALLXMLNAME) { if (op == JSOP_CALLXMLNAME) {
JS_ASSERT(OBJECT_IS_XML(cx, obj));
PUSH_OPND(OBJECT_TO_JSVAL(obj)); PUSH_OPND(OBJECT_TO_JSVAL(obj));
SAVE_SP(fp);
if (!ComputeThis(cx, JS_FALSE, sp))
goto error;
} }
END_CASE(JSOP_XMLNAME) END_CASE(JSOP_XMLNAME)