@Override public JavaValue coerceToSoyBoolean() { return TofuJavaValue.forSoyValue( BooleanData.forValue(soyValue.coerceToBoolean()), sourceLocation); }
@Override protected SoyValue visitOrOpNode(OrOpNode node) { // Note: Short-circuit evaluation. SoyValue operand0 = visit(node.getChild(0)); if (operand0.coerceToBoolean()) { return convertResult(true); } else { SoyValue operand1 = visit(node.getChild(1)); return convertResult(operand1.coerceToBoolean()); } }
@Override protected SoyValue visitAndOpNode(AndOpNode node) { // Note: Short-circuit evaluation. SoyValue operand0 = visit(node.getChild(0)); if (!operand0.coerceToBoolean()) { return convertResult(false); } else { SoyValue operand1 = visit(node.getChild(1)); return convertResult(operand1.coerceToBoolean()); } }
@Override protected SoyValue visitNotOpNode(NotOpNode node) { SoyValue operand = visit(node.getChild(0)); return convertResult(!operand.coerceToBoolean()); }
@Override protected SoyValue visitOrOpNode(OrOpNode node) { // Note: Short-circuit evaluation. SoyValue operand0 = visit(node.getChild(0)); if (operand0.coerceToBoolean()) { return convertResult(true); } else { SoyValue operand1 = visit(node.getChild(1)); return convertResult(operand1.coerceToBoolean()); } }
@Override protected SoyValue visitAndOpNode(AndOpNode node) { // Note: Short-circuit evaluation. SoyValue operand0 = visit(node.getChild(0)); if (!operand0.coerceToBoolean()) { return convertResult(false); } else { SoyValue operand1 = visit(node.getChild(1)); return convertResult(operand1.coerceToBoolean()); } }
@Override protected SoyValue visitNotOpNode(NotOpNode node) { SoyValue operand = visit(node.getChild(0)); return convertResult(!operand.coerceToBoolean()); }
@Override protected void visitIfNode(IfNode node) { for (SoyNode child : node.getChildren()) { if (child instanceof IfCondNode) { IfCondNode icn = (IfCondNode) child; if (eval(icn.getExpr(), node).coerceToBoolean()) { visit(icn); return; } } else if (child instanceof IfElseNode) { visit(child); return; } else { throw new AssertionError(); } } }
@Override protected void visitIfNode(IfNode node) { for (SoyNode child : node.getChildren()) { if (child instanceof IfCondNode) { IfCondNode icn = (IfCondNode) child; if (eval(icn.getExpr(), node).coerceToBoolean()) { visit(icn); return; } } else if (child instanceof IfElseNode) { visit(child); return; } else { throw new AssertionError(); } } }
@Override protected SoyValue visitConditionalOpNode(ConditionalOpNode node) { // Note: We only evaluate the part that we need. SoyValue operand0 = visit(node.getChild(0)); if (operand0.coerceToBoolean()) { return visit(node.getChild(1)); } else { return visit(node.getChild(2)); } }
@Override protected SoyValue visitConditionalOpNode(ConditionalOpNode node) { // Note: We only evaluate the part that we need. SoyValue operand0 = visit(node.getChild(0)); if (operand0.coerceToBoolean()) { return visit(node.getChild(1)); } else { return visit(node.getChild(2)); } }
@Override protected void visitAndOpNode(AndOpNode node) { // Recurse. visitChildren(node); // Can simplify if either child is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 != null) { ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(1) : node.getChild(0); node.getParent().replaceChild(node, replacementNode); } }
@Override protected void visitConditionalOpNode(ConditionalOpNode node) { // Recurse. visitChildren(node); // Can simplify if operand0 is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 == null) { return; // cannot simplify } ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(1) : node.getChild(2); node.getParent().replaceChild(node, replacementNode); }
@Override protected void visitOrOpNode(OrOpNode node) { // Recurse. visitChildren(node); // Can simplify if either child is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 != null) { ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(0) : node.getChild(1); node.getParent().replaceChild(node, replacementNode); } }
@Override protected void visitOrOpNode(OrOpNode node) { // Recurse. visitChildren(node); // Can simplify if either child is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 != null) { ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(0) : node.getChild(1); node.getParent().replaceChild(node, replacementNode); } }
@Override protected void visitConditionalOpNode(ConditionalOpNode node) { // Recurse. visitChildren(node); // Can simplify if operand0 is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 == null) { return; // cannot simplify } ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(1) : node.getChild(2); node.getParent().replaceChild(node, replacementNode); }
@Override protected void visitAndOpNode(AndOpNode node) { // Recurse. visitChildren(node); // Can simplify if either child is constant. We assume no side-effects. SoyValue operand0 = getConstantOrNull(node.getChild(0)); if (operand0 != null) { ExprNode replacementNode = operand0.coerceToBoolean() ? node.getChild(1) : node.getChild(0); node.getParent().replaceChild(node, replacementNode); } }
if (getConstantOrNull(condExpr).coerceToBoolean()) {
if (getConstantOrNull(condExpr).coerceToBoolean()) {