code: @Override
      public Object visitEqualityExpression(ExcellentParser.EqualityExpressionContext ctx) {
          Pair<Object, Object> args = Conversions.toSame(visit(ctx.expression(0)), visit(ctx.expression(1)), m_evalContext);
          boolean equal;
  
          if (args.getLeft() instanceof String) {
              // string equality is case-insensitive
              equal = ((String) args.getLeft()).equalsIgnoreCase((String) args.getRight());
          }
          else if (args.getLeft() instanceof BigDecimal) {
              // compareTo doesn't take scale into account
              equal = ((BigDecimal) args.getLeft()).compareTo((BigDecimal) args.getRight()) == 0;
          }
          else {
              equal = args.getLeft().equals(args.getRight());
          }
  
          return ctx.EQ() != null ? equal : !equal;
      }
docs: expression: expression (EQ | NEQ) expression