зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
0d9a2aef13
Коммит
11cbc02435
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче