package net.jhorstmann.i18n.tools.expr; import org.objectweb.asm.commons.GeneratorAdapter; public class NotExpression extends Expression { private Expression child; public NotExpression(Expression child) { this.child = child; } @Override public long eval(long n) { return child.eval(n) == 0 ? 1 : 0; } @Override public boolean isBool() { return true; } @Override public void validate() throws InvalidExpressionException { if (!child.isBool()) { throw new InvalidExpressionException("Operator '!' can only be applied to boolean expressions"); } } @Override public String toString() { return "!(" + child + ")"; } @Override public void compile(GeneratorAdapter ga, int narg) { ga.not(); } @Override public int computeStackSize() { return child.computeStackSize(); } }