Bug 1658971 - Part 8: Add JSContext* parameter to liftParserAtomToJSAtom and lowerJSAtomToParserAtom. r=tcampbell

Differential Revision: https://phabricator.services.mozilla.com/D88608
This commit is contained in:
Tooru Fujisawa 2020-09-01 23:52:02 +00:00
parent 7b926b0020
commit 4e8d257ace
9 changed files with 30 additions and 25 deletions

View File

@ -1302,28 +1302,28 @@ static ArrayObject* ModuleBuilderInitArray(
const frontend::StencilModuleEntry& entry = vector[i];
if (entry.specifier) {
specifier = compilationInfo.liftParserAtomToJSAtom(entry.specifier);
specifier = compilationInfo.liftParserAtomToJSAtom(cx, entry.specifier);
if (!specifier) {
return nullptr;
}
}
if (entry.localName) {
localName = compilationInfo.liftParserAtomToJSAtom(entry.localName);
localName = compilationInfo.liftParserAtomToJSAtom(cx, entry.localName);
if (!localName) {
return nullptr;
}
}
if (entry.importName) {
importName = compilationInfo.liftParserAtomToJSAtom(entry.importName);
importName = compilationInfo.liftParserAtomToJSAtom(cx, entry.importName);
if (!importName) {
return nullptr;
}
}
if (entry.exportName) {
exportName = compilationInfo.liftParserAtomToJSAtom(entry.exportName);
exportName = compilationInfo.liftParserAtomToJSAtom(cx, entry.exportName);
if (!exportName) {
return nullptr;
}

View File

@ -388,10 +388,10 @@ struct CompilationInfo {
MOZ_MUST_USE bool instantiateStencils(CompilationGCOutput& gcOutput);
JSAtom* liftParserAtomToJSAtom(const ParserAtom* parserAtom) {
JSAtom* liftParserAtomToJSAtom(JSContext* cx, const ParserAtom* parserAtom) {
return parserAtom->toJSAtom(cx, *this).unwrapOr(nullptr);
}
const ParserAtom* lowerJSAtomToParserAtom(JSAtom* atom) {
const ParserAtom* lowerJSAtomToParserAtom(JSContext* cx, JSAtom* atom) {
auto result = stencil.parserAtoms.internJSAtom(cx, *this, atom);
return result.unwrapOr(nullptr);
}

View File

@ -338,7 +338,7 @@ NameLocation EmitterScope::searchAndCache(BytecodeEmitter* bce,
//
// See bug 1660275.
AutoEnterOOMUnsafeRegion oomUnsafe;
JSAtom* jsname = bce->compilationInfo.liftParserAtomToJSAtom(name);
JSAtom* jsname = bce->compilationInfo.liftParserAtomToJSAtom(bce->cx, name);
if (!jsname) {
oomUnsafe.crash("EmitterScope::searchAndCache");
}

View File

@ -24,7 +24,8 @@
namespace js {
static bool InterpretObjLiteralValue(const ObjLiteralAtomVector& atoms,
static bool InterpretObjLiteralValue(JSContext* cx,
const ObjLiteralAtomVector& atoms,
frontend::CompilationInfo& compilationInfo,
const ObjLiteralInsn& insn,
JS::Value* valOut) {
@ -38,7 +39,7 @@ static bool InterpretObjLiteralValue(const ObjLiteralAtomVector& atoms,
// This needs to be coalesced to wherever jsatom creation is eventually
// Seems like InterpretLiteralObj would be called from main-thread
// stencil instantiation.
JSAtom* jsatom = compilationInfo.liftParserAtomToJSAtom(atoms[index]);
JSAtom* jsatom = compilationInfo.liftParserAtomToJSAtom(cx, atoms[index]);
if (!jsatom) {
return false;
}
@ -88,7 +89,7 @@ static JSObject* InterpretObjLiteralObj(
// since the other GC allocations in the function (properties vector,
// etc.) would need to be addressed.
const frontend::ParserAtom* atom = atoms[insn.getKey().getAtomIndex()];
JSAtom* jsatom = compilationInfo.liftParserAtomToJSAtom(atom);
JSAtom* jsatom = compilationInfo.liftParserAtomToJSAtom(cx, atom);
if (!jsatom) {
return nullptr;
}
@ -97,7 +98,8 @@ static JSObject* InterpretObjLiteralObj(
JS::Value propVal;
if (!noValues) {
if (!InterpretObjLiteralValue(atoms, compilationInfo, insn, &propVal)) {
if (!InterpretObjLiteralValue(cx, atoms, compilationInfo, insn,
&propVal)) {
return nullptr;
}
}
@ -131,7 +133,7 @@ static JSObject* InterpretObjLiteralArray(
MOZ_ASSERT(insn.isValid());
JS::Value propVal;
if (!InterpretObjLiteralValue(atoms, compilationInfo, insn, &propVal)) {
if (!InterpretObjLiteralValue(cx, atoms, compilationInfo, insn, &propVal)) {
return nullptr;
}
if (!elements.append(propVal)) {

View File

@ -2693,7 +2693,7 @@ bool Parser<FullParseHandler, Unit>::skipLazyInnerFunction(
const ParserAtom* displayAtom = nullptr;
if (fun->displayAtom()) {
displayAtom =
this->compilationInfo_.lowerJSAtomToParserAtom(fun->displayAtom());
this->compilationInfo_.lowerJSAtomToParserAtom(cx_, fun->displayAtom());
if (!displayAtom) {
return false;
}
@ -3184,7 +3184,7 @@ FunctionNode* Parser<FullParseHandler, Unit>::standaloneLazyFunction(
const ParserAtom* displayAtom = nullptr;
if (fun->displayAtom()) {
displayAtom =
this->compilationInfo_.lowerJSAtomToParserAtom(fun->displayAtom());
this->compilationInfo_.lowerJSAtomToParserAtom(cx_, fun->displayAtom());
if (!displayAtom) {
return null();
}

View File

@ -271,10 +271,10 @@ class MOZ_STACK_CLASS ParserSharedBase : public JS::CustomAutoRooter {
CompilationInfo& getCompilationInfo() { return compilationInfo_; }
JSAtom* liftParserAtomToJSAtom(const ParserAtom* parserAtom) {
return compilationInfo_.liftParserAtomToJSAtom(parserAtom);
return compilationInfo_.liftParserAtomToJSAtom(cx_, parserAtom);
}
const ParserAtom* lowerJSAtomToParserAtom(JSAtom* atom) {
return compilationInfo_.lowerJSAtomToParserAtom(atom);
return compilationInfo_.lowerJSAtomToParserAtom(cx_, atom);
}
};

View File

@ -16,11 +16,13 @@ namespace frontend {
inline Directives::Directives(ParseContext* parent)
: strict_(parent->sc()->strict()), asmJS_(parent->useAsmOrInsideUseAsm()) {}
inline JSAtom* SharedContext::liftParserAtomToJSAtom(const ParserAtom* atomId) {
return compilationInfo_.liftParserAtomToJSAtom(atomId);
inline JSAtom* SharedContext::liftParserAtomToJSAtom(JSContext* cx,
const ParserAtom* atomId) {
return compilationInfo_.liftParserAtomToJSAtom(cx, atomId);
}
inline const ParserAtom* SharedContext::lowerJSAtomToParserAtom(JSAtom* atom) {
return compilationInfo_.lowerJSAtomToParserAtom(atom);
inline const ParserAtom* SharedContext::lowerJSAtomToParserAtom(JSContext* cx,
JSAtom* atom) {
return compilationInfo_.lowerJSAtomToParserAtom(cx, atom);
}
} // namespace frontend

View File

@ -277,8 +277,9 @@ class SharedContext {
return retVal;
}
inline JSAtom* liftParserAtomToJSAtom(const ParserAtom* atomId);
inline const ParserAtom* lowerJSAtomToParserAtom(JSAtom* atom);
inline JSAtom* liftParserAtomToJSAtom(JSContext* cx,
const ParserAtom* atomId);
inline const ParserAtom* lowerJSAtomToParserAtom(JSContext* cx, JSAtom* atom);
void copyScriptFields(ScriptStencil& script);
};

View File

@ -187,7 +187,7 @@ static JSFunction* CreateFunction(JSContext* cx,
RootedAtom displayAtom(cx);
if (script.functionAtom) {
displayAtom.set(
compilationInfo.liftParserAtomToJSAtom(script.functionAtom));
compilationInfo.liftParserAtomToJSAtom(cx, script.functionAtom));
if (!displayAtom) {
return nullptr;
}
@ -355,8 +355,8 @@ static bool SetTypeAndNameForExposedFunctions(JSContext* cx,
JSAtom* funcAtom = nullptr;
if (scriptStencil.functionFlags.hasInferredName() ||
scriptStencil.functionFlags.hasGuessedAtom()) {
funcAtom =
compilationInfo.liftParserAtomToJSAtom(scriptStencil.functionAtom);
funcAtom = compilationInfo.liftParserAtomToJSAtom(
cx, scriptStencil.functionAtom);
if (!funcAtom) {
return false;
}