parseUnit(void)
  skipErrorTokens(void)
  listener: beginCompilationUnit(void)
  syntheticPreviousToken(void)
  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
    parseMetadataStar()
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(void)
      parseTopLevelMethod(, null, null, , 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, 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(), BlockKind(switch statement))
                  listener: beginSwitchBlock({)
                  notEofOrValue(}, case)
                  peekPastLabels(case)
                  listener: beginCaseExpression(case)
                  parsePattern(case, PatternContext.matching, precedence: 1)
                    listener: beginPattern(case)
                    parsePrimaryPattern(case, PatternContext.matching)
                      parseVariablePattern(case, PatternContext.matching, typeInfo: NoType())
                        listener: handleNoType(var)
                        reportRecoverableError(as, Message[IllegalPatternVariableName, The variable declared by a variable pattern can't be named 'as'., Choose a different name., {lexeme: as}])
                          listener: handleRecoverableError(Message[IllegalPatternVariableName, The variable declared by a variable pattern can't be named 'as'., Choose a different name., {lexeme: as}], as, as)
                        listener: handleDeclaredVariablePattern(var, as, false)
                    listener: endPattern(as)
                  listener: handleSwitchCaseNoWhenClause(as)
                  ensureColon(as)
                  listener: endCaseExpression(case, null, :)
                  peekPastLabels(})
                  parseStatementsInSwitchCase(:, }, case, 0, 1, null, null)
                    listener: beginSwitchCase(0, 1, case)
                    listener: endSwitchCase(0, 1, null, null, 0, case, :)
                  notEofOrValue(}, })
                  listener: endSwitchBlock(1, {, })
                listener: endSwitchStatement(switch, })
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(void, null, })
  listener: endTopLevelDeclaration(})
  reportAllErrorTokens(void)
  listener: endCompilationUnit(1, )
