Index: src/scopes.cc |
diff --git a/src/scopes.cc b/src/scopes.cc |
index c6e2a4650e1e1112fd54fc699fdd3c0476409b2b..f25f5a359325d29c6f5a5a43b50128bca342a4f6 100644 |
--- a/src/scopes.cc |
+++ b/src/scopes.cc |
@@ -116,25 +116,27 @@ Variable* VariableMap::Lookup(Handle<String> name) { |
// Dummy constructor |
Scope::Scope(Type type) |
- : inner_scopes_(0), |
- variables_(false), |
- temps_(0), |
- params_(0), |
- unresolved_(0), |
- decls_(0), |
- already_resolved_(false) { |
+ : isolate_(Isolate::Current()), |
+ inner_scopes_(0), |
+ variables_(false), |
+ temps_(0), |
+ params_(0), |
+ unresolved_(0), |
+ decls_(0), |
+ already_resolved_(false) { |
SetDefaults(type, NULL, Handle<SerializedScopeInfo>::null()); |
} |
Scope::Scope(Scope* outer_scope, Type type) |
- : inner_scopes_(4), |
- variables_(), |
- temps_(4), |
- params_(4), |
- unresolved_(16), |
- decls_(4), |
- already_resolved_(false) { |
+ : isolate_(Isolate::Current()), |
+ inner_scopes_(4), |
+ variables_(), |
+ temps_(4), |
+ params_(4), |
+ unresolved_(16), |
+ decls_(4), |
+ already_resolved_(false) { |
SetDefaults(type, outer_scope, Handle<SerializedScopeInfo>::null()); |
// At some point we might want to provide outer scopes to |
// eval scopes (by walking the stack and reading the scope info). |
@@ -145,13 +147,14 @@ Scope::Scope(Scope* outer_scope, Type type) |
Scope::Scope(Scope* inner_scope, Handle<SerializedScopeInfo> scope_info) |
- : inner_scopes_(4), |
- variables_(), |
- temps_(4), |
- params_(4), |
- unresolved_(16), |
- decls_(4), |
- already_resolved_(true) { |
+ : isolate_(Isolate::Current()), |
+ inner_scopes_(4), |
+ variables_(), |
+ temps_(4), |
+ params_(4), |
+ unresolved_(16), |
+ decls_(4), |
+ already_resolved_(true) { |
ASSERT(!scope_info.is_null()); |
SetDefaults(FUNCTION_SCOPE, NULL, scope_info); |
if (scope_info->HasHeapAllocatedLocals()) { |
@@ -162,7 +165,8 @@ Scope::Scope(Scope* inner_scope, Handle<SerializedScopeInfo> scope_info) |
Scope::Scope(Scope* inner_scope, Handle<String> catch_variable_name) |
- : inner_scopes_(1), |
+ : isolate_(Isolate::Current()), |
+ inner_scopes_(1), |
variables_(), |
temps_(0), |
params_(0), |
@@ -186,7 +190,7 @@ void Scope::SetDefaults(Type type, |
Handle<SerializedScopeInfo> scope_info) { |
outer_scope_ = outer_scope; |
type_ = type; |
- scope_name_ = FACTORY->empty_symbol(); |
+ scope_name_ = isolate_->factory()->empty_symbol(); |
dynamics_ = NULL; |
receiver_ = NULL; |
function_ = NULL; |
@@ -295,9 +299,12 @@ void Scope::Initialize(bool inside_with) { |
receiver_ = outer_scope()->receiver(); |
} else { |
Variable* var = |
- variables_.Declare(this, FACTORY->this_symbol(), Variable::VAR, |
- false, Variable::THIS); |
- var->set_rewrite(new Slot(var, Slot::PARAMETER, -1)); |
+ variables_.Declare(this, |
+ isolate_->factory()->this_symbol(), |
+ Variable::VAR, |
+ false, |
+ Variable::THIS); |
+ var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::PARAMETER, -1)); |
receiver_ = var; |
} |
@@ -305,8 +312,11 @@ void Scope::Initialize(bool inside_with) { |
// Declare 'arguments' variable which exists in all functions. |
// Note that it might never be accessed, in which case it won't be |
// allocated during variable allocation. |
- variables_.Declare(this, FACTORY->arguments_symbol(), Variable::VAR, |
- true, Variable::ARGUMENTS); |
+ variables_.Declare(this, |
+ isolate_->factory()->arguments_symbol(), |
+ Variable::VAR, |
+ true, |
+ Variable::ARGUMENTS); |
} |
} |
@@ -320,7 +330,7 @@ Variable* Scope::LocalLookup(Handle<String> name) { |
// |
// We should never lookup 'arguments' in this scope as it is implicitly |
// present in every scope. |
- ASSERT(*name != *FACTORY->arguments_symbol()); |
+ ASSERT(*name != *isolate_->factory()->arguments_symbol()); |
// There should be no local slot with the given name. |
ASSERT(scope_info_->StackSlotIndex(*name) < 0); |
@@ -340,7 +350,7 @@ Variable* Scope::LocalLookup(Handle<String> name) { |
Variable* var = |
variables_.Declare(this, name, mode, true, Variable::NORMAL); |
- var->set_rewrite(new Slot(var, Slot::CONTEXT, index)); |
+ var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::CONTEXT, index)); |
return var; |
} |
@@ -397,7 +407,8 @@ VariableProxy* Scope::NewUnresolved(Handle<String> name, |
// the same name because they may be removed selectively via |
// RemoveUnresolved(). |
ASSERT(!already_resolved()); |
- VariableProxy* proxy = new VariableProxy(name, false, inside_with, position); |
+ VariableProxy* proxy = |
+ new(isolate_->zone()) VariableProxy(name, false, inside_with, position); |
unresolved_.Add(proxy); |
return proxy; |
} |
@@ -697,7 +708,7 @@ Variable* Scope::NonLocal(Handle<String> name, Variable::Mode mode) { |
// Declare a new non-local. |
var = map->Declare(NULL, name, mode, true, Variable::NORMAL); |
// Allocate it by giving it a dynamic lookup. |
- var->set_rewrite(new Slot(var, Slot::LOOKUP, -1)); |
+ var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::LOOKUP, -1)); |
} |
return var; |
} |
@@ -943,26 +954,30 @@ bool Scope::MustAllocateInContext(Variable* var) { |
bool Scope::HasArgumentsParameter() { |
for (int i = 0; i < params_.length(); i++) { |
- if (params_[i]->name().is_identical_to(FACTORY->arguments_symbol())) |
+ if (params_[i]->name().is_identical_to( |
+ isolate_->factory()->arguments_symbol())) { |
return true; |
+ } |
} |
return false; |
} |
void Scope::AllocateStackSlot(Variable* var) { |
- var->set_rewrite(new Slot(var, Slot::LOCAL, num_stack_slots_++)); |
+ var->set_rewrite( |
+ new(isolate_->zone()) Slot(var, Slot::LOCAL, num_stack_slots_++)); |
} |
void Scope::AllocateHeapSlot(Variable* var) { |
- var->set_rewrite(new Slot(var, Slot::CONTEXT, num_heap_slots_++)); |
+ var->set_rewrite( |
+ new(isolate_->zone()) Slot(var, Slot::CONTEXT, num_heap_slots_++)); |
} |
void Scope::AllocateParameterLocals() { |
ASSERT(is_function_scope()); |
- Variable* arguments = LocalLookup(FACTORY->arguments_symbol()); |
+ Variable* arguments = LocalLookup(isolate_->factory()->arguments_symbol()); |
ASSERT(arguments != NULL); // functions have 'arguments' declared implicitly |
bool uses_nonstrict_arguments = false; |
@@ -1009,7 +1024,7 @@ void Scope::AllocateParameterLocals() { |
} else { |
ASSERT(var->rewrite() == NULL || var->IsParameter()); |
if (var->rewrite() == NULL) { |
- var->set_rewrite(new Slot(var, Slot::PARAMETER, i)); |
+ var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::PARAMETER, i)); |
} |
} |
} |
@@ -1020,7 +1035,7 @@ void Scope::AllocateParameterLocals() { |
void Scope::AllocateNonParameterLocal(Variable* var) { |
ASSERT(var->scope() == this); |
ASSERT(var->rewrite() == NULL || |
- !var->IsVariable(FACTORY->result_symbol()) || |
+ !var->IsVariable(isolate_->factory()->result_symbol()) || |
var->AsSlot() == NULL || |
var->AsSlot()->type() != Slot::LOCAL); |
if (var->rewrite() == NULL && MustAllocate(var)) { |