| 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);
 | 
| 
 |