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

Reply via email to