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
-~----------~----~----~----~------~----~------~--~---

Reply via email to