Index: src/ast/scopes.cc |
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc |
index 376fbc532af2e848365ba5d822bde2f01ea20ab7..417345a5ef8b6ae33969c54126d16c98d5d4188d 100644 |
--- a/src/ast/scopes.cc |
+++ b/src/ast/scopes.cc |
@@ -87,7 +87,6 @@ Scope::Scope(Zone* zone, Scope* outer_scope, ScopeType scope_type) |
// scope must be a script scope. |
DCHECK_EQ(SCRIPT_SCOPE, scope_type); |
} else { |
- asm_function_ = outer_scope_->asm_module_; |
set_language_mode(outer_scope->language_mode()); |
force_context_allocation_ = |
!is_function_scope() && outer_scope->has_forced_context_allocation(); |
@@ -111,6 +110,7 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* outer_scope, |
params_(4, zone), |
sloppy_block_function_map_(zone) { |
SetDefaults(); |
+ if (outer_scope != nullptr) asm_function_ = outer_scope_->IsAsmModule(); |
} |
ModuleScope::ModuleScope(Zone* zone, DeclarationScope* script_scope, |
@@ -177,6 +177,8 @@ Scope::Scope(Zone* zone, Scope* inner_scope, |
void DeclarationScope::SetDefaults() { |
is_declaration_scope_ = true; |
has_simple_parameters_ = true; |
+ asm_module_ = false; |
+ asm_function_ = false; |
receiver_ = nullptr; |
new_target_ = nullptr; |
function_ = nullptr; |
@@ -210,8 +212,6 @@ void Scope::SetDefaults() { |
scope_calls_eval_ = false; |
scope_uses_super_property_ = false; |
has_arguments_parameter_ = false; |
- asm_module_ = false; |
- asm_function_ = false; |
scope_nonlinear_ = false; |
is_hidden_ = false; |
is_debug_evaluate_scope_ = false; |
@@ -229,6 +229,14 @@ bool Scope::HasSimpleParameters() { |
return !scope->is_function_scope() || scope->has_simple_parameters(); |
} |
+bool Scope::IsAsmModule() const { |
+ return is_function_scope() && AsDeclarationScope()->asm_module(); |
+} |
+ |
+bool Scope::IsAsmFunction() const { |
+ return is_function_scope() && AsDeclarationScope()->asm_function(); |
+} |
+ |
Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone, |
Context* context, |
DeclarationScope* script_scope, |
@@ -259,10 +267,11 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone, |
} else if (context->IsFunctionContext()) { |
Handle<ScopeInfo> scope_info(context->closure()->shared()->scope_info(), |
isolate); |
- current_scope = new (zone) |
+ DeclarationScope* function_scope = new (zone) |
DeclarationScope(zone, current_scope, FUNCTION_SCOPE, scope_info); |
- if (scope_info->IsAsmFunction()) current_scope->asm_function_ = true; |
- if (scope_info->IsAsmModule()) current_scope->asm_module_ = true; |
+ if (scope_info->IsAsmFunction()) function_scope->set_asm_function(); |
+ if (scope_info->IsAsmModule()) function_scope->set_asm_module(); |
+ current_scope = function_scope; |
} else if (context->IsBlockContext()) { |
Handle<ScopeInfo> scope_info(context->scope_info(), isolate); |
if (scope_info->is_declaration_scope()) { |
@@ -1160,8 +1169,8 @@ void Scope::Print(int n) { |
if (is_strict(language_mode())) { |
Indent(n1, "// strict mode scope\n"); |
} |
- if (asm_module_) Indent(n1, "// scope is an asm module\n"); |
- if (asm_function_) Indent(n1, "// scope is an asm function\n"); |
+ if (IsAsmModule()) Indent(n1, "// scope is an asm module\n"); |
+ if (IsAsmFunction()) Indent(n1, "// scope is an asm function\n"); |
if (scope_inside_with_) Indent(n1, "// scope inside 'with'\n"); |
if (scope_calls_eval_) Indent(n1, "// scope calls 'eval'\n"); |
if (scope_uses_super_property_) |
@@ -1491,8 +1500,8 @@ void Scope::PropagateScopeInfo(bool outer_scope_calls_sloppy_eval) { |
if (inner->force_eager_compilation_) { |
force_eager_compilation_ = true; |
} |
- if (asm_module_ && inner->scope_type() == FUNCTION_SCOPE) { |
- inner->asm_function_ = true; |
+ if (IsAsmModule() && inner->is_function_scope()) { |
+ inner->AsDeclarationScope()->set_asm_function(); |
} |
} |
} |