InterpreterFrame * InterpreterStack::pushExecuteFrame(JSContext *cx, HandleScript script, const Value &thisv, HandleObject scopeChain, ExecuteType type, AbstractFramePtr evalInFrame) { LifoAlloc::Mark mark = allocator_.mark(); unsigned nvars = 2 /* callee, this */ + script->nslots(); uint8_t *buffer = allocateFrame(cx, sizeof(InterpreterFrame) + nvars * sizeof(Value)); if (!buffer) return nullptr; InterpreterFrame *fp = reinterpret_cast<InterpreterFrame *>(buffer + 2 * sizeof(Value)); fp->mark_ = mark; fp->initExecuteFrame(cx, script, evalInFrame, thisv, *scopeChain, type); fp->initVarsToUndefined(); return fp; }