| Index: src/scopes.cc
|
| diff --git a/src/scopes.cc b/src/scopes.cc
|
| index b55e5d5d7bd38744ad07ffcc9d679d9f96b5e481..c4436fe0c1ceb353a9ecf941e1c911e01c937f2d 100644
|
| --- a/src/scopes.cc
|
| +++ b/src/scopes.cc
|
| @@ -810,8 +810,7 @@ void Scope::AllocateParameterLocals() {
|
|
|
| // We are using 'arguments'. Tell the code generator that is needs to
|
| // allocate the arguments object by setting 'arguments_'.
|
| - arguments_ = new VariableProxy(Factory::arguments_symbol(), false, false);
|
| - arguments_->BindTo(arguments);
|
| + arguments_ = arguments;
|
|
|
| // We also need the '.arguments' shadow variable. Declare it and create
|
| // and bind the corresponding proxy. It's ok to declare it only now
|
| @@ -822,13 +821,13 @@ void Scope::AllocateParameterLocals() {
|
| // NewTemporary() because the mode needs to be INTERNAL since this
|
| // variable may be allocated in the heap-allocated context (temporaries
|
| // are never allocated in the context).
|
| - Variable* arguments_shadow =
|
| - new Variable(this, Factory::arguments_shadow_symbol(),
|
| - Variable::INTERNAL, true, Variable::ARGUMENTS);
|
| - arguments_shadow_ =
|
| - new VariableProxy(Factory::arguments_shadow_symbol(), false, false);
|
| - arguments_shadow_->BindTo(arguments_shadow);
|
| - temps_.Add(arguments_shadow);
|
| + arguments_shadow_ = new Variable(this,
|
| + Factory::arguments_shadow_symbol(),
|
| + Variable::INTERNAL,
|
| + true,
|
| + Variable::ARGUMENTS);
|
| + arguments_shadow_->set_is_used(true);
|
| + temps_.Add(arguments_shadow_);
|
|
|
| // Allocate the parameters by rewriting them into '.arguments[i]' accesses.
|
| for (int i = 0; i < params_.length(); i++) {
|
| @@ -839,14 +838,13 @@ void Scope::AllocateParameterLocals() {
|
| // It is ok to set this only now, because arguments is a local
|
| // variable that is allocated after the parameters have been
|
| // allocated.
|
| - arguments_shadow->is_accessed_from_inner_scope_ = true;
|
| + arguments_shadow_->is_accessed_from_inner_scope_ = true;
|
| }
|
| var->rewrite_ =
|
| - new Property(arguments_shadow_,
|
| - new Literal(Handle<Object>(Smi::FromInt(i))),
|
| - RelocInfo::kNoPosition,
|
| - Property::SYNTHETIC);
|
| - if (var->is_used()) arguments_shadow->set_is_used(true);
|
| + new Property(new VariableProxy(arguments_shadow_),
|
| + new Literal(Handle<Object>(Smi::FromInt(i))),
|
| + RelocInfo::kNoPosition,
|
| + Property::SYNTHETIC);
|
| }
|
| }
|
|
|
| @@ -862,7 +860,8 @@ void Scope::AllocateParameterLocals() {
|
| if (MustAllocate(var)) {
|
| if (MustAllocateInContext(var)) {
|
| ASSERT(var->rewrite_ == NULL ||
|
| - (var->slot() != NULL && var->slot()->type() == Slot::CONTEXT));
|
| + (var->AsSlot() != NULL &&
|
| + var->AsSlot()->type() == Slot::CONTEXT));
|
| if (var->rewrite_ == NULL) {
|
| // Only set the heap allocation if the parameter has not
|
| // been allocated yet.
|
| @@ -870,8 +869,8 @@ void Scope::AllocateParameterLocals() {
|
| }
|
| } else {
|
| ASSERT(var->rewrite_ == NULL ||
|
| - (var->slot() != NULL &&
|
| - var->slot()->type() == Slot::PARAMETER));
|
| + (var->AsSlot() != NULL &&
|
| + var->AsSlot()->type() == Slot::PARAMETER));
|
| // Set the parameter index always, even if the parameter
|
| // was seen before! (We need to access the actual parameter
|
| // supplied for the last occurrence of a multiply declared
|
| @@ -888,7 +887,7 @@ void Scope::AllocateNonParameterLocal(Variable* var) {
|
| ASSERT(var->scope() == this);
|
| ASSERT(var->rewrite_ == NULL ||
|
| (!var->IsVariable(Factory::result_symbol())) ||
|
| - (var->slot() == NULL || var->slot()->type() != Slot::LOCAL));
|
| + (var->AsSlot() == NULL || var->AsSlot()->type() != Slot::LOCAL));
|
| if (var->rewrite_ == NULL && MustAllocate(var)) {
|
| if (MustAllocateInContext(var)) {
|
| AllocateHeapSlot(var);
|
|
|