Index: src/full-codegen.h |
=================================================================== |
--- src/full-codegen.h (revision 8272) |
+++ src/full-codegen.h (working copy) |
@@ -113,6 +113,7 @@ |
class TryFinally; |
class Finally; |
class ForIn; |
+ class TestContext; |
class NestedStatement BASE_EMBEDDED { |
public: |
@@ -298,7 +299,11 @@ |
// Helper function to convert a pure value into a test context. The value |
// is expected on the stack or the accumulator, depending on the platform. |
// See the platform-specific implementation for details. |
- void DoTest(Label* if_true, Label* if_false, Label* fall_through); |
+ void DoTest(Expression* condition, |
+ Label* if_true, |
+ Label* if_false, |
+ Label* fall_through); |
+ void DoTest(const TestContext* context); |
// Helper function to split control flow and avoid a branch to the |
// fall-through label if it is set up. |
@@ -347,7 +352,7 @@ |
Label* if_true, |
Label* if_false, |
Label* fall_through) { |
- TestContext context(this, if_true, if_false, fall_through); |
+ TestContext context(this, expr, if_true, if_false, fall_through); |
VisitInCurrentContext(expr); |
} |
@@ -670,11 +675,13 @@ |
class TestContext : public ExpressionContext { |
public: |
- explicit TestContext(FullCodeGenerator* codegen, |
- Label* true_label, |
- Label* false_label, |
- Label* fall_through) |
+ TestContext(FullCodeGenerator* codegen, |
+ Expression* condition, |
+ Label* true_label, |
+ Label* false_label, |
+ Label* fall_through) |
: ExpressionContext(codegen), |
+ condition_(condition), |
true_label_(true_label), |
false_label_(false_label), |
fall_through_(fall_through) { } |
@@ -684,6 +691,7 @@ |
return reinterpret_cast<const TestContext*>(context); |
} |
+ Expression* condition() const { return condition_; } |
Label* true_label() const { return true_label_; } |
Label* false_label() const { return false_label_; } |
Label* fall_through() const { return fall_through_; } |
@@ -704,6 +712,7 @@ |
virtual bool IsTest() const { return true; } |
private: |
+ Expression* condition_; |
Label* true_label_; |
Label* false_label_; |
Label* fall_through_; |