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(}, const)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrConstDeclaration({)
                parseExpressionStatementOrDeclarationAfterModifiers(const, {, null, const, Instance of 'NoType', null)
                  looksLikeLocalFunction(y)
                  listener: beginMetadataStar(const)
                  listener: endMetadataStar(0)
                  listener: handleNoType(const)
                  listener: beginVariablesDeclaration(y, null, const)
                  parseVariablesDeclarationRest(const, true)
                    parseOptionallyInitializedIdentifier(const)
                      ensureIdentifier(const, localVariableDeclaration)
                        listener: handleIdentifier(y, localVariableDeclaration)
                      listener: beginInitializedIdentifier(y)
                      parseVariableInitializerOpt(y)
                        listener: beginVariableInitializer(=)
                        parseExpression(=)
                          looksLikeOuterPatternEquals(=)
                            skipOuterPattern(=)
                          parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                            parseUnaryExpression(=, true, ConstantPatternContext.none)
                              parsePrimary(=, expression, ConstantPatternContext.none)
                                parseLiteralInt(=)
                                  listener: handleLiteralInt(1)
                        listener: endVariableInitializer(=)
                      listener: endInitializedIdentifier(y)
                    ensureSemicolon(1)
                    listener: endVariablesDeclaration(1, ;)
          notEofOrValue(}, switch)
          parseStatement(;)
            parseStatementX(;)
              parseSwitchStatement(;)
                listener: beginSwitchStatement(switch)
                ensureParenthesizedCondition(switch, allowCase: false)
                  parseExpressionInParenthesisRest((, allowCase: false)
                    parseExpression(()
                      looksLikeOuterPatternEquals(()
                        skipOuterPattern(()
                          skipObjectPatternRest(x)
                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                        parseUnaryExpression((, true, ConstantPatternContext.none)
                          parsePrimary((, expression, ConstantPatternContext.none)
                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
                              parseSend((, expression, ConstantPatternContext.none)
                                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)
                    listener: beginPattern(case)
                    parsePrimaryPattern(case, PatternContext.matching)
                      listener: beginConstantPattern(null)
                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
                          parsePrimary(case, expression, ConstantPatternContext.implicit)
                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
                              parseSend(case, expression, ConstantPatternContext.implicit)
                                isNextIdentifier(case)
                                ensureIdentifier(case, expression)
                                  listener: handleIdentifier(y, expression)
                                listener: handleNoTypeArguments(!)
                                parseArgumentsOpt(y)
                                  listener: handleNoArguments(!)
                                listener: handleSend(y, !)
                      listener: endConstantPattern(null)
                    listener: handleNullAssertPattern(!)
                    reportRecoverableErrorWithEnd(y, !, InvalidInsideUnaryPattern)
                      listener: handleRecoverableError(InvalidInsideUnaryPattern, y, !)
                    listener: handleNullAssertPattern(!)
                    listener: endPattern(!)
                  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(2, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
