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

Unified Diff: src/ast/scopeinfo.cc

Issue 2209573002: Separate Scope into DeclarationScope and Scope (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Move has_simple_parameters_ to DeclarationScope 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 | « src/ast/prettyprinter.cc ('k') | src/ast/scopes.h » ('j') | src/ast/scopes.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/scopeinfo.cc
diff --git a/src/ast/scopeinfo.cc b/src/ast/scopeinfo.cc
index 20d343f17aa74239f08d53004646b812e8aced68..107f628a76d7dbca1bc2d465302c61576b41eb23 100644
--- a/src/ast/scopeinfo.cc
+++ b/src/ast/scopeinfo.cc
@@ -32,8 +32,9 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
// Determine use and location of the "this" binding if it is present.
VariableAllocationInfo receiver_info;
- if (scope->has_this_declaration()) {
- Variable* var = scope->receiver();
+ if (scope->is_declaration_scope() &&
+ scope->AsDeclarationScope()->has_this_declaration()) {
+ Variable* var = scope->AsDeclarationScope()->receiver();
if (!var->is_used()) {
receiver_info = UNUSED;
} else if (var->IsContextSlot()) {
@@ -46,13 +47,16 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
receiver_info = NONE;
}
- bool has_new_target = scope->new_target_var() != nullptr;
+ bool has_new_target =
+ scope->is_declaration_scope() &&
+ scope->AsDeclarationScope()->new_target_var() != nullptr;
// Determine use and location of the function variable if it is present.
VariableAllocationInfo function_name_info;
VariableMode function_variable_mode;
- if (scope->is_function_scope() && scope->function() != NULL) {
- Variable* var = scope->function()->proxy()->var();
+ if (scope->is_function_scope() &&
+ scope->AsDeclarationScope()->function() != nullptr) {
+ Variable* var = scope->AsDeclarationScope()->function()->proxy()->var();
if (!var->is_used()) {
function_name_info = UNUSED;
} else if (var->IsContextSlot()) {
@@ -80,7 +84,12 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
Handle<ScopeInfo> scope_info = factory->NewScopeInfo(length);
bool has_simple_parameters =
- scope->is_function_scope() && scope->has_simple_parameters();
+ scope->is_function_scope() &&
+ scope->AsDeclarationScope()->has_simple_parameters();
+ FunctionKind function_kind =
+ scope->is_declaration_scope()
+ ? scope->AsDeclarationScope()->function_kind()
+ : kNormalFunction;
// Encode the flags.
int flags = ScopeTypeField::encode(scope->scope_type()) |
@@ -94,7 +103,7 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
AsmModuleField::encode(scope->asm_module()) |
AsmFunctionField::encode(scope->asm_function()) |
HasSimpleParametersField::encode(has_simple_parameters) |
- FunctionKindField::encode(scope->function_kind());
+ FunctionKindField::encode(function_kind);
scope_info->SetFlags(flags);
scope_info->SetParameterCount(parameter_count);
scope_info->SetStackLocalCount(stack_local_count);
@@ -104,8 +113,11 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
int index = kVariablePartIndex;
// Add parameters.
DCHECK(index == scope_info->ParameterEntriesIndex());
- for (int i = 0; i < parameter_count; ++i) {
- scope_info->set(index++, *scope->parameter(i)->name());
+ if (scope->is_declaration_scope()) {
+ for (int i = 0; i < parameter_count; ++i) {
+ scope_info->set(index++,
+ *scope->AsDeclarationScope()->parameter(i)->name());
+ }
}
// Add stack locals' names. We are assuming that the stack locals'
@@ -171,7 +183,7 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
// If the receiver is allocated, add its index.
DCHECK(index == scope_info->ReceiverEntryIndex());
if (has_receiver) {
- int var_index = scope->receiver()->index();
+ int var_index = scope->AsDeclarationScope()->receiver()->index();
scope_info->set(index++, Smi::FromInt(var_index));
// ?? DCHECK(receiver_info != CONTEXT || var_index ==
// scope_info->ContextLength() - 1);
@@ -180,8 +192,10 @@ Handle<ScopeInfo> ScopeInfo::Create(Isolate* isolate, Zone* zone,
// If present, add the function variable name and its index.
DCHECK(index == scope_info->FunctionNameEntryIndex());
if (has_function_name) {
- int var_index = scope->function()->proxy()->var()->index();
- scope_info->set(index++, *scope->function()->proxy()->name());
+ int var_index =
+ scope->AsDeclarationScope()->function()->proxy()->var()->index();
+ scope_info->set(index++,
+ *scope->AsDeclarationScope()->function()->proxy()->name());
scope_info->set(index++, Smi::FromInt(var_index));
DCHECK(function_name_info != CONTEXT ||
var_index == scope_info->ContextLength() - 1);
« no previous file with comments | « src/ast/prettyprinter.cc ('k') | src/ast/scopes.h » ('j') | src/ast/scopes.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698