additiveExpression method

  1. @override
Parser additiveExpression()
override

Implementation

@override
Parser additiveExpression() => super.additiveExpression().map((c) {
      Expression left = c[0];
      for (var item in c[1]) {
        Expression right = item[1];
        if (item[0].value == '+') {
          if (left is Expression<Number> && right is Expression<Number>) {
            left = PlusNumberExpression(left, right);
            continue;
          }
          if (left is Expression<String> && right is Expression<String>) {
            left = PlusStringExpression(left, right);
            continue;
          }
          if (left is Expression<String> && right is Expression<Number>) {
            left =
                PlusStringExpression(left, ToStringFunctionExpression(right));
            continue;
          }
          if (left is Expression<Number> && right is Expression<String>) {
            left =
                PlusStringExpression(ToStringFunctionExpression(left), right);
            continue;
          }
          if (left is Expression<Duration> && right is Expression<DateTime>) {
            left = DateTimePlusDurationExpression(right, left);
            continue;
          }
          if (left is Expression<DateTime> && right is Expression<Duration>) {
            left = DateTimePlusDurationExpression(left, right);
            continue;
          }
          if (left is Expression<Duration> && right is Expression<Duration>) {
            left = PlusDurationExpression(left, right);
            continue;
          }
        }
        if (item[0].value == '-') {
          if ((left is Expression<Number>) && (right is Expression<Number>)) {
            left = MinusNumberExpression(left, right);
            continue;
          }
          if ((left is Expression<DateTime>) &&
              (right is Expression<Duration>)) {
            left = DateTimeMinusDurationExpression(left, right);
            continue;
          }
          if ((left is Expression<Duration>) &&
              (right is Expression<Duration>)) {
            left = MinusDurationExpression(left, right);
            continue;
          }
        }
        throw UnknownExpressionTypeException(
            'Unknown additive expression type');
      }
      return left;
    });