зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1274193 part 3 - Use GO_THROUGH_SAVED when we know there's no saved frame boundary. r=luke
This commit is contained in:
Родитель
833c5b095c
Коммит
84ec9162df
|
@ -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,15 +2842,16 @@ 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче