Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Unified Diff: src/ast/scopes.cc

Issue 2251683002: Move module initialization to DeclarationScope (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Unify Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/scopes.cc
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc
index 28d405873a6e1b6640302bdcbf6659e9b078aeae..b2eadf041ed41a09d473db9cd86dc388a517e675 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -112,11 +112,12 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* outer_scope,
function_kind_(function_kind),
temps_(4, zone),
params_(4, zone),
- sloppy_block_function_map_(zone),
- module_descriptor_(scope_type == MODULE_SCOPE ? new (zone)
- ModuleDescriptor(zone)
- : NULL) {
+ sloppy_block_function_map_(zone) {
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,
@@ -129,11 +130,14 @@ Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
scope_type_(scope_type),
already_resolved_(true) {
SetDefaults();
- if (!scope_info.is_null()) {
+ if (scope_type == WITH_SCOPE) {
+ DCHECK(scope_info.is_null());
+ } else {
scope_calls_eval_ = scope_info->CallsEval();
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.
num_heap_slots_ = Max(num_heap_slots_,
static_cast<int>(Context::MIN_CONTEXT_SLOTS));
@@ -144,12 +148,10 @@ DeclarationScope::DeclarationScope(Zone* zone, Scope* inner_scope,
ScopeType scope_type,
Handle<ScopeInfo> scope_info)
: Scope(zone, inner_scope, scope_type, scope_info),
- function_kind_(scope_info.is_null() ? kNormalFunction
- : scope_info->function_kind()),
+ function_kind_(scope_info->function_kind()),
temps_(0, zone),
params_(0, zone),
- sloppy_block_function_map_(zone),
- module_descriptor_(nullptr) {
+ sloppy_block_function_map_(zone) {
SetDefaults();
}
@@ -179,8 +181,9 @@ void DeclarationScope::SetDefaults() {
arguments_ = nullptr;
this_function_ = nullptr;
arity_ = 0;
- rest_parameter_ = NULL;
+ rest_parameter_ = nullptr;
rest_index_ = -1;
+ module_descriptor_ = nullptr;
}
void Scope::SetDefaults() {
@@ -199,7 +202,7 @@ void Scope::SetDefaults() {
num_heap_slots_ = 0;
num_global_slots_ = 0;
- language_mode_ = is_module_scope() ? STRICT : SLOPPY;
+ language_mode_ = SLOPPY;
scope_inside_with_ = false;
scope_calls_eval_ = false;
@@ -236,7 +239,7 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
if (context->IsWithContext() || context->IsDebugEvaluateContext()) {
// For scope analysis, debug-evaluate is equivalent to a with scope.
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
// function scope in which we are evaluating.
if (context->IsDebugEvaluateContext()) {
@@ -248,23 +251,24 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
s->scope_inside_with_ = true;
}
} else if (context->IsScriptContext()) {
- ScopeInfo* scope_info = context->scope_info();
- current_scope = new (zone) DeclarationScope(
- zone, current_scope, SCRIPT_SCOPE, Handle<ScopeInfo>(scope_info));
+ Handle<ScopeInfo> scope_info(context->scope_info(), isolate);
+ current_scope = new (zone)
+ DeclarationScope(zone, current_scope, SCRIPT_SCOPE, scope_info);
} else if (context->IsFunctionContext()) {
- ScopeInfo* scope_info = context->closure()->shared()->scope_info();
- current_scope = new (zone) DeclarationScope(
- zone, current_scope, FUNCTION_SCOPE, Handle<ScopeInfo>(scope_info));
+ Handle<ScopeInfo> scope_info(context->closure()->shared()->scope_info(),
+ isolate);
+ current_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;
} else if (context->IsBlockContext()) {
- ScopeInfo* scope_info = context->scope_info();
+ Handle<ScopeInfo> scope_info(context->scope_info(), isolate);
if (scope_info->is_declaration_scope()) {
- current_scope = new (zone) DeclarationScope(
- zone, current_scope, BLOCK_SCOPE, Handle<ScopeInfo>(scope_info));
+ current_scope = new (zone)
+ DeclarationScope(zone, current_scope, BLOCK_SCOPE, scope_info);
} else {
- current_scope = new (zone) Scope(zone, current_scope, BLOCK_SCOPE,
- Handle<ScopeInfo>(scope_info));
+ current_scope =
+ new (zone) Scope(zone, current_scope, BLOCK_SCOPE, scope_info);
}
} else {
DCHECK(context->IsCatchContext());
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698