Index: src/fast-codegen.cc |
=================================================================== |
--- src/fast-codegen.cc (revision 3187) |
+++ src/fast-codegen.cc (working copy) |
@@ -289,7 +289,27 @@ |
void FastCodeGenerator::VisitIfStatement(IfStatement* stmt) { |
- UNREACHABLE(); |
+ // Expressions cannot recursively enter statements, there are no labels in |
+ // the state. |
+ ASSERT_EQ(NULL, true_label_); |
+ ASSERT_EQ(NULL, false_label_); |
+ Label then_part, else_part, done; |
+ |
+ // Do not worry about optimizing for empty then or else bodies. |
+ true_label_ = &then_part; |
+ false_label_ = &else_part; |
+ Visit(stmt->condition()); |
+ true_label_ = NULL; |
+ false_label_ = NULL; |
+ |
+ __ bind(&then_part); |
+ Visit(stmt->then_statement()); |
+ __ jmp(&done); |
+ |
+ __ bind(&else_part); |
+ Visit(stmt->else_statement()); |
+ |
+ __ bind(&done); |
} |