// TODO: don't require pop
if (!expr) context.consumeCurrentValue();
}
public void compileAnd(Node node, BodyCompiler context, final boolean expr) {
final AndNode andNode = (AndNode) node;
if (andNode.getFirstNode().getNodeType().alwaysTrue()) {
// compile first node as non-expr and then second node
compile(andNode.getFirstNode(), context, false);
compile(andNode.getSecondNode(), context, expr);
} else if (andNode.getFirstNode().getNodeType().alwaysFalse()) {
// compile first node only
compile(andNode.getFirstNode(), context, expr);
} else {
compile(andNode.getFirstNode(), context, true);
BranchCallback longCallback = new BranchCallback() {
public void branch(BodyCompiler context) {
compile(andNode.getSecondNode(), context, true);
}
};
context.performLogicalAnd(longCallback);
if (!expr) context.consumeCurrentValue();