IntegerDivisionExpression.java
package edu.udel.cis.vsl.tass.symbolic.integer;
import edu.udel.cis.vsl.tass.symbolic.NumericPrimitive;
import edu.udel.cis.vsl.tass.symbolic.IF.tree.TreeExpressionIF;
import edu.udel.cis.vsl.tass.symbolic.IF.type.SymbolicTypeIF.SymbolicTypeKind;
import edu.udel.cis.vsl.tass.symbolic.expression.SymbolicExpression;
public class IntegerDivisionExpression extends SymbolicExpression implements
NumericPrimitive {
public final static String operator = " DIV ";
private TreeExpressionIF numerator;
private TreeExpressionIF denominator;
IntegerDivisionExpression(TreeExpressionIF numerator,
TreeExpressionIF denominator) {
super(numerator.type());
assert denominator != null;
assert numerator.type().kind() == SymbolicTypeKind.INTEGER;
assert numerator.type().equals(denominator.type());
this.numerator = numerator;
this.denominator = denominator;
}
public TreeExpressionIF numerator() {
return numerator;
}
public TreeExpressionIF denominator() {
return denominator;
}
protected int intrinsicHashCode() {
return IntegerDivisionExpression.class.hashCode()
+ numerator.hashCode() + denominator.hashCode();
}
protected boolean intrinsicEquals(SymbolicExpression expression) {
if (expression instanceof IntegerDivisionExpression) {
IntegerDivisionExpression that = (IntegerDivisionExpression) expression;
return numerator.equals(that.numerator)
&& denominator.equals(that.denominator);
}
return false;
}
public String toString() {
return numerator.atomString() + operator + denominator.atomString();
}
public String atomString() {
return "(" + toString() + ")";
}
public NumericPrimitiveKind numericPrimitiveKind() {
return NumericPrimitiveKind.INT_DIV;
}
public TreeExpressionIF argument(int index) {
switch (index) {
case 0:
return numerator;
case 1:
return denominator;
default:
throw new RuntimeException("numArguments=" + 2 + ", index=" + index);
}
}
public SymbolicKind kind() {
return SymbolicKind.INT_DIVIDE;
}
public int numArguments() {
return 2;
}
}