| Index: trunk/src/ia32/codegen-ia32.cc
 | 
| ===================================================================
 | 
| --- trunk/src/ia32/codegen-ia32.cc	(revision 3508)
 | 
| +++ trunk/src/ia32/codegen-ia32.cc	(working copy)
 | 
| @@ -174,7 +174,7 @@
 | 
|      function_return_is_shadowed_ = false;
 | 
|  
 | 
|      // Allocate the local context if needed.
 | 
| -    int heap_slots = scope_->num_heap_slots();
 | 
| +    int heap_slots = scope_->num_heap_slots() - Context::MIN_CONTEXT_SLOTS;
 | 
|      if (heap_slots > 0) {
 | 
|        Comment cmnt(masm_, "[ allocate local context");
 | 
|        // Allocate local context.
 | 
| @@ -6741,8 +6741,11 @@
 | 
|    __ mov(Operand(eax, Context::SlotOffset(Context::PREVIOUS_INDEX)), ebx);
 | 
|    __ mov(Operand(eax, Context::SlotOffset(Context::EXTENSION_INDEX)), ebx);
 | 
|  
 | 
| -  // Copy the global object from the surrounding context.
 | 
| -  __ mov(ebx, Operand(esi, Context::SlotOffset(Context::GLOBAL_INDEX)));
 | 
| +  // Copy the global object from the surrounding context. We go through the
 | 
| +  // context in the function (ecx) to match the allocation behavior we have
 | 
| +  // in the runtime system (see Heap::AllocateFunctionContext).
 | 
| +  __ mov(ebx, FieldOperand(ecx, JSFunction::kContextOffset));
 | 
| +  __ mov(ebx, Operand(ebx, Context::SlotOffset(Context::GLOBAL_INDEX)));
 | 
|    __ mov(Operand(eax, Context::SlotOffset(Context::GLOBAL_INDEX)), ebx);
 | 
|  
 | 
|    // Initialize the rest of the slots to undefined.
 | 
| 
 |