package nodeAST.literals; import java.util.Map; import nodeAST.Expression; import nodeAST.Ident; import types.BoolType; import types.Type; import visitor.ASTVisitor; import visitor.IdentifiersTypeMatcher; public class Bool extends Literal { protected boolean value; public Bool(boolean value) { this.value=value; } @Override public boolean equals(Object obj) { if (!(obj instanceof Bool)) return false; Bool expr=(Bool) 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 BoolType(); } @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 eq(Literal operand) { return operand.eq(this.value); } @Override public Literal eq(boolean value) { return new Bool(this.value == value); } @Override public Literal neq(Literal operand) { return operand.neq(this.value); } @Override public Literal neq(boolean value) { return new Bool(this.value != value); } @Override public Literal not() { return new Bool(!this.value); } @Override public Literal and(Literal operand) { return operand.and(this.value); } @Override public Literal and(boolean value) { return new Bool(value && this.value); } @Override public Literal or(Literal operand) { return operand.or(this.value); } @Override public Literal or(boolean value) { return new Bool(value || this.value); } @Override public boolean isBoolean() { return true; } @Override public boolean getValue() { return this.value; } }