mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 758509 (part 6) - Initialize JSScript::savedCallerFun in Create(). r=luke.
--HG-- extra : rebase_source : cc6160a1678a1d9e7957c66fffdeefdbeaceb31e
This commit is contained in:
parent
0620ba99c8
commit
c46732f31b
@ -112,9 +112,10 @@ frontend::CompileScript(JSContext *cx, JSObject *scopeChain, StackFrame *callerF
|
|||||||
if (!tc.init())
|
if (!tc.init())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
bool savedCallerFun = compileAndGo && callerFrame && callerFrame->isFunctionFrame();
|
||||||
Rooted<JSScript*> script(cx);
|
Rooted<JSScript*> script(cx);
|
||||||
script = JSScript::Create(cx, principals, originPrincipals, compileAndGo, noScriptRval,
|
script = JSScript::Create(cx, savedCallerFun, principals, originPrincipals, compileAndGo,
|
||||||
version);
|
noScriptRval, version);
|
||||||
if (!script)
|
if (!script)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -137,10 +138,6 @@ frontend::CompileScript(JSContext *cx, JSObject *scopeChain, StackFrame *callerF
|
|||||||
if (callerFrame && callerFrame->isScriptFrame() && callerFrame->script()->strictModeCode)
|
if (callerFrame && callerFrame->isScriptFrame() && callerFrame->script()->strictModeCode)
|
||||||
sc.setInStrictMode();
|
sc.setInStrictMode();
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
bool savedCallerFun;
|
|
||||||
savedCallerFun = false;
|
|
||||||
#endif
|
|
||||||
if (compileAndGo) {
|
if (compileAndGo) {
|
||||||
if (source) {
|
if (source) {
|
||||||
/*
|
/*
|
||||||
@ -165,9 +162,6 @@ frontend::CompileScript(JSContext *cx, JSObject *scopeChain, StackFrame *callerF
|
|||||||
funbox->emitLink = bce.objectList.lastbox;
|
funbox->emitLink = bce.objectList.lastbox;
|
||||||
bce.objectList.lastbox = funbox;
|
bce.objectList.lastbox = funbox;
|
||||||
bce.objectList.length++;
|
bce.objectList.length++;
|
||||||
#ifdef DEBUG
|
|
||||||
savedCallerFun = true;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,8 +241,6 @@ frontend::CompileScript(JSContext *cx, JSObject *scopeChain, StackFrame *callerF
|
|||||||
if (!script->fullyInitFromEmitter(cx, &bce))
|
if (!script->fullyInitFromEmitter(cx, &bce))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
JS_ASSERT(script->savedCallerFun == savedCallerFun);
|
|
||||||
|
|
||||||
if (!MarkInnerAndOuterFunctions(cx, script))
|
if (!MarkInnerAndOuterFunctions(cx, script))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -266,7 +258,8 @@ frontend::CompileFunctionBody(JSContext *cx, JSFunction *fun,
|
|||||||
const char *filename, unsigned lineno, JSVersion version)
|
const char *filename, unsigned lineno, JSVersion version)
|
||||||
{
|
{
|
||||||
Parser parser(cx, principals, originPrincipals, chars, length, filename, lineno, version,
|
Parser parser(cx, principals, originPrincipals, chars, length, filename, lineno, version,
|
||||||
/* cfp = */ NULL, /* foldConstants = */ true, /* compileAndGo = */ false);
|
/* callerFrame = */ NULL, /* foldConstants = */ true,
|
||||||
|
/* compileAndGo = */ false);
|
||||||
if (!parser.init())
|
if (!parser.init())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -279,8 +272,9 @@ frontend::CompileFunctionBody(JSContext *cx, JSFunction *fun,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
Rooted<JSScript*> script(cx);
|
Rooted<JSScript*> script(cx);
|
||||||
script = JSScript::Create(cx, principals, originPrincipals, /* compileAndGo = */ false,
|
script = JSScript::Create(cx, /* savedCallerFun = */ false, principals, originPrincipals,
|
||||||
/* noScriptRval = */ false, version);
|
/* compileAndGo = */ false, /* noScriptRval = */ false,
|
||||||
|
version);
|
||||||
if (!script)
|
if (!script)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -4864,9 +4864,9 @@ EmitFunc(JSContext *cx, BytecodeEmitter *bce, ParseNode *pn)
|
|||||||
// Inherit various things (principals, version, etc) from the parent.
|
// Inherit various things (principals, version, etc) from the parent.
|
||||||
Rooted<JSScript*> script(cx);
|
Rooted<JSScript*> script(cx);
|
||||||
Rooted<JSScript*> parent(cx, bce->script);
|
Rooted<JSScript*> parent(cx, bce->script);
|
||||||
script = JSScript::Create(cx, parent->principals, parent->originPrincipals,
|
script = JSScript::Create(cx, parent->savedCallerFun, parent->principals,
|
||||||
parent->compileAndGo, /* noScriptRval = */ false,
|
parent->originPrincipals, parent->compileAndGo,
|
||||||
parent->getVersion());
|
/* noScriptRval = */ false, parent->getVersion());
|
||||||
if (!script)
|
if (!script)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -584,7 +584,8 @@ js::XDRScript(XDRState<mode> *xdr, JSScript **scriptp, JSScript *parentScript)
|
|||||||
JS_ASSERT((version_ & VersionFlags::FULL_MASK) == unsigned(version_));
|
JS_ASSERT((version_ & VersionFlags::FULL_MASK) == unsigned(version_));
|
||||||
|
|
||||||
// principals and originPrincipals are set with xdr->initScriptPrincipals(script) below.
|
// principals and originPrincipals are set with xdr->initScriptPrincipals(script) below.
|
||||||
script = JSScript::Create(cx, /* principals = */ NULL, /* originPrincipals = */ NULL,
|
script = JSScript::Create(cx, !!(scriptBits & (1 << SavedCallerFun)),
|
||||||
|
/* principals = */ NULL, /* originPrincipals = */ NULL,
|
||||||
/* compileAndGo = */ false,
|
/* compileAndGo = */ false,
|
||||||
!!(scriptBits & (1 << NoScriptRval)), version_);
|
!!(scriptBits & (1 << NoScriptRval)), version_);
|
||||||
if (!script || !script->partiallyInit(cx, length, nsrcnotes, natoms, nobjects,
|
if (!script || !script->partiallyInit(cx, length, nsrcnotes, natoms, nobjects,
|
||||||
@ -601,8 +602,6 @@ js::XDRScript(XDRState<mode> *xdr, JSScript **scriptp, JSScript *parentScript)
|
|||||||
notes = script->notes();
|
notes = script->notes();
|
||||||
*scriptp = script;
|
*scriptp = script;
|
||||||
|
|
||||||
if (scriptBits & (1 << SavedCallerFun))
|
|
||||||
script->savedCallerFun = true;
|
|
||||||
if (scriptBits & (1 << StrictModeCode))
|
if (scriptBits & (1 << StrictModeCode))
|
||||||
script->strictModeCode = true;
|
script->strictModeCode = true;
|
||||||
if (scriptBits & (1 << ContainsDynamicNameAccess))
|
if (scriptBits & (1 << ContainsDynamicNameAccess))
|
||||||
@ -1095,8 +1094,9 @@ ScriptDataSize(uint32_t length, uint32_t nsrcnotes, uint32_t natoms,
|
|||||||
}
|
}
|
||||||
|
|
||||||
JSScript *
|
JSScript *
|
||||||
JSScript::Create(JSContext *cx, JSPrincipals *principals, JSPrincipals *originPrincipals,
|
JSScript::Create(JSContext *cx, bool savedCallerFun, JSPrincipals *principals,
|
||||||
bool compileAndGo, bool noScriptRval, JSVersion version)
|
JSPrincipals *originPrincipals, bool compileAndGo, bool noScriptRval,
|
||||||
|
JSVersion version)
|
||||||
{
|
{
|
||||||
JSScript *script = js_NewGCScript(cx);
|
JSScript *script = js_NewGCScript(cx);
|
||||||
if (!script)
|
if (!script)
|
||||||
@ -1104,6 +1104,8 @@ JSScript::Create(JSContext *cx, JSPrincipals *principals, JSPrincipals *originPr
|
|||||||
|
|
||||||
PodZero(script);
|
PodZero(script);
|
||||||
|
|
||||||
|
script->savedCallerFun = savedCallerFun;
|
||||||
|
|
||||||
/* Establish invariant: principals implies originPrincipals. */
|
/* Establish invariant: principals implies originPrincipals. */
|
||||||
if (principals) {
|
if (principals) {
|
||||||
script->principals = principals;
|
script->principals = principals;
|
||||||
@ -1329,11 +1331,6 @@ JSScript::fullyInitFromEmitter(JSContext *cx, BytecodeEmitter *bce)
|
|||||||
if (bce->constList.length() != 0)
|
if (bce->constList.length() != 0)
|
||||||
bce->constList.finish(script->consts());
|
bce->constList.finish(script->consts());
|
||||||
script->strictModeCode = bce->sc->inStrictMode();
|
script->strictModeCode = bce->sc->inStrictMode();
|
||||||
if (script->compileAndGo) {
|
|
||||||
const StackFrame *fp = bce->parser->callerFrame;
|
|
||||||
if (fp && fp->isFunctionFrame())
|
|
||||||
script->savedCallerFun = true;
|
|
||||||
}
|
|
||||||
script->bindingsAccessedDynamically = bce->sc->bindingsAccessedDynamically();
|
script->bindingsAccessedDynamically = bce->sc->bindingsAccessedDynamically();
|
||||||
script->funHasExtensibleScope = bce->sc->funHasExtensibleScope();
|
script->funHasExtensibleScope = bce->sc->funHasExtensibleScope();
|
||||||
script->hasSingletons = bce->hasSingletons;
|
script->hasSingletons = bce->hasSingletons;
|
||||||
@ -1793,7 +1790,8 @@ js::CloneScript(JSContext *cx, HandleScript src)
|
|||||||
|
|
||||||
/* Now that all fallible allocation is complete, create the GC thing. */
|
/* Now that all fallible allocation is complete, create the GC thing. */
|
||||||
|
|
||||||
JSScript *dst = JSScript::Create(cx, cx->compartment->principals, src->originPrincipals,
|
JSScript *dst = JSScript::Create(cx, src->savedCallerFun,
|
||||||
|
cx->compartment->principals, src->originPrincipals,
|
||||||
src->compileAndGo, src->noScriptRval, src->getVersion());
|
src->compileAndGo, src->noScriptRval, src->getVersion());
|
||||||
if (!dst) {
|
if (!dst) {
|
||||||
Foreground::free_(data);
|
Foreground::free_(data);
|
||||||
@ -1830,7 +1828,6 @@ js::CloneScript(JSContext *cx, HandleScript src)
|
|||||||
dst->setNeedsArgsObj(src->needsArgsObj());
|
dst->setNeedsArgsObj(src->needsArgsObj());
|
||||||
}
|
}
|
||||||
dst->cloneHasArray(src);
|
dst->cloneHasArray(src);
|
||||||
dst->savedCallerFun = src->savedCallerFun;
|
|
||||||
dst->strictModeCode = src->strictModeCode;
|
dst->strictModeCode = src->strictModeCode;
|
||||||
dst->bindingsAccessedDynamically = src->bindingsAccessedDynamically;
|
dst->bindingsAccessedDynamically = src->bindingsAccessedDynamically;
|
||||||
dst->funHasExtensibleScope = src->funHasExtensibleScope;
|
dst->funHasExtensibleScope = src->funHasExtensibleScope;
|
||||||
|
@ -565,9 +565,9 @@ struct JSScript : public js::gc::Cell
|
|||||||
//
|
//
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static JSScript *Create(JSContext *cx, JSPrincipals *principals,
|
static JSScript *Create(JSContext *cx, bool savedCallerFun,
|
||||||
JSPrincipals *originPrincipals, bool compileAndGo, bool noScriptRval,
|
JSPrincipals *principals, JSPrincipals *originPrincipals, bool compileAndGo,
|
||||||
JSVersion version);
|
bool noScriptRval, JSVersion version);
|
||||||
|
|
||||||
// Three ways ways to initialize a JSScript. Callers of partiallyInit()
|
// Three ways ways to initialize a JSScript. Callers of partiallyInit()
|
||||||
// and fullyInitTrivial() are responsible for notifying the debugger after
|
// and fullyInitTrivial() are responsible for notifying the debugger after
|
||||||
|
@ -112,9 +112,9 @@ GlobalObject::initFunctionAndObjectClasses(JSContext *cx)
|
|||||||
functionProto->flags |= JSFUN_PROTOTYPE;
|
functionProto->flags |= JSFUN_PROTOTYPE;
|
||||||
|
|
||||||
Rooted<JSScript*> script(cx);
|
Rooted<JSScript*> script(cx);
|
||||||
script = JSScript::Create(cx, /* principals = */ NULL, /* originPrincipals = */ NULL,
|
script = JSScript::Create(cx, /* savedCallerFun = */ false, /* principals = */ NULL,
|
||||||
/* compileAndGo = */ false, /* noScriptRval = */ true,
|
/* originPrincipals = */ NULL, /* compileAndGo = */ false,
|
||||||
JSVERSION_DEFAULT);
|
/* noScriptRval = */ true, JSVERSION_DEFAULT);
|
||||||
if (!script || !script->fullyInitTrivial(cx))
|
if (!script || !script->fullyInitTrivial(cx))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user