switchCase method
Implementation
Parser<SwitchPatternCaseNode> switchCase() => [
// Standard case pattern [when guard]: statements
seq3(
(ref0(identifier) & ref1(token, ':')).map((l) => l[0] as String).star(),
seq3(
ref0(caseToken),
ref0(dartPattern),
seq2(ref0(patternGuard).optional(), ref1(token, ':')),
).map3((_, p, guardAndColon) => (p, guardAndColon.$1)).plus(),
ref0(statement).star(),
).map3(
(labels, patternsAndGuards, stmts) => SwitchPatternCaseNode(
labels: labels,
patterns: patternsAndGuards.map((e) => e.$1).toList(),
whenGuard: patternsAndGuards.last.$2,
statements: stmts,
),
),
// Default: statements
seq3(
(ref0(identifier) & ref1(token, ':')).map((l) => l[0] as String).star(),
seq2(ref0(defaultToken), ref1(token, ':')),
ref0(statement).star(),
).map3(
(labels, _, stmts) => SwitchPatternCaseNode(
labels: labels,
isDefault: true,
statements: stmts,
),
),
].toChoiceParser();