Bug 1627358 - Make SharedContext::Kind be defined but SharedContext::ImmutableFlags. r=tcampbell

Differential Revision: https://phabricator.services.mozilla.com/D72892
This commit is contained in:
caroline 2020-04-29 02:20:24 +00:00
Родитель 0d9a2aef13
Коммит 11cbc02435
2 изменённых файлов: 20 добавлений и 19 удалений

Просмотреть файл

@ -24,7 +24,6 @@ SharedContext::SharedContext(JSContext* cx, Kind kind,
Directives directives, SourceExtent extent, Directives directives, SourceExtent extent,
ImmutableScriptFlags immutableFlags) ImmutableScriptFlags immutableFlags)
: cx_(cx), : cx_(cx),
kind_(kind),
compilationInfo_(compilationInfo), compilationInfo_(compilationInfo),
thisBinding_(ThisBinding::Global), thisBinding_(ThisBinding::Global),
extent(extent), extent(extent),
@ -37,15 +36,15 @@ SharedContext::SharedContext(JSContext* cx, Kind kind,
localStrict(false), localStrict(false),
hasExplicitUseStrict_(false), hasExplicitUseStrict_(false),
immutableFlags_(immutableFlags) { immutableFlags_(immutableFlags) {
if (kind_ == Kind::FunctionBox) { if (kind == Kind::FunctionBox) {
immutableFlags_.setFlag(ImmutableFlags::IsFunction); immutableFlags_.setFlag(ImmutableFlags::IsFunction);
} else if (kind_ == Kind::Module) { } else if (kind == Kind::Module) {
MOZ_ASSERT(!compilationInfo.options.nonSyntacticScope); MOZ_ASSERT(!compilationInfo.options.nonSyntacticScope);
immutableFlags_.setFlag(ImmutableFlags::IsModule); immutableFlags_.setFlag(ImmutableFlags::IsModule);
} else if (kind_ == Kind::Eval) { } else if (kind == Kind::Eval) {
immutableFlags_.setFlag(ImmutableFlags::IsForEval); immutableFlags_.setFlag(ImmutableFlags::IsForEval);
} else { } else {
MOZ_ASSERT(kind_ == Kind::Global); MOZ_ASSERT(kind == Kind::Global);
} }
immutableFlags_.setFlag(ImmutableFlags::Strict, directives.strict()); immutableFlags_.setFlag(ImmutableFlags::Strict, directives.strict());

Просмотреть файл

@ -110,8 +110,6 @@ class SharedContext {
protected: protected:
enum class Kind : uint8_t { FunctionBox, Global, Eval, Module }; enum class Kind : uint8_t { FunctionBox, Global, Eval, Module };
Kind kind_;
CompilationInfo& compilationInfo_; CompilationInfo& compilationInfo_;
ThisBinding thisBinding_; ThisBinding thisBinding_;
@ -156,25 +154,29 @@ class SharedContext {
// it. Otherwise nullptr. // it. Otherwise nullptr.
virtual Scope* compilationEnclosingScope() const = 0; virtual Scope* compilationEnclosingScope() const = 0;
bool isFunctionBox() const { return kind_ == Kind::FunctionBox; } bool isFunctionBox() const {
return immutableFlags_.hasFlag(ImmutableFlags::IsFunction);
}
inline FunctionBox* asFunctionBox(); inline FunctionBox* asFunctionBox();
bool isModuleContext() const { return kind_ == Kind::Module; } bool isModuleContext() const {
return immutableFlags_.hasFlag(ImmutableFlags::IsModule);
}
inline ModuleSharedContext* asModuleContext(); inline ModuleSharedContext* asModuleContext();
bool isGlobalContext() const { return kind_ == Kind::Global; } bool isGlobalContext() const {
return !(isFunctionBox() || isModuleContext() || isEvalContext());
}
inline GlobalSharedContext* asGlobalContext(); inline GlobalSharedContext* asGlobalContext();
bool isEvalContext() const { return kind_ == Kind::Eval; } bool isEvalContext() const {
return immutableFlags_.hasFlag(ImmutableFlags::IsForEval);
}
inline EvalSharedContext* asEvalContext(); inline EvalSharedContext* asEvalContext();
bool isTopLevelContext() const { bool isTopLevelContext() const {
switch (kind_) { if (isModuleContext() || isEvalContext() || isGlobalContext()) {
case Kind::Module:
case Kind::Global:
case Kind::Eval:
return true; return true;
case Kind::FunctionBox:
break;
} }
MOZ_ASSERT(kind_ == Kind::FunctionBox);
MOZ_ASSERT(isFunctionBox());
return false; return false;
} }