From 53c72eee46be0216346675cae790af5d6e28a617 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 30 Aug 2012 00:31:13 -0700 Subject: [PATCH] Fix merge bustage, part a billion. --- js/src/ion/IonBuilder.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/js/src/ion/IonBuilder.cpp b/js/src/ion/IonBuilder.cpp index cacd0273c2a..6154a7c929a 100644 --- a/js/src/ion/IonBuilder.cpp +++ b/js/src/ion/IonBuilder.cpp @@ -3029,7 +3029,7 @@ IonBuilder::makePolyInlineDispatch(JSContext *cx, AutoObjectVector &targets, int MResumePoint::ResumeAt); if (!preCallResumePoint) return NULL; - size_t preCallFuncDefnIdx = preCallResumePoint->numOperands() - (((size_t) argc) + 2); + DebugOnly preCallFuncDefnIdx = preCallResumePoint->numOperands() - (((size_t) argc) + 2); JS_ASSERT(preCallResumePoint->getOperand(preCallFuncDefnIdx) == funcDefn); MDefinition *targetObject = getPropCache->object(); @@ -3594,6 +3594,10 @@ IonBuilder::jsop_funcall(uint32 argc) bool IonBuilder::jsop_funapply(uint32 argc) { + RootedFunction native(cx, getSingleCallTarget(argc, pc)); + if (argc != 2) + return makeCall(native, argc, false); + // Disable compilation if the second argument to |apply| cannot be guaranteed // to be either definitely |arguments| or definitely not |arguments|. types::StackTypeSet *argObjTypes = oracle->getCallArg(script, argc, 2, pc); @@ -3601,18 +3605,15 @@ IonBuilder::jsop_funapply(uint32 argc) if (isArgObj == MaybeArguments) return abort("fun.apply with MaybeArguments"); - RootedFunction native(cx, getSingleCallTarget(argc, pc)); - // Fallback to regular call if arg 2 is not definitely |arguments|. if (isArgObj != DefinitelyArguments) return makeCall(native, argc, false); if (!native || !native->isNative() || - native->native() != js_fun_apply || - argc != 2) + native->native() != js_fun_apply) { - return abort("unrecognized fun.apply sequence"); + return abort("fun.apply speculation failed"); } // Stack for JSOP_FUNAPPLY: