From 3dd2420511bddbb2256620e89b178f782f50bbe4 Mon Sep 17 00:00:00 2001 From: "fschneider@chromium.org" Date: Wed, 13 Jan 2010 12:13:37 +0000 Subject: [PATCH] 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 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3596 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/fast-codegen-arm.cc | 1 + src/ia32/fast-codegen-ia32.cc | 3 ++- src/x64/fast-codegen-x64.cc | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/arm/fast-codegen-arm.cc b/src/arm/fast-codegen-arm.cc index 729af29..0d934b5 100644 --- a/src/arm/fast-codegen-arm.cc +++ b/src/arm/fast-codegen-arm.cc @@ -1129,6 +1129,7 @@ void FastCodeGenerator::VisitCall(Call* expr) { // 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)); } diff --git a/src/ia32/fast-codegen-ia32.cc b/src/ia32/fast-codegen-ia32.cc index cb1a033..fdab585 100644 --- a/src/ia32/fast-codegen-ia32.cc +++ b/src/ia32/fast-codegen-ia32.cc @@ -1111,7 +1111,8 @@ void FastCodeGenerator::VisitCall(Call* expr) { __ 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); } diff --git a/src/x64/fast-codegen-x64.cc b/src/x64/fast-codegen-x64.cc index a60c926..3ef8678 100644 --- a/src/x64/fast-codegen-x64.cc +++ b/src/x64/fast-codegen-x64.cc @@ -1128,7 +1128,8 @@ void FastCodeGenerator::VisitCall(Call* expr) { __ 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); } -- 2.7.4