Reviewers: Mads Ager, Description: Experimental: fix bug in the deferred code for object literals. The "virtual" frame elements created by VirtualFrame::Push do not yet work on ARM, switch to the materialized stack elements created by VirtualFrame::EmitPush.
Rename the deferred code class to match the deferred code naming convention (DeferredXXX). Please review this at http://codereview.chromium.org/20415 SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/ Affected files: M src/codegen-arm.cc Index: src/codegen-arm.cc =================================================================== --- src/codegen-arm.cc (revision 1283) +++ src/codegen-arm.cc (working copy) @@ -2311,11 +2311,11 @@ // by calling Runtime_CreateObjectLiteral. // Each created boilerplate is stored in the JSFunction and they are // therefore context dependent. -class ObjectLiteralDeferred: public DeferredCode { +class DeferredObjectLiteral: public DeferredCode { public: - ObjectLiteralDeferred(CodeGenerator* generator, ObjectLiteral* node) + DeferredObjectLiteral(CodeGenerator* generator, ObjectLiteral* node) : DeferredCode(generator), node_(node) { - set_comment("[ ObjectLiteralDeferred"); + set_comment("[ DeferredObjectLiteral"); } virtual void Generate(); @@ -2325,7 +2325,7 @@ }; -void ObjectLiteralDeferred::Generate() { +void DeferredObjectLiteral::Generate() { // Argument is passed in r1. enter()->Bind(); VirtualFrame::SpilledScope spilled_scope(generator()); @@ -2335,13 +2335,13 @@ VirtualFrame* frame = generator()->frame(); // Literal array (0). - frame->Push(r1); + frame->EmitPush(r1); // Literal index (1). __ mov(r0, Operand(Smi::FromInt(node_->literal_index()))); - frame->Push(r0); + frame->EmitPush(r0); // Constant properties (2). __ mov(r0, Operand(node_->constant_properties())); - frame->Push(r0); + frame->EmitPush(r0); Result boilerplate = frame->CallRuntime(Runtime::kCreateObjectLiteralBoilerplate, 3); __ mov(r2, Operand(boilerplate.reg())); @@ -2354,7 +2354,7 @@ VirtualFrame::SpilledScope spilled_scope(this); Comment cmnt(masm_, "[ ObjectLiteral"); - ObjectLiteralDeferred* deferred = new ObjectLiteralDeferred(this, node); + DeferredObjectLiteral* deferred = new DeferredObjectLiteral(this, node); // Retrieve the literal array and check the allocated entry. --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
