Bug 1274193 part 3 - Use GO_THROUGH_SAVED when we know there's no saved frame boundary. r=luke

This commit is contained in:
Jan de Mooij 2016-05-24 07:51:28 +02:00
Родитель 833c5b095c
Коммит 84ec9162df
7 изменённых файлов: 11 добавлений и 10 удалений

Просмотреть файл

@ -426,7 +426,7 @@ bool
js::DirectEval(JSContext* cx, HandleValue v, MutableHandleValue vp) js::DirectEval(JSContext* cx, HandleValue v, MutableHandleValue vp)
{ {
// Direct eval can assume it was called from an interpreted or baseline frame. // Direct eval can assume it was called from an interpreted or baseline frame.
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
AbstractFramePtr caller = iter.abstractFramePtr(); AbstractFramePtr caller = iter.abstractFramePtr();
MOZ_ASSERT(JSOp(*iter.pc()) == JSOP_EVAL || MOZ_ASSERT(JSOp(*iter.pc()) == JSOP_EVAL ||

Просмотреть файл

@ -2842,13 +2842,14 @@ jit::SetEnterJitData(JSContext* cx, EnterJitData& data, RunState& state,
if (!vals.reserve(1)) if (!vals.reserve(1))
return false; return false;
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED);
data.maxArgc = 1; data.maxArgc = 1;
data.maxArgv = vals.begin(); data.maxArgv = vals.begin();
if (state.asExecute()->newTarget().isNull()) if (state.asExecute()->newTarget().isNull()) {
ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
vals.infallibleAppend(iter.newTarget()); vals.infallibleAppend(iter.newTarget());
else } else {
vals.infallibleAppend(state.asExecute()->newTarget()); vals.infallibleAppend(state.asExecute()->newTarget());
}
} }
} }

Просмотреть файл

@ -1270,7 +1270,7 @@ MarkObjectGroupFromIon(JSRuntime* rt, ObjectGroup** groupp)
bool bool
ThrowRuntimeLexicalError(JSContext* cx, unsigned errorNumber) ThrowRuntimeLexicalError(JSContext* cx, unsigned errorNumber)
{ {
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
RootedScript script(cx, iter.script()); RootedScript script(cx, iter.script());
ReportRuntimeLexicalError(cx, errorNumber, script, iter.pc()); ReportRuntimeLexicalError(cx, errorNumber, script, iter.pc());
return false; return false;

Просмотреть файл

@ -1221,7 +1221,7 @@ js::fun_apply(JSContext* cx, unsigned argc, Value* vp)
// the calling frame (which we must do now). // the calling frame (which we must do now).
if (args[1].isMagic(JS_OPTIMIZED_ARGUMENTS)) { if (args[1].isMagic(JS_OPTIMIZED_ARGUMENTS)) {
// Step 3-6. // Step 3-6.
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
MOZ_ASSERT(iter.numActualArgs() <= ARGS_LENGTH_MAX); MOZ_ASSERT(iter.numActualArgs() <= ARGS_LENGTH_MAX);
if (!args2.init(iter.numActualArgs())) if (!args2.init(iter.numActualArgs()))
return false; return false;

Просмотреть файл

@ -719,7 +719,7 @@ js::DumpPC(JSContext* cx)
Sprinter sprinter(cx); Sprinter sprinter(cx);
if (!sprinter.init()) if (!sprinter.init())
return false; return false;
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
if (iter.done()) { if (iter.done()) {
fprintf(stdout, "Empty stack.\n"); fprintf(stdout, "Empty stack.\n");
return true; return true;

Просмотреть файл

@ -806,7 +806,7 @@ intrinsic_ActiveFunction(JSContext* cx, unsigned argc, Value* vp)
CallArgs args = CallArgsFromVp(argc, vp); CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 0); MOZ_ASSERT(args.length() == 0);
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
MOZ_ASSERT(iter.isFunctionFrame()); MOZ_ASSERT(iter.isFunctionFrame());
args.rval().setObject(*iter.callee(cx)); args.rval().setObject(*iter.callee(cx));
return true; return true;
@ -1880,7 +1880,7 @@ intrinsic_IsConstructing(JSContext* cx, unsigned argc, Value* vp)
CallArgs args = CallArgsFromVp(argc, vp); CallArgs args = CallArgsFromVp(argc, vp);
MOZ_ASSERT(args.length() == 0); MOZ_ASSERT(args.length() == 0);
ScriptFrameIter iter(cx, FrameIter::STOP_AT_SAVED); ScriptFrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
bool isConstructing = iter.isConstructing(); bool isConstructing = iter.isConstructing();
args.rval().setBoolean(isConstructing); args.rval().setBoolean(isConstructing);
return true; return true;

Просмотреть файл

@ -47,7 +47,7 @@ InterpreterFrame::initExecuteFrame(JSContext* cx, HandleScript script, AbstractF
if (newTarget.isNull() && evalInFramePrev.script()->functionOrCallerFunction()) if (newTarget.isNull() && evalInFramePrev.script()->functionOrCallerFunction())
newTarget = evalInFramePrev.newTarget(); newTarget = evalInFramePrev.newTarget();
} else { } else {
FrameIter iter(cx, FrameIter::STOP_AT_SAVED); FrameIter iter(cx, FrameIter::GO_THROUGH_SAVED);
MOZ_ASSERT(!iter.isWasm()); MOZ_ASSERT(!iter.isWasm());
if (newTarget.isNull() && iter.script()->functionOrCallerFunction()) if (newTarget.isNull() && iter.script()->functionOrCallerFunction())
newTarget = iter.newTarget(); newTarget = iter.newTarget();