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

Unified Diff: src/scopes.cc

Issue 909093003: Parsing: Make Scope not know about Isolate. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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/scopes.h ('k') | src/x64/full-codegen-x64.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/scopes.cc
diff --git a/src/scopes.cc b/src/scopes.cc
index 4680a1cf6a8518e0467ae45e4571d70af3ec311e..fa95bde2b2ff0f6062427003850bf94d2af5db8b 100644
--- a/src/scopes.cc
+++ b/src/scopes.cc
@@ -67,10 +67,9 @@ Variable* VariableMap::Lookup(const AstRawString* name) {
// ----------------------------------------------------------------------------
// Implementation of Scope
-Scope::Scope(Isolate* isolate, Zone* zone, Scope* outer_scope,
- ScopeType scope_type, AstValueFactory* ast_value_factory)
- : isolate_(isolate),
- inner_scopes_(4, zone),
+Scope::Scope(Zone* zone, Scope* outer_scope, ScopeType scope_type,
+ AstValueFactory* ast_value_factory)
+ : inner_scopes_(4, zone),
variables_(zone),
internals_(4, zone),
temps_(4, zone),
@@ -89,11 +88,9 @@ Scope::Scope(Isolate* isolate, Zone* zone, Scope* outer_scope,
}
-Scope::Scope(Isolate* isolate, Zone* zone, Scope* inner_scope,
- ScopeType scope_type, Handle<ScopeInfo> scope_info,
- AstValueFactory* value_factory)
- : isolate_(isolate),
- inner_scopes_(4, zone),
+Scope::Scope(Zone* zone, Scope* inner_scope, ScopeType scope_type,
+ Handle<ScopeInfo> scope_info, AstValueFactory* value_factory)
+ : inner_scopes_(4, zone),
variables_(zone),
internals_(4, zone),
temps_(4, zone),
@@ -115,11 +112,10 @@ Scope::Scope(Isolate* isolate, Zone* zone, Scope* inner_scope,
}
-Scope::Scope(Isolate* isolate, Zone* zone, Scope* inner_scope,
+Scope::Scope(Zone* zone, Scope* inner_scope,
const AstRawString* catch_variable_name,
AstValueFactory* value_factory)
- : isolate_(isolate),
- inner_scopes_(1, zone),
+ : inner_scopes_(1, zone),
variables_(zone),
internals_(0, zone),
temps_(0, zone),
@@ -201,8 +197,8 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
while (!context->IsNativeContext()) {
if (context->IsWithContext()) {
Scope* with_scope = new (zone)
- Scope(isolate, zone, current_scope, WITH_SCOPE,
- Handle<ScopeInfo>::null(), script_scope->ast_value_factory_);
+ Scope(zone, current_scope, WITH_SCOPE, Handle<ScopeInfo>::null(),
+ script_scope->ast_value_factory_);
current_scope = with_scope;
// All the inner scopes are inside a with.
contains_with = true;
@@ -211,31 +207,31 @@ Scope* Scope::DeserializeScopeChain(Isolate* isolate, Zone* zone,
}
} else if (context->IsScriptContext()) {
ScopeInfo* scope_info = ScopeInfo::cast(context->extension());
- current_scope = new (zone) Scope(
- isolate, zone, current_scope, SCRIPT_SCOPE,
- Handle<ScopeInfo>(scope_info), script_scope->ast_value_factory_);
+ current_scope = new (zone) Scope(zone, current_scope, SCRIPT_SCOPE,
+ Handle<ScopeInfo>(scope_info),
+ script_scope->ast_value_factory_);
} else if (context->IsModuleContext()) {
ScopeInfo* scope_info = ScopeInfo::cast(context->module()->scope_info());
- current_scope = new (zone) Scope(
- isolate, zone, current_scope, MODULE_SCOPE,
- Handle<ScopeInfo>(scope_info), script_scope->ast_value_factory_);
+ current_scope = new (zone) Scope(zone, current_scope, MODULE_SCOPE,
+ Handle<ScopeInfo>(scope_info),
+ script_scope->ast_value_factory_);
} else if (context->IsFunctionContext()) {
ScopeInfo* scope_info = context->closure()->shared()->scope_info();
- current_scope = new (zone) Scope(
- isolate, zone, current_scope, FUNCTION_SCOPE,
- Handle<ScopeInfo>(scope_info), script_scope->ast_value_factory_);
+ current_scope = new (zone) Scope(zone, current_scope, FUNCTION_SCOPE,
+ Handle<ScopeInfo>(scope_info),
+ script_scope->ast_value_factory_);
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 = ScopeInfo::cast(context->extension());
- current_scope = new (zone) Scope(
- isolate, zone, current_scope, BLOCK_SCOPE,
- Handle<ScopeInfo>(scope_info), script_scope->ast_value_factory_);
+ current_scope = new (zone)
+ Scope(zone, current_scope, BLOCK_SCOPE, Handle<ScopeInfo>(scope_info),
+ script_scope->ast_value_factory_);
} else {
DCHECK(context->IsCatchContext());
String* name = String::cast(context->extension());
current_scope = new (zone) Scope(
- isolate, zone, current_scope,
+ zone, current_scope,
script_scope->ast_value_factory_->GetString(Handle<String>(name)),
script_scope->ast_value_factory_);
}
@@ -662,7 +658,7 @@ bool Scope::AllocateVariables(CompilationInfo* info, AstNodeFactory* factory) {
if (!ResolveVariablesRecursively(info, factory)) return false;
// 4) Allocate variables.
- AllocateVariablesRecursively();
+ AllocateVariablesRecursively(info->isolate());
return true;
}
@@ -751,18 +747,17 @@ Scope* Scope::DeclarationScope() {
}
-Handle<ScopeInfo> Scope::GetScopeInfo() {
+Handle<ScopeInfo> Scope::GetScopeInfo(Isolate* isolate) {
if (scope_info_.is_null()) {
- scope_info_ = ScopeInfo::Create(isolate(), zone(), this);
+ scope_info_ = ScopeInfo::Create(isolate, zone(), this);
}
return scope_info_;
}
-void Scope::GetNestedScopeChain(
- List<Handle<ScopeInfo> >* chain,
- int position) {
- if (!is_eval_scope()) chain->Add(Handle<ScopeInfo>(GetScopeInfo()));
+void Scope::GetNestedScopeChain(Isolate* isolate,
+ List<Handle<ScopeInfo> >* chain, int position) {
+ if (!is_eval_scope()) chain->Add(Handle<ScopeInfo>(GetScopeInfo(isolate)));
for (int i = 0; i < inner_scopes_.length(); i++) {
Scope* scope = inner_scopes_[i];
@@ -770,7 +765,7 @@ void Scope::GetNestedScopeChain(
int end_pos = scope->end_position();
DCHECK(beg_pos >= 0 && end_pos >= 0);
if (beg_pos <= position && position < end_pos) {
- scope->GetNestedScopeChain(chain, position);
+ scope->GetNestedScopeChain(isolate, chain, position);
return;
}
}
@@ -1245,10 +1240,10 @@ bool Scope::MustAllocateInContext(Variable* var) {
}
-bool Scope::HasArgumentsParameter() {
+bool Scope::HasArgumentsParameter(Isolate* isolate) {
for (int i = 0; i < params_.length(); i++) {
if (params_[i]->name().is_identical_to(
- isolate_->factory()->arguments_string())) {
+ isolate->factory()->arguments_string())) {
return true;
}
}
@@ -1266,14 +1261,14 @@ void Scope::AllocateHeapSlot(Variable* var) {
}
-void Scope::AllocateParameterLocals() {
+void Scope::AllocateParameterLocals(Isolate* isolate) {
DCHECK(is_function_scope());
Variable* arguments = LookupLocal(ast_value_factory_->arguments_string());
DCHECK(arguments != NULL); // functions have 'arguments' declared implicitly
bool uses_sloppy_arguments = false;
- if (MustAllocate(arguments) && !HasArgumentsParameter()) {
+ if (MustAllocate(arguments) && !HasArgumentsParameter(isolate)) {
// 'arguments' is used. Unless there is also a parameter called
// 'arguments', we must be conservative and allocate all parameters to
// the context assuming they will be captured by the arguments object.
@@ -1328,9 +1323,9 @@ void Scope::AllocateParameterLocals() {
}
-void Scope::AllocateNonParameterLocal(Variable* var) {
+void Scope::AllocateNonParameterLocal(Isolate* isolate, Variable* var) {
DCHECK(var->scope() == this);
- DCHECK(!var->IsVariable(isolate_->factory()->dot_result_string()) ||
+ DCHECK(!var->IsVariable(isolate->factory()->dot_result_string()) ||
!var->IsStackLocal());
if (var->IsUnallocated() && MustAllocate(var)) {
if (MustAllocateInContext(var)) {
@@ -1342,14 +1337,14 @@ void Scope::AllocateNonParameterLocal(Variable* var) {
}
-void Scope::AllocateNonParameterLocals() {
+void Scope::AllocateNonParameterLocals(Isolate* isolate) {
// All variables that have no rewrite yet are non-parameter locals.
for (int i = 0; i < temps_.length(); i++) {
- AllocateNonParameterLocal(temps_[i]);
+ AllocateNonParameterLocal(isolate, temps_[i]);
}
for (int i = 0; i < internals_.length(); i++) {
- AllocateNonParameterLocal(internals_[i]);
+ AllocateNonParameterLocal(isolate, internals_[i]);
}
ZoneList<VarAndOrder> vars(variables_.occupancy(), zone());
@@ -1362,7 +1357,7 @@ void Scope::AllocateNonParameterLocals() {
vars.Sort(VarAndOrder::Compare);
int var_count = vars.length();
for (int i = 0; i < var_count; i++) {
- AllocateNonParameterLocal(vars[i].var());
+ AllocateNonParameterLocal(isolate, vars[i].var());
}
// For now, function_ must be allocated at the very end. If it gets
@@ -1370,19 +1365,19 @@ void Scope::AllocateNonParameterLocals() {
// because of the current ScopeInfo implementation (see
// ScopeInfo::ScopeInfo(FunctionScope* scope) constructor).
if (function_ != NULL) {
- AllocateNonParameterLocal(function_->proxy()->var());
+ AllocateNonParameterLocal(isolate, function_->proxy()->var());
}
if (rest_parameter_) {
- AllocateNonParameterLocal(rest_parameter_);
+ AllocateNonParameterLocal(isolate, rest_parameter_);
}
}
-void Scope::AllocateVariablesRecursively() {
+void Scope::AllocateVariablesRecursively(Isolate* isolate) {
// Allocate variables for inner scopes.
for (int i = 0; i < inner_scopes_.length(); i++) {
- inner_scopes_[i]->AllocateVariablesRecursively();
+ inner_scopes_[i]->AllocateVariablesRecursively(isolate);
}
// If scope is already resolved, we still need to allocate
@@ -1394,8 +1389,8 @@ void Scope::AllocateVariablesRecursively() {
// Allocate variables for this scope.
// Parameters must be allocated first, if any.
- if (is_function_scope()) AllocateParameterLocals();
- AllocateNonParameterLocals();
+ if (is_function_scope()) AllocateParameterLocals(isolate);
+ AllocateNonParameterLocals(isolate);
// Force allocation of a context for this scope if necessary. For a 'with'
// scope and for a function scope that makes an 'eval' call we need a context,
« no previous file with comments | « src/scopes.h ('k') | src/x64/full-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698