| Index: src/mips/full-codegen-mips.cc
 | 
| diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc
 | 
| index 48c176acdba7961a4648bf19c3c64fc9acd0041c..8e38ef5c6d76eb5c31f5ac6fd053b66c3b3d620a 100644
 | 
| --- a/src/mips/full-codegen-mips.cc
 | 
| +++ b/src/mips/full-codegen-mips.cc
 | 
| @@ -200,7 +200,7 @@ void FullCodeGenerator::Generate(CompilationInfo* info) {
 | 
|      // Copy any necessary parameters into the context.
 | 
|      int num_parameters = info->scope()->num_parameters();
 | 
|      for (int i = 0; i < num_parameters; i++) {
 | 
| -      Slot* slot = scope()->parameter(i)->AsSlot();
 | 
| +      Slot* slot = scope()->parameter(i)->rewrite();
 | 
|        if (slot != NULL && slot->type() == Slot::CONTEXT) {
 | 
|          int parameter_offset = StandardFrameConstants::kCallerSPOffset +
 | 
|                                   (num_parameters - 1 - i) * kPointerSize;
 | 
| @@ -252,7 +252,7 @@ void FullCodeGenerator::Generate(CompilationInfo* info) {
 | 
|      ArgumentsAccessStub stub(type);
 | 
|      __ CallStub(&stub);
 | 
|  
 | 
| -    Move(arguments->AsSlot(), v0, a1, a2);
 | 
| +    Move(arguments->rewrite(), v0, a1, a2);
 | 
|    }
 | 
|  
 | 
|    if (FLAG_trace) {
 | 
| @@ -633,6 +633,7 @@ MemOperand FullCodeGenerator::EmitSlotSearch(Slot* slot, Register scratch) {
 | 
|        return ContextOperand(scratch, slot->index());
 | 
|      }
 | 
|      case Slot::LOOKUP:
 | 
| +    case Slot::GLOBAL:
 | 
|        UNREACHABLE();
 | 
|    }
 | 
|    UNREACHABLE();
 | 
| @@ -696,7 +697,7 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable,
 | 
|                                          FunctionLiteral* function) {
 | 
|    Comment cmnt(masm_, "[ Declaration");
 | 
|    ASSERT(variable != NULL);  // Must have been resolved.
 | 
| -  Slot* slot = variable->AsSlot();
 | 
| +  Slot* slot = variable->rewrite();
 | 
|    ASSERT(slot != NULL);
 | 
|    switch (slot->type()) {
 | 
|      case Slot::PARAMETER:
 | 
| @@ -769,6 +770,9 @@ void FullCodeGenerator::EmitDeclaration(Variable* variable,
 | 
|        __ CallRuntime(Runtime::kDeclareContextSlot, 4);
 | 
|        break;
 | 
|      }
 | 
| +
 | 
| +    case Slot::GLOBAL:
 | 
| +      UNREACHABLE();
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -1189,7 +1193,7 @@ void FullCodeGenerator::EmitDynamicLoadFromSlotFastCase(
 | 
|      EmitLoadGlobalSlotCheckExtensions(slot, typeof_state, slow);
 | 
|      __ Branch(done);
 | 
|    } else if (slot->var()->mode() == Variable::DYNAMIC_LOCAL) {
 | 
| -    Slot* potential_slot = slot->var()->local_if_not_shadowed()->AsSlot();
 | 
| +    Slot* potential_slot = slot->var()->local_if_not_shadowed()->rewrite();
 | 
|      Expression* rewrite = slot->var()->local_if_not_shadowed()->rewrite();
 | 
|      if (potential_slot != NULL) {
 | 
|        // Generate fast case for locals that rewrite to slots.
 | 
| @@ -1215,7 +1219,7 @@ void FullCodeGenerator::EmitDynamicLoadFromSlotFastCase(
 | 
|            // variables. Then load the argument from the arguments
 | 
|            // object using keyed load.
 | 
|            __ lw(a1,
 | 
| -                 ContextSlotOperandCheckExtensions(obj_proxy->var()->AsSlot(),
 | 
| +                 ContextSlotOperandCheckExtensions(obj_proxy->var()->rewrite(),
 | 
|                                                     slow));
 | 
|            __ li(a0, Operand(key_literal->handle()));
 | 
|            Handle<Code> ic =
 | 
| @@ -1236,7 +1240,7 @@ void FullCodeGenerator::EmitVariableLoad(VariableProxy* proxy) {
 | 
|  
 | 
|    // Three cases: non-this global variables, lookup slots, and all other
 | 
|    // types of slots.
 | 
| -  Slot* slot = var->AsSlot();
 | 
| +  Slot* slot = var->rewrite();
 | 
|    ASSERT((var->is_global() && !var->is_this()) == (slot == NULL));
 | 
|  
 | 
|    if (slot == NULL) {
 | 
| @@ -1833,7 +1837,7 @@ void FullCodeGenerator::EmitAssignment(Expression* expr, int bailout_ast_id) {
 | 
|  void FullCodeGenerator::EmitVariableAssignment(Variable* var,
 | 
|                                                 Token::Value op) {
 | 
|    ASSERT(var != NULL);
 | 
| -  ASSERT(var->is_global() || var->AsSlot() != NULL);
 | 
| +  ASSERT(var->is_global() || var->rewrite() != NULL);
 | 
|  
 | 
|    if (var->is_global()) {
 | 
|      ASSERT(!var->is_this());
 | 
| @@ -1853,7 +1857,7 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
 | 
|      // scope.  However, unlike var initializers, const initializers are able
 | 
|      // to drill a hole to that function context, even from inside a 'with'
 | 
|      // context.  We thus bypass the normal static scope lookup.
 | 
| -    Slot* slot = var->AsSlot();
 | 
| +    Slot* slot = var->rewrite();
 | 
|      Label skip;
 | 
|      switch (slot->type()) {
 | 
|        case Slot::PARAMETER:
 | 
| @@ -1874,6 +1878,8 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
 | 
|          __ Push(cp, a0);  // Context and name.
 | 
|          __ CallRuntime(Runtime::kInitializeConstContextSlot, 3);
 | 
|          break;
 | 
| +      case Slot::GLOBAL:
 | 
| +        UNREACHABLE();
 | 
|      }
 | 
|      __ bind(&skip);
 | 
|    } else if (var->mode() == Variable::LET && op != Token::INIT_LET) {
 | 
| @@ -1930,7 +1936,7 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
 | 
|    } else if (var->mode() != Variable::CONST) {
 | 
|      // Perform the assignment for non-const variables.  Const assignments
 | 
|      // are simply skipped.
 | 
| -    Slot* slot = var->AsSlot();
 | 
| +    Slot* slot = var->rewrite();
 | 
|      switch (slot->type()) {
 | 
|        case Slot::PARAMETER:
 | 
|        case Slot::LOCAL:
 | 
| @@ -1957,6 +1963,9 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
 | 
|          __ Push(cp, a1, a0);  // Context, name, strict mode.
 | 
|          __ CallRuntime(Runtime::kStoreContextSlot, 4);
 | 
|          break;
 | 
| +
 | 
| +      case Slot::GLOBAL:
 | 
| +        UNREACHABLE();
 | 
|      }
 | 
|    }
 | 
|  }
 | 
| @@ -2224,9 +2233,9 @@ void FullCodeGenerator::VisitCall(Call* expr) {
 | 
|        // in generated code. If we succeed, there is no need to perform a
 | 
|        // context lookup in the runtime system.
 | 
|        Label done;
 | 
| -      if (var->AsSlot() != NULL && var->mode() == Variable::DYNAMIC_GLOBAL) {
 | 
| +      if (var->rewrite() != NULL && var->mode() == Variable::DYNAMIC_GLOBAL) {
 | 
|          Label slow;
 | 
| -        EmitLoadGlobalSlotCheckExtensions(var->AsSlot(),
 | 
| +        EmitLoadGlobalSlotCheckExtensions(var->rewrite(),
 | 
|                                            NOT_INSIDE_TYPEOF,
 | 
|                                            &slow);
 | 
|          // Push the function and resolve eval.
 | 
| @@ -2264,15 +2273,15 @@ void FullCodeGenerator::VisitCall(Call* expr) {
 | 
|      __ lw(a0, GlobalObjectOperand());
 | 
|      __ push(a0);
 | 
|      EmitCallWithIC(expr, var->name(), RelocInfo::CODE_TARGET_CONTEXT);
 | 
| -  } else if (var != NULL && var->AsSlot() != NULL &&
 | 
| -             var->AsSlot()->type() == Slot::LOOKUP) {
 | 
| +  } else if (var != NULL && var->rewrite() != NULL &&
 | 
| +             var->rewrite()->type() == Slot::LOOKUP) {
 | 
|      // Call to a lookup slot (dynamically introduced variable).
 | 
|      Label slow, done;
 | 
|  
 | 
|      { PreservePositionScope scope(masm()->positions_recorder());
 | 
|        // Generate code for loading from variables potentially shadowed
 | 
|        // by eval-introduced variables.
 | 
| -      EmitDynamicLoadFromSlotFastCase(var->AsSlot(),
 | 
| +      EmitDynamicLoadFromSlotFastCase(var->rewrite(),
 | 
|                                        NOT_INSIDE_TYPEOF,
 | 
|                                        &slow,
 | 
|                                        &done);
 | 
| @@ -3677,8 +3686,8 @@ void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) {
 | 
|            __ Push(a2, a1, a0);
 | 
|            __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION);
 | 
|            context()->Plug(v0);
 | 
| -        } else if (var->AsSlot() != NULL &&
 | 
| -                   var->AsSlot()->type() != Slot::LOOKUP) {
 | 
| +        } else if (var->rewrite() != NULL &&
 | 
| +                   var->rewrite()->type() != Slot::LOOKUP) {
 | 
|            // Result of deleting non-global, non-dynamic variables is false.
 | 
|            // The subexpression does not have side effects.
 | 
|            context()->Plug(false);
 | 
| @@ -3968,13 +3977,13 @@ void FullCodeGenerator::VisitForTypeofValue(Expression* expr) {
 | 
|      PrepareForBailout(expr, TOS_REG);
 | 
|      context()->Plug(v0);
 | 
|    } else if (proxy != NULL &&
 | 
| -             proxy->var()->AsSlot() != NULL &&
 | 
| -             proxy->var()->AsSlot()->type() == Slot::LOOKUP) {
 | 
| +             proxy->var()->rewrite() != NULL &&
 | 
| +             proxy->var()->rewrite()->type() == Slot::LOOKUP) {
 | 
|      Label done, slow;
 | 
|  
 | 
|      // Generate code for loading from variables potentially shadowed
 | 
|      // by eval-introduced variables.
 | 
| -    Slot* slot = proxy->var()->AsSlot();
 | 
| +    Slot* slot = proxy->var()->rewrite();
 | 
|      EmitDynamicLoadFromSlotFastCase(slot, INSIDE_TYPEOF, &slow, &done);
 | 
|  
 | 
|      __ bind(&slow);
 | 
| 
 |