package com.form.language.ast.expression.logic; import com.form.language.ast.expression.Expression; import com.form.language.ast.expression.UnaryExpression; import com.form.language.ast.type.BoolType; import com.form.language.ast.type.ErrorType; import com.form.language.ast.type.Type; import com.form.language.ast.values.BoolValue; import com.form.language.issue.Error; import com.form.language.issue.QLToken; import com.form.language.memory.Context; public class Not extends UnaryExpression { public Not(Expression value, QLToken tokenInfo) { super(value, tokenInfo); } @Override public BoolValue evaluate(Context context) { return new BoolValue(!((BoolValue) value.evaluate(context)).getValue()); } @Override public Type getType(Context context) { Type childType = value.getType(context); if (childType.isBoolType()) { return new BoolType(); } else { if (!childType.isErrorType()) { context.addError(new Error(tokenInfo, "Expected !Boolean, but found !" + childType)); } return new ErrorType(); } } }