parseUnit(void)
  skipErrorTokens(void)
  listener: beginCompilationUnit(void)
  syntheticPreviousToken(void)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleVoidKeyword(void)
        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(f, topLevelFunctionDeclaration)
        parseMethodTypeVar(f)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
          parseFormalParameters(f, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
                parseMetadataStar(()
                  listener: beginMetadataStar(x)
                  listener: endMetadataStar(0)
                listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
                listener: handleNoType(()
                ensureIdentifier((, formalParameterDeclaration)
                  listener: handleIdentifier(x, formalParameterDeclaration)
                listener: handleFormalParameterWithoutValue())
                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, switch)
          parseStatement({)
            parseStatementX({)
              parseSwitchStatement({)
                listener: beginSwitchStatement(switch)
                ensureParenthesizedCondition(switch, allowCase: false)
                  parseExpressionInParenthesisRest((, allowCase: false)
                    parseExpression(()
                      looksLikeOuterPatternEquals(()
                        skipOuterPattern(()
                          skipObjectPatternRest(x)
                      parsePrecedenceExpression((, 1, true)
                        parseUnaryExpression((, true)
                          parsePrimary((, expression)
                            parseSendOrFunctionLiteral((, expression)
                              parseSend((, expression)
                                isNextIdentifier(()
                                ensureIdentifier((, expression)
                                  listener: handleIdentifier(x, expression)
                                listener: handleNoTypeArguments())
                                parseArgumentsOpt(x)
                                  listener: handleNoArguments())
                                listener: handleSend(x, ))
                    ensureCloseParen(x, ()
                    listener: handleParenthesizedCondition((, null, null)
                parseSwitchBlock())
                  ensureBlock(), null, switch statement)
                  listener: beginSwitchBlock({)
                  notEofOrValue(}, case)
                  peekPastLabels(case)
                  listener: beginCaseExpression(case)
                  parsePattern(case, PatternContext.matching, precedence: 1)
                    parsePrimaryPattern(case, PatternContext.matching)
                      listener: beginTypeArguments(<)
                      listener: handleIdentifier(int, typeReference)
                      listener: handleNoTypeArguments(>)
                      listener: handleType(int, null)
                      listener: endTypeArguments(1, <, >)
                      parseObjectPatternRest(>, PatternContext.matching)
                        listener: handleObjectPatternFields(0, (, ))
                      listener: handleObjectPattern(_, null, null)
                  listener: handleSwitchCaseNoWhenClause())
                  ensureColon())
                  listener: endCaseExpression(case, null, :)
                  peekPastLabels(break)
                  parseStatementsInSwitchCase(:, break, case, 0, 1, null, null)
                    listener: beginSwitchCase(0, 1, case)
                    parseStatement(:)
                      parseStatementX(:)
                        parseBreakStatement(:)
                          isBreakAllowed()
                          ensureSemicolon(break)
                          listener: handleBreakStatement(false, break, ;)
                    peekPastLabels(})
                    listener: endSwitchCase(0, 1, null, null, 1, case, })
                  notEofOrValue(}, })
                  listener: endSwitchBlock(1, {, })
                listener: endSwitchStatement(switch, })
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
