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