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]; const frontend::StencilModuleEntry& entry = vector[i];
if (entry.specifier) { if (entry.specifier) {
specifier = compilationInfo.liftParserAtomToJSAtom(entry.specifier); specifier = compilationInfo.liftParserAtomToJSAtom(cx, entry.specifier);
if (!specifier) { if (!specifier) {
return nullptr; return nullptr;
} }
} }
if (entry.localName) { if (entry.localName) {
localName = compilationInfo.liftParserAtomToJSAtom(entry.localName); localName = compilationInfo.liftParserAtomToJSAtom(cx, entry.localName);
if (!localName) { if (!localName) {
return nullptr; return nullptr;
} }
} }
if (entry.importName) { if (entry.importName) {
importName = compilationInfo.liftParserAtomToJSAtom(entry.importName); importName = compilationInfo.liftParserAtomToJSAtom(cx, entry.importName);
if (!importName) { if (!importName) {
return nullptr; return nullptr;
} }
} }
if (entry.exportName) { if (entry.exportName) {
exportName = compilationInfo.liftParserAtomToJSAtom(entry.exportName); exportName = compilationInfo.liftParserAtomToJSAtom(cx, entry.exportName);
if (!exportName) { if (!exportName) {
return nullptr; return nullptr;
} }

View File

@ -388,10 +388,10 @@ struct CompilationInfo {
MOZ_MUST_USE bool instantiateStencils(CompilationGCOutput& gcOutput); 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); 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); auto result = stencil.parserAtoms.internJSAtom(cx, *this, atom);
return result.unwrapOr(nullptr); return result.unwrapOr(nullptr);
} }

View File

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

View File

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

View File

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

View File

@ -271,10 +271,10 @@ class MOZ_STACK_CLASS ParserSharedBase : public JS::CustomAutoRooter {
CompilationInfo& getCompilationInfo() { return compilationInfo_; } CompilationInfo& getCompilationInfo() { return compilationInfo_; }
JSAtom* liftParserAtomToJSAtom(const ParserAtom* parserAtom) { JSAtom* liftParserAtomToJSAtom(const ParserAtom* parserAtom) {
return compilationInfo_.liftParserAtomToJSAtom(parserAtom); return compilationInfo_.liftParserAtomToJSAtom(cx_, parserAtom);
} }
const ParserAtom* lowerJSAtomToParserAtom(JSAtom* atom) { 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) inline Directives::Directives(ParseContext* parent)
: strict_(parent->sc()->strict()), asmJS_(parent->useAsmOrInsideUseAsm()) {} : strict_(parent->sc()->strict()), asmJS_(parent->useAsmOrInsideUseAsm()) {}
inline JSAtom* SharedContext::liftParserAtomToJSAtom(const ParserAtom* atomId) { inline JSAtom* SharedContext::liftParserAtomToJSAtom(JSContext* cx,
return compilationInfo_.liftParserAtomToJSAtom(atomId); const ParserAtom* atomId) {
return compilationInfo_.liftParserAtomToJSAtom(cx, atomId);
} }
inline const ParserAtom* SharedContext::lowerJSAtomToParserAtom(JSAtom* atom) { inline const ParserAtom* SharedContext::lowerJSAtomToParserAtom(JSContext* cx,
return compilationInfo_.lowerJSAtomToParserAtom(atom); JSAtom* atom) {
return compilationInfo_.lowerJSAtomToParserAtom(cx, atom);
} }
} // namespace frontend } // namespace frontend

View File

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

View File

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