unaryPattern method
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;
});