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

Unified Diff: src/ast/scopes.cc

Issue 2158393002: Make the Scope constructors less reliant on SetDefaults to magically set flags (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Reupload Created 4 years, 5 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 | « src/ast/scopes.h ('k') | 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 69d1cb78a2449d523b4046c7701ec846737cf162..b01c2ff5f6d55c71401e92fc44fa06920bedba14 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -84,38 +84,53 @@ void SloppyBlockFunctionMap::Declare(const AstRawString* name,
Scope::Scope(Zone* zone, Scope* outer_scope, ScopeType scope_type,
FunctionKind function_kind)
- : inner_scopes_(4, zone),
+ : outer_scope_(outer_scope),
+ inner_scopes_(4, zone),
+ scope_type_(scope_type),
+ function_kind_(function_kind),
variables_(zone),
temps_(4, zone),
params_(4, zone),
- unresolved_(nullptr),
decls_(4, zone),
module_descriptor_(scope_type == MODULE_SCOPE ? new (zone)
ModuleDescriptor(zone)
: NULL),
sloppy_block_function_map_(zone),
- already_resolved_(false),
- zone_(zone) {
- SetDefaults(scope_type, outer_scope, Handle<ScopeInfo>::null(),
- function_kind);
+ already_resolved_(false) {
+ SetDefaults();
+ if (outer_scope != nullptr) {
+ asm_function_ = outer_scope_->asm_module_;
+ // Inherit the language mode from the parent scope unless we're a module
+ // scope.
+ if (!is_module_scope()) language_mode_ = outer_scope->language_mode_;
+ force_context_allocation_ =
+ !is_function_scope() && outer_scope->has_forced_context_allocation();
+ }
+
// The outermost scope must be a script scope.
- DCHECK(scope_type == SCRIPT_SCOPE || outer_scope != NULL);
+ DCHECK(scope_type == SCRIPT_SCOPE || outer_scope != nullptr);
}
Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
Handle<ScopeInfo> scope_info)
- : inner_scopes_(4, zone),
+ : outer_scope_(nullptr),
+ inner_scopes_(4, zone),
+ scope_type_(scope_type),
+ function_kind_(scope_info.is_null() ? kNormalFunction
+ : scope_info->function_kind()),
variables_(zone),
temps_(4, zone),
params_(4, zone),
- unresolved_(nullptr),
decls_(4, zone),
- module_descriptor_(NULL),
+ module_descriptor_(nullptr),
sloppy_block_function_map_(zone),
already_resolved_(true),
- zone_(zone) {
- SetDefaults(scope_type, NULL, scope_info);
+ scope_info_(scope_info) {
+ SetDefaults();
if (!scope_info.is_null()) {
+ scope_calls_eval_ = scope_info->CallsEval();
+ language_mode_ = scope_info->language_mode();
+ is_declaration_scope_ = scope_info->is_declaration_scope();
num_heap_slots_ = scope_info_->ContextLength();
}
// Ensure at least MIN_CONTEXT_SLOTS to indicate a materialized context.
@@ -126,17 +141,18 @@ Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
Scope::Scope(Zone* zone, Scope* inner_scope,
const AstRawString* catch_variable_name)
- : inner_scopes_(1, zone),
+ : outer_scope_(nullptr),
+ inner_scopes_(1, zone),
+ scope_type_(CATCH_SCOPE),
+ function_kind_(kNormalFunction),
variables_(zone),
temps_(0, zone),
params_(0, zone),
- unresolved_(nullptr),
decls_(0, zone),
- module_descriptor_(NULL),
+ module_descriptor_(nullptr),
sloppy_block_function_map_(zone),
- already_resolved_(true),
- zone_(zone) {
- SetDefaults(CATCH_SCOPE, NULL, Handle<ScopeInfo>::null());
+ already_resolved_(true) {
+ SetDefaults();
AddInnerScope(inner_scope);
++num_var_;
num_heap_slots_ = Context::MIN_CONTEXT_SLOTS;
@@ -148,16 +164,11 @@ Scope::Scope(Zone* zone, Scope* inner_scope,
AllocateHeapSlot(variable);
}
-
-void Scope::SetDefaults(ScopeType scope_type, Scope* outer_scope,
- Handle<ScopeInfo> scope_info,
- FunctionKind function_kind) {
- outer_scope_ = outer_scope;
- scope_type_ = scope_type;
+void Scope::SetDefaults() {
is_declaration_scope_ =
is_eval_scope() || is_function_scope() ||
is_module_scope() || is_script_scope();
- function_kind_ = function_kind;
+ unresolved_ = nullptr;
scope_name_ = nullptr;
dynamics_ = nullptr;
receiver_ = nullptr;
@@ -170,18 +181,13 @@ void Scope::SetDefaults(ScopeType scope_type, Scope* outer_scope,
scope_uses_arguments_ = false;
scope_uses_super_property_ = false;
asm_module_ = false;
- asm_function_ = outer_scope != NULL && outer_scope->asm_module_;
- // Inherit the language mode from the parent scope.
- language_mode_ =
- is_module_scope()
- ? STRICT
- : (outer_scope != NULL ? outer_scope->language_mode_ : SLOPPY);
+ asm_function_ = false;
+ language_mode_ = is_module_scope() ? STRICT : SLOPPY;
outer_scope_calls_sloppy_eval_ = false;
inner_scope_calls_eval_ = false;
scope_nonlinear_ = false;
force_eager_compilation_ = false;
- force_context_allocation_ = (outer_scope != NULL && !is_function_scope())
- ? outer_scope->has_forced_context_allocation() : false;
+ force_context_allocation_ = false;
num_var_ = 0;
num_stack_slots_ = 0;
num_heap_slots_ = 0;
@@ -190,16 +196,9 @@ void Scope::SetDefaults(ScopeType scope_type, Scope* outer_scope,
has_simple_parameters_ = true;
rest_parameter_ = NULL;
rest_index_ = -1;
- scope_info_ = scope_info;
start_position_ = kNoSourcePosition;
end_position_ = kNoSourcePosition;
is_hidden_ = false;
- if (!scope_info.is_null()) {
- scope_calls_eval_ = scope_info->CallsEval();
- language_mode_ = scope_info->language_mode();
- is_declaration_scope_ = scope_info->is_declaration_scope();
- function_kind_ = scope_info->function_kind();
- }
}
Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
« no previous file with comments | « src/ast/scopes.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698