| Index: src/fast-codegen.cc | 
| =================================================================== | 
| --- src/fast-codegen.cc	(revision 3191) | 
| +++ src/fast-codegen.cc	(working copy) | 
| @@ -380,7 +380,36 @@ | 
|  | 
|  | 
| void FastCodeGenerator::VisitConditional(Conditional* expr) { | 
| -  UNREACHABLE(); | 
| +  ASSERT_EQ(Expression::kTest, expr->condition()->context()); | 
| +  ASSERT_EQ(expr->context(), expr->then_expression()->context()); | 
| +  ASSERT_EQ(expr->context(), expr->else_expression()->context()); | 
| + | 
| + | 
| +  Label true_case, false_case, done; | 
| +  Label* saved_true = true_label_; | 
| +  Label* saved_false = false_label_; | 
| + | 
| +  true_label_ = &true_case; | 
| +  false_label_ = &false_case; | 
| +  Visit(expr->condition()); | 
| +  true_label_ = saved_true; | 
| +  false_label_ = saved_false; | 
| + | 
| +  __ bind(&true_case); | 
| +  Visit(expr->then_expression()); | 
| +  // If control flow falls through Visit, jump to done. | 
| +  if (expr->context() == Expression::kEffect || | 
| +      expr->context() == Expression::kValue) { | 
| +    __ jmp(&done); | 
| +  } | 
| + | 
| +  __ bind(&false_case); | 
| +  Visit(expr->else_expression()); | 
| +  // If control flow falls through Visit, merge it with true case here. | 
| +  if (expr->context() == Expression::kEffect || | 
| +      expr->context() == Expression::kValue) { | 
| +    __ bind(&done); | 
| +  } | 
| } | 
|  | 
|  | 
|  |