package com.form.language.ast.expression.logic;
import com.form.language.ast.expression.BinaryExpression;
import com.form.language.ast.expression.Expression;
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 Equal extends BinaryExpression {
public Equal(Expression left, Expression right, QLToken tokenInfo) {
super(left, right, tokenInfo);
}
@Override
public BoolValue evaluate(Context context) {
return new BoolValue(left.evaluate(context).equals(right.evaluate(context)));
}
@Override
public Type getType(Context context) {
Type leftType = left.getType(context);
Type rightType = right.getType(context);
if (leftType.equals(rightType)) {
return new BoolType();
}
if (!(leftType.isErrorType() || rightType.isErrorType())) {
context.addError(new Error(tokenInfo, "Cannot compare unequal types: " + leftType + " == " + rightType));
}
return new ErrorType();
}
}