parseUnit(f)
  skipErrorTokens(f)
  listener: beginCompilationUnit(f)
  syntheticPreviousToken(f)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(f)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(f)
      isReservedKeyword(()
      parseTopLevelMethod(, null, null, , Instance of '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)
          listener: beginBlockFunctionBody({)
          notEofOrValue(}, var)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
                skipOuterPattern(var)
                listener: beginMetadataStar(var)
                listener: endMetadataStar(0)
                parsePatternVariableDeclarationStatement(var, {, var)
                  parsePattern(var, PatternContext.declaration, precedence: 1)
                    parsePrimaryPattern(var, PatternContext.declaration)
                      parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
                        parsePattern((, PatternContext.declaration, precedence: 1)
                          parsePrimaryPattern((, PatternContext.declaration)
                            parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
                              listener: handleNoType(()
                              listener: handleVariablePattern(null, a, false)
                        ensureCloseParen(a, ()
                        listener: handleParenthesizedPattern(()
                  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, ;)
                  ensureSemicolon(x)
                  listener: handlePatternVariableDeclarationStatement(var, =, ;)
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(f, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(f)
  listener: endCompilationUnit(1, )
