(P: ParseState)
| 3304 | } |
| 3305 | |
| 3306 | function parseDoGroup(P: ParseState): TsNode | null { |
| 3307 | skipNewlines(P) |
| 3308 | const save = saveLex(P.L) |
| 3309 | const doTok = nextToken(P.L, 'cmd') |
| 3310 | if (doTok.type !== 'WORD' || doTok.value !== 'do') { |
| 3311 | restoreLex(P.L, save) |
| 3312 | return null |
| 3313 | } |
| 3314 | const doKw = leaf(P, 'do', doTok) |
| 3315 | const body = parseStatements(P, null) |
| 3316 | const kids: TsNode[] = [doKw, ...body] |
| 3317 | consumeKeyword(P, 'done', kids) |
| 3318 | const last = kids[kids.length - 1]! |
| 3319 | return mk(P, 'do_group', doKw.startIndex, last.endIndex, kids) |
| 3320 | } |
| 3321 | |
| 3322 | function parseCase(P: ParseState, caseTok: Token): TsNode { |
| 3323 | const caseKw = leaf(P, 'case', caseTok) |
no test coverage detected