| Index: src/arm/codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/codegen-arm.cc (revision 1967)
|
| +++ src/arm/codegen-arm.cc (working copy)
|
| @@ -136,7 +136,7 @@
|
| frame_->AllocateStackSlots(scope_->num_stack_slots());
|
| // Initialize the function return target after the locals are set
|
| // up, because it needs the expected frame height from the frame.
|
| - function_return_.Initialize(this, JumpTarget::BIDIRECTIONAL);
|
| + function_return_.set_direction(JumpTarget::BIDIRECTIONAL);
|
| function_return_is_shadowed_ = false;
|
|
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| @@ -456,14 +456,14 @@
|
| int original_height = frame_->height();
|
| #endif
|
| ASSERT(!in_spilled_code());
|
| - JumpTarget true_target(this);
|
| - JumpTarget false_target(this);
|
| + JumpTarget true_target;
|
| + JumpTarget false_target;
|
| LoadCondition(x, typeof_state, &true_target, &false_target, false);
|
|
|
| if (has_cc()) {
|
| // Convert cc_reg_ into a boolean value.
|
| - JumpTarget loaded(this);
|
| - JumpTarget materialize_true(this);
|
| + JumpTarget loaded;
|
| + JumpTarget materialize_true;
|
| materialize_true.Branch(cc_reg_);
|
| __ mov(r0, Operand(Factory::false_value()));
|
| frame_->EmitPush(r0);
|
| @@ -478,7 +478,7 @@
|
| if (true_target.is_linked() || false_target.is_linked()) {
|
| // We have at least one condition value that has been "translated"
|
| // into a branch, thus it needs to be loaded explicitly.
|
| - JumpTarget loaded(this);
|
| + JumpTarget loaded;
|
| if (frame_ != NULL) {
|
| loaded.Jump(); // Don't lose the current TOS.
|
| }
|
| @@ -865,7 +865,7 @@
|
|
|
| int int_value = Smi::cast(*value)->value();
|
|
|
| - JumpTarget exit(this);
|
| + JumpTarget exit;
|
| frame_->EmitPop(r0);
|
|
|
| switch (op) {
|
| @@ -995,8 +995,8 @@
|
| // Strict only makes sense for equality comparisons.
|
| ASSERT(!strict || cc == eq);
|
|
|
| - JumpTarget exit(this);
|
| - JumpTarget smi(this);
|
| + JumpTarget exit;
|
| + JumpTarget smi;
|
| // Implement '>' and '<=' by reversal to obtain ECMA-262 conversion order.
|
| if (cc == gt || cc == le) {
|
| cc = ReverseCondition(cc);
|
| @@ -1156,7 +1156,7 @@
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| Comment cmnt(masm_, "[ Block");
|
| CodeForStatementPosition(node);
|
| - node->break_target()->Initialize(this);
|
| + node->break_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
| VisitStatementsAndSpill(node->statements());
|
| if (node->break_target()->is_linked()) {
|
| node->break_target()->Bind();
|
| @@ -1290,11 +1290,11 @@
|
|
|
| CodeForStatementPosition(node);
|
|
|
| - JumpTarget exit(this);
|
| + JumpTarget exit;
|
| if (has_then_stm && has_else_stm) {
|
| Comment cmnt(masm_, "[ IfThenElse");
|
| - JumpTarget then(this);
|
| - JumpTarget else_(this);
|
| + JumpTarget then;
|
| + JumpTarget else_;
|
| // if (cond)
|
| LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
| &then, &else_, true);
|
| @@ -1318,7 +1318,7 @@
|
| } else if (has_then_stm) {
|
| Comment cmnt(masm_, "[ IfThen");
|
| ASSERT(!has_else_stm);
|
| - JumpTarget then(this);
|
| + JumpTarget then;
|
| // if (cond)
|
| LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
| &then, &exit, true);
|
| @@ -1334,7 +1334,7 @@
|
| } else if (has_else_stm) {
|
| Comment cmnt(masm_, "[ IfElse");
|
| ASSERT(!has_then_stm);
|
| - JumpTarget else_(this);
|
| + JumpTarget else_;
|
| // if (!cond)
|
| LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
| &exit, &else_, true);
|
| @@ -1424,7 +1424,7 @@
|
| frame_->CallRuntime(Runtime::kPushContext, 1);
|
| }
|
| #ifdef DEBUG
|
| - JumpTarget verified_true(this);
|
| + JumpTarget verified_true;
|
| __ cmp(r0, Operand(cp));
|
| verified_true.Branch(eq);
|
| __ stop("PushContext: r0 is expected to be the same as cp");
|
| @@ -1468,8 +1468,8 @@
|
| Vector<Label*> case_targets,
|
| Vector<Label> case_labels) {
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| - JumpTarget setup_default(this);
|
| - JumpTarget is_smi(this);
|
| + JumpTarget setup_default;
|
| + JumpTarget is_smi;
|
|
|
| // A non-null default label pointer indicates a default case among
|
| // the case labels. Otherwise we use the break target as a
|
| @@ -1539,7 +1539,7 @@
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| Comment cmnt(masm_, "[ SwitchStatement");
|
| CodeForStatementPosition(node);
|
| - node->break_target()->Initialize(this);
|
| + node->break_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
|
|
| LoadAndSpill(node->tag());
|
| if (TryGenerateFastCaseSwitchStatement(node)) {
|
| @@ -1547,10 +1547,10 @@
|
| return;
|
| }
|
|
|
| - JumpTarget next_test(this);
|
| - JumpTarget fall_through(this);
|
| - JumpTarget default_entry(this);
|
| - JumpTarget default_exit(this, JumpTarget::BIDIRECTIONAL);
|
| + JumpTarget next_test;
|
| + JumpTarget fall_through;
|
| + JumpTarget default_entry;
|
| + JumpTarget default_exit(JumpTarget::BIDIRECTIONAL);
|
| ZoneList<CaseClause*>* cases = node->cases();
|
| int length = cases->length();
|
| CaseClause* default_clause = NULL;
|
| @@ -1633,7 +1633,7 @@
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| Comment cmnt(masm_, "[ LoopStatement");
|
| CodeForStatementPosition(node);
|
| - node->break_target()->Initialize(this);
|
| + node->break_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
|
|
| // Simple condition analysis. ALWAYS_TRUE and ALWAYS_FALSE represent a
|
| // known result for the test expression, with no side effects.
|
| @@ -1654,19 +1654,19 @@
|
|
|
| switch (node->type()) {
|
| case LoopStatement::DO_LOOP: {
|
| - JumpTarget body(this, JumpTarget::BIDIRECTIONAL);
|
| + JumpTarget body(JumpTarget::BIDIRECTIONAL);
|
|
|
| // Label the top of the loop for the backward CFG edge. If the test
|
| // is always true we can use the continue target, and if the test is
|
| // always false there is no need.
|
| if (info == ALWAYS_TRUE) {
|
| - node->continue_target()->Initialize(this, JumpTarget::BIDIRECTIONAL);
|
| + node->continue_target()->set_direction(JumpTarget::BIDIRECTIONAL);
|
| node->continue_target()->Bind();
|
| } else if (info == ALWAYS_FALSE) {
|
| - node->continue_target()->Initialize(this);
|
| + node->continue_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
| } else {
|
| ASSERT(info == DONT_KNOW);
|
| - node->continue_target()->Initialize(this);
|
| + node->continue_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
| body.Bind();
|
| }
|
|
|
| @@ -1713,11 +1713,11 @@
|
|
|
| // Label the top of the loop with the continue target for the backward
|
| // CFG edge.
|
| - node->continue_target()->Initialize(this, JumpTarget::BIDIRECTIONAL);
|
| + node->continue_target()->set_direction(JumpTarget::BIDIRECTIONAL);
|
| node->continue_target()->Bind();
|
|
|
| if (info == DONT_KNOW) {
|
| - JumpTarget body(this);
|
| + JumpTarget body;
|
| LoadConditionAndSpill(node->cond(), NOT_INSIDE_TYPEOF,
|
| &body, node->break_target(), true);
|
| if (has_valid_frame()) {
|
| @@ -1743,7 +1743,7 @@
|
| }
|
|
|
| case LoopStatement::FOR_LOOP: {
|
| - JumpTarget loop(this, JumpTarget::BIDIRECTIONAL);
|
| + JumpTarget loop(JumpTarget::BIDIRECTIONAL);
|
|
|
| if (node->init() != NULL) {
|
| VisitAndSpill(node->init());
|
| @@ -1755,16 +1755,16 @@
|
| // If there is no update statement, label the top of the loop with the
|
| // continue target, otherwise with the loop target.
|
| if (node->next() == NULL) {
|
| - node->continue_target()->Initialize(this, JumpTarget::BIDIRECTIONAL);
|
| + node->continue_target()->set_direction(JumpTarget::BIDIRECTIONAL);
|
| node->continue_target()->Bind();
|
| } else {
|
| - node->continue_target()->Initialize(this);
|
| + node->continue_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
| loop.Bind();
|
| }
|
|
|
| // If the test is always true, there is no need to compile it.
|
| if (info == DONT_KNOW) {
|
| - JumpTarget body(this);
|
| + JumpTarget body;
|
| LoadConditionAndSpill(node->cond(), NOT_INSIDE_TYPEOF,
|
| &body, node->break_target(), true);
|
| if (has_valid_frame()) {
|
| @@ -1824,12 +1824,12 @@
|
| Comment cmnt(masm_, "[ ForInStatement");
|
| CodeForStatementPosition(node);
|
|
|
| - JumpTarget primitive(this);
|
| - JumpTarget jsobject(this);
|
| - JumpTarget fixed_array(this);
|
| - JumpTarget entry(this, JumpTarget::BIDIRECTIONAL);
|
| - JumpTarget end_del_check(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget primitive;
|
| + JumpTarget jsobject;
|
| + JumpTarget fixed_array;
|
| + JumpTarget entry(JumpTarget::BIDIRECTIONAL);
|
| + JumpTarget end_del_check;
|
| + JumpTarget exit;
|
|
|
| // Get the object to enumerate over (converted to JSObject).
|
| LoadAndSpill(node->enumerable());
|
| @@ -1914,8 +1914,8 @@
|
| // sp[4] : enumerable
|
| // Grab the current frame's height for the break and continue
|
| // targets only after all the state is pushed on the frame.
|
| - node->break_target()->Initialize(this);
|
| - node->continue_target()->Initialize(this);
|
| + node->break_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
| + node->continue_target()->set_direction(JumpTarget::FORWARD_ONLY);
|
|
|
| __ ldr(r0, frame_->ElementAt(0)); // load the current count
|
| __ ldr(r1, frame_->ElementAt(1)); // load the length
|
| @@ -2018,8 +2018,8 @@
|
| Comment cmnt(masm_, "[ TryCatch");
|
| CodeForStatementPosition(node);
|
|
|
| - JumpTarget try_block(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget try_block;
|
| + JumpTarget exit;
|
|
|
| try_block.Call();
|
| // --- Catch block ---
|
| @@ -2150,8 +2150,8 @@
|
| // break/continue from within the try block.
|
| enum { FALLING, THROWING, JUMPING };
|
|
|
| - JumpTarget try_block(this);
|
| - JumpTarget finally_block(this);
|
| + JumpTarget try_block;
|
| + JumpTarget finally_block;
|
|
|
| try_block.Call();
|
|
|
| @@ -2296,7 +2296,7 @@
|
| JumpTarget* original = shadows[i]->other_target();
|
| __ cmp(r2, Operand(Smi::FromInt(JUMPING + i)));
|
| if (!function_return_is_shadowed_ && i == kReturnShadowIndex) {
|
| - JumpTarget skip(this);
|
| + JumpTarget skip;
|
| skip.Branch(ne);
|
| frame_->PrepareForReturn();
|
| original->Jump();
|
| @@ -2309,7 +2309,7 @@
|
|
|
| if (has_valid_frame()) {
|
| // Check if we need to rethrow the exception.
|
| - JumpTarget exit(this);
|
| + JumpTarget exit;
|
| __ cmp(r2, Operand(Smi::FromInt(THROWING)));
|
| exit.Branch(ne);
|
|
|
| @@ -2391,9 +2391,9 @@
|
| #endif
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| Comment cmnt(masm_, "[ Conditional");
|
| - JumpTarget then(this);
|
| - JumpTarget else_(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget then;
|
| + JumpTarget else_;
|
| + JumpTarget exit;
|
| LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
| &then, &else_, true);
|
| Branch(false, &else_);
|
| @@ -2412,8 +2412,8 @@
|
| if (slot->type() == Slot::LOOKUP) {
|
| ASSERT(slot->var()->is_dynamic());
|
|
|
| - JumpTarget slow(this);
|
| - JumpTarget done(this);
|
| + JumpTarget slow;
|
| + JumpTarget done;
|
|
|
| // Generate fast-case code for variables that might be shadowed by
|
| // eval-introduced variables. Eval is used a lot without
|
| @@ -2620,7 +2620,7 @@
|
| FixedArray::kHeaderSize + node->literal_index() * kPointerSize;
|
| __ ldr(r2, FieldMemOperand(r1, literal_offset));
|
|
|
| - JumpTarget done(this);
|
| + JumpTarget done;
|
| __ cmp(r2, Operand(Factory::undefined_value()));
|
| done.Branch(ne);
|
|
|
| @@ -3266,7 +3266,7 @@
|
| void CodeGenerator::GenerateValueOf(ZoneList<Expression*>* args) {
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| ASSERT(args->length() == 1);
|
| - JumpTarget leave(this);
|
| + JumpTarget leave;
|
| LoadAndSpill(args->at(0));
|
| frame_->EmitPop(r0); // r0 contains object.
|
| // if (object->IsSmi()) return the object.
|
| @@ -3288,7 +3288,7 @@
|
| void CodeGenerator::GenerateSetValueOf(ZoneList<Expression*>* args) {
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| ASSERT(args->length() == 2);
|
| - JumpTarget leave(this);
|
| + JumpTarget leave;
|
| LoadAndSpill(args->at(0)); // Load the object.
|
| LoadAndSpill(args->at(1)); // Load the value.
|
| frame_->EmitPop(r0); // r0 contains value
|
| @@ -3364,7 +3364,7 @@
|
| VirtualFrame::SpilledScope spilled_scope(this);
|
| ASSERT(args->length() == 1);
|
| LoadAndSpill(args->at(0));
|
| - JumpTarget answer(this);
|
| + JumpTarget answer;
|
| // We need the CC bits to come out as not_equal in the case where the
|
| // object is a smi. This can't be done with the usual test opcode so
|
| // we use XOR to get the right CC bits.
|
| @@ -3568,8 +3568,8 @@
|
|
|
| case Token::BIT_NOT: {
|
| // smi check
|
| - JumpTarget smi_label(this);
|
| - JumpTarget continue_label(this);
|
| + JumpTarget smi_label;
|
| + JumpTarget continue_label;
|
| __ tst(r0, Operand(kSmiTagMask));
|
| smi_label.Branch(eq);
|
|
|
| @@ -3595,7 +3595,7 @@
|
|
|
| case Token::ADD: {
|
| // Smi check.
|
| - JumpTarget continue_label(this);
|
| + JumpTarget continue_label;
|
| __ tst(r0, Operand(kSmiTagMask));
|
| continue_label.Branch(eq);
|
| frame_->EmitPush(r0);
|
| @@ -3649,8 +3649,8 @@
|
| target.GetValueAndSpill(NOT_INSIDE_TYPEOF);
|
| frame_->EmitPop(r0);
|
|
|
| - JumpTarget slow(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget slow;
|
| + JumpTarget exit;
|
|
|
| // Load the value (1) into register r1.
|
| __ mov(r1, Operand(Smi::FromInt(1)));
|
| @@ -3739,7 +3739,7 @@
|
| // of compiling the binary operation is materialized or not.
|
|
|
| if (op == Token::AND) {
|
| - JumpTarget is_true(this);
|
| + JumpTarget is_true;
|
| LoadConditionAndSpill(node->left(),
|
| NOT_INSIDE_TYPEOF,
|
| &is_true,
|
| @@ -3757,8 +3757,8 @@
|
| false);
|
|
|
| } else {
|
| - JumpTarget pop_and_continue(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget pop_and_continue;
|
| + JumpTarget exit;
|
|
|
| __ ldr(r0, frame_->Top()); // dup the stack top
|
| frame_->EmitPush(r0);
|
| @@ -3781,7 +3781,7 @@
|
| }
|
|
|
| } else if (op == Token::OR) {
|
| - JumpTarget is_false(this);
|
| + JumpTarget is_false;
|
| LoadConditionAndSpill(node->left(),
|
| NOT_INSIDE_TYPEOF,
|
| true_target(),
|
| @@ -3799,8 +3799,8 @@
|
| false);
|
|
|
| } else {
|
| - JumpTarget pop_and_continue(this);
|
| - JumpTarget exit(this);
|
| + JumpTarget pop_and_continue;
|
| + JumpTarget exit;
|
|
|
| __ ldr(r0, frame_->Top());
|
| frame_->EmitPush(r0);
|
| @@ -4241,7 +4241,7 @@
|
| } else {
|
| ASSERT(!slot->var()->is_dynamic());
|
|
|
| - JumpTarget exit(cgen_);
|
| + JumpTarget exit;
|
| if (init_state == CONST_INIT) {
|
| ASSERT(slot->var()->mode() == Variable::CONST);
|
| // Only the first const initialization must be executed (the slot
|
|
|