public override LatteParser.TypeContext VisitERelOp(LatteParser.ERelOpContext context) { var lhs = Visit(context.expr()[0]); var rhs = Visit(context.expr()[1]); switch (context.relOp()) { case LatteParser.LessThanContext _: case LatteParser.LessEqualsContext _: case LatteParser.GreaterThanContext _: case LatteParser.GreaterEqualsContext _: if (!lhs.Equals(rhs) || !lhs.Equals(new LatteParser.TIntContext())) { Utils.StateUtils.InterruptWithMessage(context.start.Line, ErrorMessages.CompOpToNotInt); } break; case LatteParser.EqualsContext _: case LatteParser.NotEqualsContext _: if (!lhs.Equals(rhs)) { Utils.StateUtils.InterruptWithMessage(context.start.Line, ErrorMessages.EqOpWrongTypes); } break; } return(new LatteParser.TBoolContext()); }
public RelOp(LatteParser.ERelOpContext context) : base(context.expr()[0], context.expr()[1]) { Rel = context.relOp() switch { LatteParser.LessThanContext _ => Rel.LessThan, LatteParser.LessEqualsContext _ => Rel.LessEquals, LatteParser.GreaterThanContext _ => Rel.GreaterThan, LatteParser.GreaterEqualsContext _ => Rel.GreaterEquals, LatteParser.EqualsContext _ => Rel.Equals, LatteParser.NotEqualsContext _ => Rel.NotEquals }; }