Commit 095b28de authored by verwaest's avatar verwaest Committed by Commit bot

Move module initialization to DeclarationScope

This moves language-mode initialization for MODULE_SCOPE from Scope::SetDefaults to the single constructor that needs to do it. The CL additionally makes it more obvious that scope-info-backed scopes always initialize language-mode unless WITH_SCOPE.

BUG=

Review-Url: https://codereview.chromium.org/2251683002
Cr-Commit-Position: refs/heads/master@{#38650}
parent f1f72228
...@@ -112,11 +112,12 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* outer_scope, ...@@ -112,11 +112,12 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* outer_scope,
function_kind_(function_kind), function_kind_(function_kind),
temps_(4, zone), temps_(4, zone),
params_(4, zone), params_(4, zone),
sloppy_block_function_map_(zone), sloppy_block_function_map_(zone) {
module_descriptor_(scope_type == MODULE_SCOPE ? new (zone)
ModuleDescriptor(zone)
: NULL) {
SetDefaults(); SetDefaults();
if (scope_type == MODULE_SCOPE) {
module_descriptor_ = new (zone) ModuleDescriptor(zone);
language_mode_ = STRICT;
}
} }
Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type, Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
...@@ -129,11 +130,14 @@ Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type, ...@@ -129,11 +130,14 @@ Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
scope_type_(scope_type), scope_type_(scope_type),
already_resolved_(true) { already_resolved_(true) {
SetDefaults(); SetDefaults();
if (!scope_info.is_null()) { if (scope_type == WITH_SCOPE) {
DCHECK(scope_info.is_null());
} else {
scope_calls_eval_ = scope_info->CallsEval(); scope_calls_eval_ = scope_info->CallsEval();
language_mode_ = scope_info->language_mode(); language_mode_ = scope_info->language_mode();
num_heap_slots_ = scope_info_->ContextLength(); num_heap_slots_ = scope_info->ContextLength();
} }
// Ensure at least MIN_CONTEXT_SLOTS to indicate a materialized context. // Ensure at least MIN_CONTEXT_SLOTS to indicate a materialized context.
num_heap_slots_ = Max(num_heap_slots_, num_heap_slots_ = Max(num_heap_slots_,
static_cast<int>(Context::MIN_CONTEXT_SLOTS)); static_cast<int>(Context::MIN_CONTEXT_SLOTS));
...@@ -144,12 +148,10 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* inner_scope, ...@@ -144,12 +148,10 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* inner_scope,
ScopeType scope_type, ScopeType scope_type,
Handle<ScopeInfo> scope_info) Handle<ScopeInfo> scope_info)
: Scope(zone, inner_scope, scope_type, scope_info), : Scope(zone, inner_scope, scope_type, scope_info),
function_kind_(scope_info.is_null() ? kNormalFunction function_kind_(scope_info->function_kind()),
: scope_info->function_kind()),
temps_(0, zone), temps_(0, zone),
params_(0, zone), params_(0, zone),
sloppy_block_function_map_(zone), sloppy_block_function_map_(zone) {
module_descriptor_(nullptr) {
SetDefaults(); SetDefaults();
} }
...@@ -179,8 +181,9 @@ void DeclarationScope::SetDefaults() { ...@@ -179,8 +181,9 @@ void DeclarationScope::SetDefaults() {
arguments_ = nullptr; arguments_ = nullptr;
this_function_ = nullptr; this_function_ = nullptr;
arity_ = 0; arity_ = 0;
rest_parameter_ = NULL; rest_parameter_ = nullptr;
rest_index_ = -1; rest_index_ = -1;
module_descriptor_ = nullptr;
} }
void Scope::SetDefaults() { void Scope::SetDefaults() {
...@@ -199,7 +202,7 @@ void Scope::SetDefaults() { ...@@ -199,7 +202,7 @@ void Scope::SetDefaults() {
num_heap_slots_ = 0; num_heap_slots_ = 0;
num_global_slots_ = 0; num_global_slots_ = 0;
language_mode_ = is_module_scope() ? STRICT : SLOPPY; language_mode_ = SLOPPY;
scope_inside_with_ = false; scope_inside_with_ = false;
scope_calls_eval_ = false; scope_calls_eval_ = false;
...@@ -236,7 +239,7 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone, ...@@ -236,7 +239,7 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
if (context->IsWithContext() || context->IsDebugEvaluateContext()) { if (context->IsWithContext() || context->IsDebugEvaluateContext()) {
// For scope analysis, debug-evaluate is equivalent to a with scope. // For scope analysis, debug-evaluate is equivalent to a with scope.
Scope* with_scope = new (zone) Scope* with_scope = new (zone)
Scope(zone, current_scope, WITH_SCOPE, Handle<ScopeInfo>::null()); Scope(zone, current_scope, WITH_SCOPE, Handle<ScopeInfo>());
// TODO(yangguo): Remove once debug-evaluate properly keeps track of the // TODO(yangguo): Remove once debug-evaluate properly keeps track of the
// function scope in which we are evaluating. // function scope in which we are evaluating.
if (context->IsDebugEvaluateContext()) { if (context->IsDebugEvaluateContext()) {
...@@ -248,23 +251,24 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone, ...@@ -248,23 +251,24 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
s->scope_inside_with_ = true; s->scope_inside_with_ = true;
} }
} else if (context->IsScriptContext()) { } else if (context->IsScriptContext()) {
ScopeInfo* scope_info = context->scope_info(); Handle<ScopeInfo> scope_info(context->scope_info(), isolate);
current_scope = new (zone) DeclarationScope( current_scope = new (zone)
zone, current_scope, SCRIPT_SCOPE, Handle<ScopeInfo>(scope_info)); DeclarationScope(zone, current_scope, SCRIPT_SCOPE, scope_info);
} else if (context->IsFunctionContext()) { } else if (context->IsFunctionContext()) {
ScopeInfo* scope_info = context->closure()->shared()->scope_info(); Handle<ScopeInfo> scope_info(context->closure()->shared()->scope_info(),
current_scope = new (zone) DeclarationScope( isolate);
zone, current_scope, FUNCTION_SCOPE, Handle<ScopeInfo>(scope_info)); current_scope = new (zone)
DeclarationScope(zone, current_scope, FUNCTION_SCOPE, scope_info);
if (scope_info->IsAsmFunction()) current_scope->asm_function_ = true; if (scope_info->IsAsmFunction()) current_scope->asm_function_ = true;
if (scope_info->IsAsmModule()) current_scope->asm_module_ = true; if (scope_info->IsAsmModule()) current_scope->asm_module_ = true;
} else if (context->IsBlockContext()) { } else if (context->IsBlockContext()) {
ScopeInfo* scope_info = context->scope_info(); Handle<ScopeInfo> scope_info(context->scope_info(), isolate);
if (scope_info->is_declaration_scope()) { if (scope_info->is_declaration_scope()) {
current_scope = new (zone) DeclarationScope( current_scope = new (zone)
zone, current_scope, BLOCK_SCOPE, Handle<ScopeInfo>(scope_info)); DeclarationScope(zone, current_scope, BLOCK_SCOPE, scope_info);
} else { } else {
current_scope = new (zone) Scope(zone, current_scope, BLOCK_SCOPE, current_scope =
Handle<ScopeInfo>(scope_info)); new (zone) Scope(zone, current_scope, BLOCK_SCOPE, scope_info);
} }
} else { } else {
DCHECK(context->IsCatchContext()); DCHECK(context->IsCatchContext());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment