parseUnit(f)
  skipErrorTokens(f)
  listener: beginCompilationUnit(f)
  syntheticPreviousToken(f)
  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
    parseMetadataStar()
      listener: beginMetadataStar(f)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(f)
      isReservedKeyword(()
      parseTopLevelMethod(, null, null, , NoType(), null, f, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleNoType()
        ensureIdentifierPotentiallyRecovered(, 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)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              looksLikeOuterPatternEquals(=>)
                skipOuterPattern(=>)
              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                parseUnaryExpression(=>, true, ConstantPatternContext.none)
                  parsePrimary(=>, expression, ConstantPatternContext.none)
                    inPlainSync()
                    parseSwitchExpression(=>)
                      listener: beginSwitchExpression(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)
                                      ensureIdentifier((, expression)
                                        listener: handleIdentifier(x, expression)
                                      listener: handleNoTypeArguments())
                                      parseArgumentsOpt(x)
                                        listener: handleNoArguments())
                                      listener: handleSend(x, x)
                          ensureCloseParen(x, ()
                          listener: handleParenthesizedCondition((, null, null)
                      ensureBlock(), BlockKind(switch expression))
                      listener: beginSwitchExpressionBlock({)
                      listener: beginSwitchExpressionCase()
                      parsePattern({, PatternContext.matching, precedence: 1)
                        listener: beginPattern({)
                        parsePrimaryPattern({, PatternContext.matching)
                          parseVariablePattern({, PatternContext.matching, typeInfo: SimpleType())
                            listener: handleIdentifier(int, typeReference)
                            listener: handleNoTypeArguments(_)
                            listener: handleType(int, null)
                            listener: handleWildcardPattern(null, _)
                        listener: endPattern(_)
                      listener: handleSwitchExpressionCasePattern(_)
                      ensureFunctionArrow(_)
                      parseExpression(=>)
                        looksLikeOuterPatternEquals(=>)
                          skipOuterPattern(=>)
                        parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                          parseUnaryExpression(=>, true, ConstantPatternContext.none)
                            parsePrimary(=>, expression, ConstantPatternContext.none)
                              parseLiteralInt(=>)
                                listener: handleLiteralInt(0)
                      listener: endSwitchExpressionCase(int, null, =>, 0)
                      listener: beginSwitchExpressionCase()
                      parsePattern(,, PatternContext.matching, precedence: 1)
                        listener: beginPattern(,)
                        parsePrimaryPattern(,, PatternContext.matching)
                          parseVariablePattern(,, PatternContext.matching, typeInfo: NoType())
                            listener: handleNoType(_)
                            listener: handleWildcardPattern(null, _)
                        listener: endPattern(_)
                      listener: handleSwitchExpressionCasePattern(_)
                      ensureFunctionArrow(_)
                      parseExpression(=>)
                        looksLikeOuterPatternEquals(=>)
                          skipOuterPattern(=>)
                        parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                          parseUnaryExpression(=>, true, ConstantPatternContext.none)
                            parsePrimary(=>, expression, ConstantPatternContext.none)
                              parseLiteralInt(=>)
                                listener: handleLiteralInt(1)
                      listener: endSwitchExpressionCase(_, null, =>, 1)
                      listener: endSwitchExpressionBlock(2, {, })
                      listener: endSwitchExpression(switch, })
            ensureSemicolon(})
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(f, null, ;)
  listener: endTopLevelDeclaration(;)
  reportAllErrorTokens(f)
  listener: endCompilationUnit(1, )
