class ConditionalNode extends ControlNode { ConditionalNode(ExpressionNode aCondition) { super(aCondition); } ConditionalNode(ExpressionNode aCondition, ControlNode aTrueCode) { super(aCondition); trueCode = aTrueCode; } ConditionalNode(ExpressionNode aCondition, ControlNode aTrueCode, ControlNode aFalseCode) { super(aCondition); trueCode = aTrueCode; setNext(aFalseCode); } void moveNextToTrue() { trueCode = next; setNext(null); } ControlNode eval(Environment theEnv) { JSBoolean b = expr.eval(theEnv).toJSBoolean(theEnv); if (b.isTrue()) return trueCode; else return next; } String print() { StringBuffer result = new StringBuffer("ConditionalNode "); result.append(index); result.append("\nexpr:\n"); if (expr == null) result.append("expr = null\n"); else result.append(expr.print("")); result.append("true branch:\n"); if (trueCode == null) result.append("true branch = null\n"); else result.append("true branch->" + trueCode.index + "\n"); result.append("false branch:\n"); if (next == null) result.append("false branch = null\n"); else result.append("false branch->" + next.index + "\n"); return result.toString(); } protected ControlNode trueCode; }