parseUnit(main)
  skipErrorTokens(main)
  listener: beginCompilationUnit(main)
  syntheticPreviousToken(main)
  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
    parseMetadataStar()
      listener: beginMetadataStar(main)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(main)
      isReservedKeyword(()
      parseTopLevelMethod(, null, null, , NoType(), null, main, false)
        listener: beginTopLevelMethod(, null, null)
        listener: handleNoType()
        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
          listener: handleIdentifier(main, topLevelFunctionDeclaration)
        parseMethodTypeVar(main)
          listener: handleNoTypeVariables(()
        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
          parseFormalParameters(main, MemberKind.TopLevelMethod)
            parseFormalParametersRest((, MemberKind.TopLevelMethod)
              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          listener: beginBlockFunctionBody({)
          notEofOrType(CLOSE_CURLY_BRACKET, local)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
                looksLikeLocalFunction(local)
                listener: beginMetadataStar(local)
                listener: endMetadataStar(0)
                listener: handleNoTypeVariables(()
                listener: beginLocalFunctionDeclaration(local)
                listener: handleNoType({)
                parseNamedFunctionRest({, local, local, false)
                  listener: beginFunctionName(local)
                  ensureIdentifier({, localFunctionDeclaration)
                    listener: handleIdentifier(local, localFunctionDeclaration)
                  listener: endFunctionName(local, (, false)
                  parseFormalParametersRequiredOpt(local, MemberKind.Local)
                    parseFormalParametersRest((, MemberKind.Local)
                      listener: beginFormalParameters((, MemberKind.Local)
                      listener: endFormalParameters(0, (, ), MemberKind.Local)
                  parseInitializersOpt())
                    listener: handleNoInitializers()
                  parseAsyncOptBody(), false, false)
                    parseAsyncModifierOpt())
                      listener: handleAsyncModifier(null, null)
                      inPlainSync()
                    parseFunctionBody(), false, false)
                      listener: beginBlockFunctionBody({)
                      notEofOrType(CLOSE_CURLY_BRACKET, })
                      listener: endBlockFunctionBody(0, {, })
                  listener: endLocalFunctionDeclaration(})
          notEofOrType(CLOSE_CURLY_BRACKET, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration(})
  reportAllErrorTokens(main)
  listener: endCompilationUnit(1, )
