Index: src/x64/full-codegen-x64.cc |
diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc |
index 25bfd340294e2f7aa9a84a6b336748ad9e4f4f35..dfc41b83c19d1c46c5a5247f40122196d105f607 100644 |
--- a/src/x64/full-codegen-x64.cc |
+++ b/src/x64/full-codegen-x64.cc |
@@ -1067,6 +1067,7 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { |
// Get the object to enumerate over. If the object is null or undefined, skip |
// over the loop. See ECMA-262 version 5, section 12.6.4. |
+ SetExpressionPosition(stmt->enumerable()); |
VisitForAccumulatorValue(stmt->enumerable()); |
__ CompareRoot(rax, Heap::kUndefinedValueRootIndex); |
__ j(equal, &exit); |
@@ -1170,6 +1171,8 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { |
// Generate code for doing the condition check. |
PrepareForBailoutForId(stmt->BodyId(), NO_REGISTERS); |
__ bind(&loop); |
+ SetExpressionPosition(stmt->each()); |
+ |
__ movp(rax, Operand(rsp, 0 * kPointerSize)); // Get the current index. |
__ cmpp(rax, Operand(rsp, 1 * kPointerSize)); // Compare to the array length. |
__ j(above_equal, loop_statement.break_label()); |
@@ -1239,48 +1242,6 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { |
} |
-void FullCodeGenerator::VisitForOfStatement(ForOfStatement* stmt) { |
- Comment cmnt(masm_, "[ ForOfStatement"); |
- SetStatementPosition(stmt); |
- |
- Iteration loop_statement(this, stmt); |
- increment_loop_depth(); |
- |
- // var iterator = iterable[Symbol.iterator](); |
- VisitForEffect(stmt->assign_iterator()); |
- |
- // Loop entry. |
- __ bind(loop_statement.continue_label()); |
- |
- // result = iterator.next() |
- VisitForEffect(stmt->next_result()); |
- |
- // if (result.done) break; |
- Label result_not_done; |
- VisitForControl(stmt->result_done(), |
- loop_statement.break_label(), |
- &result_not_done, |
- &result_not_done); |
- __ bind(&result_not_done); |
- |
- // each = result.value |
- VisitForEffect(stmt->assign_each()); |
- |
- // Generate code for the body of the loop. |
- Visit(stmt->body()); |
- |
- // Check stack before looping. |
- PrepareForBailoutForId(stmt->BackEdgeId(), NO_REGISTERS); |
- EmitBackEdgeBookkeeping(stmt, loop_statement.continue_label()); |
- __ jmp(loop_statement.continue_label()); |
- |
- // Exit and decrement the loop depth. |
- PrepareForBailoutForId(stmt->ExitId(), NO_REGISTERS); |
- __ bind(loop_statement.break_label()); |
- decrement_loop_depth(); |
-} |
- |
- |
void FullCodeGenerator::EmitNewClosure(Handle<SharedFunctionInfo> info, |
bool pretenure) { |
// Use the fast case closure allocation code that allocates in new |