package net.jhorstmann.i18n.tools.expr;
import org.objectweb.asm.Label;
import org.objectweb.asm.Type;
import org.objectweb.asm.commons.GeneratorAdapter;
public abstract class ComparisonExpression extends BinaryExpression {
public ComparisonExpression(Expression leftExpr, Expression rightExpr) {
super(leftExpr, rightExpr);
}
public long evalCompare(long n) {
long n1 = leftExpr.eval(n);
long n2 = rightExpr.eval(n);
return n1 < n2 ? -1 : (n1 == n2 ? 0 : 1);
}
@Override
public boolean isBool() {
return true;
}
@Override
public void validate() throws InvalidExpressionException {
}
protected void compileComparison(GeneratorAdapter ga, int narg, int op) {
Label thenLabel = new Label();
Label retLabel = new Label();
leftExpr.compile(ga, narg);
rightExpr.compile(ga, narg);
ga.ifCmp(Type.LONG_TYPE, op, thenLabel);
ga.push(0L);
ga.goTo(retLabel);
ga.mark(thenLabel);
ga.push(1L);
ga.mark(retLabel);
}
}