package net.jhorstmann.i18n.tools.expr; import org.objectweb.asm.Type; import org.objectweb.asm.commons.GeneratorAdapter; public abstract class BinaryExpression extends Expression { protected final Expression leftExpr; protected final Expression rightExpr; public BinaryExpression(Expression leftExpr, Expression rightExpr) { this.leftExpr = leftExpr; this.rightExpr = rightExpr; } protected String toString(String op) { return "(" + leftExpr + ") " + op + " (" + rightExpr + ")"; } protected void compileBinaryInstruction(GeneratorAdapter ga, int narg, int insn) { leftExpr.compile(ga, narg); rightExpr.compile(ga, narg); ga.math(insn, Type.LONG_TYPE); } @Override public int computeStackSize() { return Math.max(leftExpr.computeStackSize(), 2+rightExpr.computeStackSize()); } }