Reviewers: Mads Ager, Description: Very experimental fix for issue 555.
Please review this at http://codereview.chromium.org/508006 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M bleeding_edge/src/ia32/codegen-ia32.cc Index: bleeding_edge/src/ia32/codegen-ia32.cc =================================================================== --- bleeding_edge/src/ia32/codegen-ia32.cc (revision 3505) +++ bleeding_edge/src/ia32/codegen-ia32.cc (working copy) @@ -6774,8 +6774,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. -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
