Implement new support for if statements in top-level code.

Review URL: http://codereview.chromium.org/346022

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3188 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent ab3e85ee
...@@ -538,7 +538,11 @@ void CodeGenSelector::VisitEmptyStatement(EmptyStatement* stmt) { ...@@ -538,7 +538,11 @@ void CodeGenSelector::VisitEmptyStatement(EmptyStatement* stmt) {
void CodeGenSelector::VisitIfStatement(IfStatement* stmt) { void CodeGenSelector::VisitIfStatement(IfStatement* stmt) {
BAILOUT("IfStatement"); ProcessExpression(stmt->condition(), Expression::kTest);
CHECK_BAILOUT;
Visit(stmt->then_statement());
CHECK_BAILOUT;
Visit(stmt->else_statement());
} }
......
...@@ -289,7 +289,27 @@ void FastCodeGenerator::VisitEmptyStatement(EmptyStatement* stmt) { ...@@ -289,7 +289,27 @@ void FastCodeGenerator::VisitEmptyStatement(EmptyStatement* stmt) {
void FastCodeGenerator::VisitIfStatement(IfStatement* stmt) { 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);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment