From: fschneider@chromium.org Date: Wed, 13 Jan 2010 12:13:37 +0000 (+0000) Subject: Fix bug in top-level code generator with global receiver. X-Git-Tag: upstream/4.7.83~22704 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3dd2420511bddbb2256620e89b178f782f50bbe4;p=platform%2Fupstream%2Fv8.git 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 --- 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); }