switchCase method

Parser<SwitchPatternCaseNode> switchCase()
inherited

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();