Reviewers: William Hesse, fschneider, Description: Implement new support for if statements in top-level code.
Please review this at http://codereview.chromium.org/346022 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/compiler.cc M src/fast-codegen.cc Index: src/compiler.cc =================================================================== --- src/compiler.cc (revision 3187) +++ src/compiler.cc (working copy) @@ -538,7 +538,11 @@ void CodeGenSelector::VisitIfStatement(IfStatement* stmt) { - BAILOUT("IfStatement"); + ProcessExpression(stmt->condition(), Expression::kTest); + CHECK_BAILOUT; + Visit(stmt->then_statement()); + CHECK_BAILOUT; + Visit(stmt->else_statement()); } 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); } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
