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)
{
// 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();
MOZ_ASSERT(JSOp(*iter.pc()) == JSOP_EVAL ||

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

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

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

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

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

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

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

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

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

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

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

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