unaryPattern method

Parser<PatternNode> unaryPattern()
inherited

Unary / postfix pattern (p as T, p?, p!).

Implementation

Parser<PatternNode> unaryPattern() =>
    seq2(
      ref0(primaryPattern),
      [
        (ref0(asToken) & ref0(type)).map(
          (l) => (op: 'as', type: l[1] as TypeNode),
        ),
        ref1(token, '?').map((_) => (op: '?', type: null)),
        ref1(token, '!').map((_) => (op: '!', type: null)),
      ].toChoiceParser().star(),
    ).map2((primary, suffixes) {
      var result = primary;
      for (final s in suffixes) {
        final type = s.type;
        if (s.op == 'as' && type != null) {
          result = CastPatternNode(result, type);
        } else if (s.op == '?') {
          result = NullCheckPatternNode(result);
        } else if (s.op == '!') {
          result = NullAssertPatternNode(result);
        }
      }
      return result;
    });