Revision: 3596
Author: [email protected]
Date: Wed Jan 13 04:13:37 2010
Log: Fix bug in top-level code generator with global receiver.
We did not correcty pass the global receiver object in some cases.
This change fixes this bug on all three platforms.
Review URL: http://codereview.chromium.org/542053
http://code.google.com/p/v8/source/detail?r=3596
Modified:
/branches/bleeding_edge/src/arm/fast-codegen-arm.cc
/branches/bleeding_edge/src/ia32/fast-codegen-ia32.cc
/branches/bleeding_edge/src/x64/fast-codegen-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/fast-codegen-arm.cc Wed Jan 13 03:29:08
2010
+++ /branches/bleeding_edge/src/arm/fast-codegen-arm.cc Wed Jan 13 04:13:37
2010
@@ -1129,6 +1129,7 @@
// Load receiver object into r1.
if (prop->is_synthetic()) {
__ ldr(r1, CodeGenerator::GlobalObject());
+ __ ldr(r1, FieldMemOperand(r1,
GlobalObject::kGlobalReceiverOffset));
} else {
__ ldr(r1, MemOperand(sp, kPointerSize));
}
=======================================
--- /branches/bleeding_edge/src/ia32/fast-codegen-ia32.cc Wed Jan 13
03:29:08 2010
+++ /branches/bleeding_edge/src/ia32/fast-codegen-ia32.cc Wed Jan 13
04:13:37 2010
@@ -1111,7 +1111,8 @@
__ push(eax);
// Push receiver object on stack.
if (prop->is_synthetic()) {
- __ push(CodeGenerator::GlobalObject());
+ __ mov(ecx, CodeGenerator::GlobalObject());
+ __ push(FieldOperand(ecx, GlobalObject::kGlobalReceiverOffset));
} else {
__ push(ebx);
}
=======================================
--- /branches/bleeding_edge/src/x64/fast-codegen-x64.cc Wed Jan 13 03:29:08
2010
+++ /branches/bleeding_edge/src/x64/fast-codegen-x64.cc Wed Jan 13 04:13:37
2010
@@ -1128,7 +1128,8 @@
__ push(rax);
// Push receiver object on stack.
if (prop->is_synthetic()) {
- __ push(CodeGenerator::GlobalObject());
+ __ movq(rcx, CodeGenerator::GlobalObject());
+ __ push(FieldOperand(rcx, GlobalObject::kGlobalReceiverOffset));
} else {
__ push(rbx);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev