package nodeAST.literals; import java.util.Map; import nodeAST.Expression; import nodeAST.Ident; import types.IntType; import types.Type; import visitor.ASTVisitor; import visitor.IdentifiersTypeMatcher; public class Int extends Literal { protected int value; public Int(int value) { super(); this.value=value; } @Override public boolean equals(Object obj) { if (!(obj instanceof Int)) return false; Int expr=(Int) obj; return expr.value == this.value; } @Override public void accept(ASTVisitor visitor) { visitor.visit(this); } @Override public String toString() { return String.valueOf(this.value); } @Override public Type getType(IdentifiersTypeMatcher typeMatcher) { return new IntType(); } @Override public boolean areOperandsTypeValid(IdentifiersTypeMatcher typeMatcher) { return true; } @Override public boolean containsTreeNode(Expression e) { if(e.equals(this)) return true; return false; } @Override public Literal compute(Map<Ident, Expression> identifiers) { return this; } @Override public Literal add(Literal lit) { return lit.add(this.value); } @Override public Literal add(int value) { return new Int(this.value+value); } @Override public Literal div(Literal operand) { return operand.div(this.value); } @Override public Literal div(int value) { return new Int(value/this.value); } @Override public Literal mul(Literal operand) { return operand.mul(this.value); } @Override public Literal mul(int value) { return new Int(value*this.value); } @Override public Literal sub(Literal operand) { return operand.sub(this.value); } @Override public Literal sub(int value) { return new Int(value-this.value); } @Override public Literal eq(Literal operand) { return operand.eq(this.value); } @Override public Literal eq(int value) { return new Bool(this.value==value); } @Override public Literal geq(Literal operand) { return operand.geq(this.value); } @Override public Literal geq(int value) { return new Bool(value>=this.value); } @Override public Literal gt(Literal operand) { return operand.gt(this.value); } @Override public Literal gt(int value) { return new Bool(value>this.value); } @Override public Literal leq(Literal operand) { return operand.leq(this.value); } @Override public Literal leq(int value) { return new Bool(value<=this.value); } @Override public Literal lt(Literal operand) { return operand.lt(this.value); } @Override public Literal lt(int value) { return new Bool(value<this.value); } @Override public Literal neq(Literal operand) { return operand.neq(this.value); } @Override public Literal neq(int value) { return new Bool(this.value!=value); } @Override public Literal neg() { return new Int(-this.value); } @Override public Literal pos() { return new Int(this.value); } }