| Index: src/full-codegen.h
 | 
| diff --git a/src/full-codegen.h b/src/full-codegen.h
 | 
| index 28be00855ec28a8053c2356d512abd4f7f26478b..4ddc8ab62c69bc4608fc3b16ef3599f66ad960b0 100644
 | 
| --- a/src/full-codegen.h
 | 
| +++ b/src/full-codegen.h
 | 
| @@ -288,10 +288,6 @@ class FullCodeGenerator: public AstVisitor {
 | 
|    // with a GC-safe value.
 | 
|    void ClearAccumulator();
 | 
|  
 | 
| -  // Compute the frame pointer relative offset for a given local or
 | 
| -  // parameter slot.
 | 
| -  int SlotOffset(Slot* slot);
 | 
| -
 | 
|    // Determine whether or not to inline the smi case for the given
 | 
|    // operation.
 | 
|    bool ShouldInlineSmiCase(Token::Value op);
 | 
| @@ -321,13 +317,29 @@ class FullCodeGenerator: public AstVisitor {
 | 
|               Label* fall_through);
 | 
|  #endif  // V8_TARGET_ARCH_MIPS
 | 
|  
 | 
| -  void Move(Slot* dst, Register source, Register scratch1, Register scratch2);
 | 
| -  void Move(Register dst, Slot* source);
 | 
| -
 | 
| -  // Return an operand used to read/write to a known (ie, non-LOOKUP) slot.
 | 
| -  // May emit code to traverse the context chain, destroying the scratch
 | 
| -  // register.
 | 
| -  MemOperand EmitSlotSearch(Slot* slot, Register scratch);
 | 
| +  // Load the value of a known (PARAMETER, LOCAL, or CONTEXT) variable into
 | 
| +  // a register.  Emits a context chain walk if if necessary (so does
 | 
| +  // SetVar) so avoid calling both on the same variable.
 | 
| +  void GetVar(Register destination, Variable* var);
 | 
| +
 | 
| +  // Assign to a known (PARAMETER, LOCAL, or CONTEXT) variable.  If it's in
 | 
| +  // the context, the write barrier will be emitted and source, scratch0,
 | 
| +  // scratch1 will be clobbered.  Emits a context chain walk if if necessary
 | 
| +  // (so does GetVar) so avoid calling both on the same variable.
 | 
| +  void SetVar(Variable* var,
 | 
| +              Register source,
 | 
| +              Register scratch0,
 | 
| +              Register scratch1);
 | 
| +
 | 
| +  // An operand used to read/write a stack-allocated (PARAMETER or LOCAL)
 | 
| +  // variable.  Writing does not need the write barrier.
 | 
| +  MemOperand StackOperand(Variable* var);
 | 
| +
 | 
| +  // An operand used to read/write a known (PARAMETER, LOCAL, or CONTEXT)
 | 
| +  // variable.  May emit code to traverse the context chain, loading the
 | 
| +  // found context into the scratch register.  Writing to this operand will
 | 
| +  // need the write barrier if location is CONTEXT.
 | 
| +  MemOperand VarOperand(Variable* var, Register scratch);
 | 
|  
 | 
|    // Forward the bailout responsibility for the given expression to
 | 
|    // the next child visited (which must be in a test context).
 | 
| @@ -405,7 +417,8 @@ class FullCodeGenerator: public AstVisitor {
 | 
|    // declaration.  Functions have an initial value.
 | 
|    void EmitDeclaration(VariableProxy* proxy,
 | 
|                         Variable::Mode mode,
 | 
| -                       FunctionLiteral* function);
 | 
| +                       FunctionLiteral* function,
 | 
| +                       int* global_count);
 | 
|  
 | 
|    // Platform-specific code for checking the stack limit at the back edge of
 | 
|    // a loop.
 | 
| @@ -436,14 +449,14 @@ class FullCodeGenerator: public AstVisitor {
 | 
|  #undef EMIT_INLINE_RUNTIME_CALL
 | 
|  
 | 
|    // Platform-specific code for loading variables.
 | 
| -  void EmitLoadGlobalSlotCheckExtensions(Slot* slot,
 | 
| -                                         TypeofState typeof_state,
 | 
| -                                         Label* slow);
 | 
| -  MemOperand ContextSlotOperandCheckExtensions(Slot* slot, Label* slow);
 | 
| -  void EmitDynamicLoadFromSlotFastCase(Slot* slot,
 | 
| -                                       TypeofState typeof_state,
 | 
| -                                       Label* slow,
 | 
| -                                       Label* done);
 | 
| +  void EmitLoadGlobalCheckExtensions(Variable* var,
 | 
| +                                     TypeofState typeof_state,
 | 
| +                                     Label* slow);
 | 
| +  MemOperand ContextSlotOperandCheckExtensions(Variable* var, Label* slow);
 | 
| +  void EmitDynamicLookupFastCase(Variable* var,
 | 
| +                                 TypeofState typeof_state,
 | 
| +                                 Label* slow,
 | 
| +                                 Label* done);
 | 
|    void EmitVariableLoad(VariableProxy* proxy);
 | 
|  
 | 
|    enum ResolveEvalFlag {
 | 
| @@ -620,11 +633,11 @@ class FullCodeGenerator: public AstVisitor {
 | 
|      // this expression context.
 | 
|      virtual void Plug(bool flag) const = 0;
 | 
|  
 | 
| -    // Emit code to convert a pure value (in a register, slot, as a literal,
 | 
| -    // or on top of the stack) into the result expected according to this
 | 
| -    // expression context.
 | 
| +    // Emit code to convert a pure value (in a register, known variable
 | 
| +    // location, as a literal, or on top of the stack) into the result
 | 
| +    // expected according to this expression context.
 | 
|      virtual void Plug(Register reg) const = 0;
 | 
| -    virtual void Plug(Slot* slot) const = 0;
 | 
| +    virtual void Plug(Variable* var) const = 0;
 | 
|      virtual void Plug(Handle<Object> lit) const = 0;
 | 
|      virtual void Plug(Heap::RootListIndex index) const = 0;
 | 
|      virtual void PlugTOS() const = 0;
 | 
| @@ -682,7 +695,7 @@ class FullCodeGenerator: public AstVisitor {
 | 
|      virtual void Plug(bool flag) const;
 | 
|      virtual void Plug(Register reg) const;
 | 
|      virtual void Plug(Label* materialize_true, Label* materialize_false) const;
 | 
| -    virtual void Plug(Slot* slot) const;
 | 
| +    virtual void Plug(Variable* var) const;
 | 
|      virtual void Plug(Handle<Object> lit) const;
 | 
|      virtual void Plug(Heap::RootListIndex) const;
 | 
|      virtual void PlugTOS() const;
 | 
| @@ -705,7 +718,7 @@ class FullCodeGenerator: public AstVisitor {
 | 
|      virtual void Plug(bool flag) const;
 | 
|      virtual void Plug(Register reg) const;
 | 
|      virtual void Plug(Label* materialize_true, Label* materialize_false) const;
 | 
| -    virtual void Plug(Slot* slot) const;
 | 
| +    virtual void Plug(Variable* var) const;
 | 
|      virtual void Plug(Handle<Object> lit) const;
 | 
|      virtual void Plug(Heap::RootListIndex) const;
 | 
|      virtual void PlugTOS() const;
 | 
| @@ -746,7 +759,7 @@ class FullCodeGenerator: public AstVisitor {
 | 
|      virtual void Plug(bool flag) const;
 | 
|      virtual void Plug(Register reg) const;
 | 
|      virtual void Plug(Label* materialize_true, Label* materialize_false) const;
 | 
| -    virtual void Plug(Slot* slot) const;
 | 
| +    virtual void Plug(Variable* var) const;
 | 
|      virtual void Plug(Handle<Object> lit) const;
 | 
|      virtual void Plug(Heap::RootListIndex) const;
 | 
|      virtual void PlugTOS() const;
 | 
| @@ -776,7 +789,7 @@ class FullCodeGenerator: public AstVisitor {
 | 
|      virtual void Plug(bool flag) const;
 | 
|      virtual void Plug(Register reg) const;
 | 
|      virtual void Plug(Label* materialize_true, Label* materialize_false) const;
 | 
| -    virtual void Plug(Slot* slot) const;
 | 
| +    virtual void Plug(Variable* var) const;
 | 
|      virtual void Plug(Handle<Object> lit) const;
 | 
|      virtual void Plug(Heap::RootListIndex) const;
 | 
|      virtual void PlugTOS() const;
 | 
| 
 |