parseUnit(main)
  skipErrorTokens(main)
  listener: beginCompilationUnit(main)
  syntheticPreviousToken(main)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(main)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl()
      listener: beginTopLevelMember(main)
      isReservedKeyword(()
      parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
        listener: beginTopLevelMethod(, 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({)
          notEofOrValue(}, for)
          parseStatement({)
            parseStatementX({)
              parseForStatement({, null)
                listener: beginForStatement(for)
                parseForLoopPartsStart(null, for)
                  parseExpressionStatementOrDeclaration((, true)
                    parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, true)
                parseForLoopPartsMid((, null, for)
                  parseExpression(()
                    parsePrecedenceExpression((, 1, true)
                      parseUnaryExpression((, true)
                        parsePrimary((, expression)
                          parseSend((, expression)
                            isNextIdentifier(()
                            ensureIdentifier((, expression)
                              reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
                                listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
                              rewriter()
                              listener: handleIdentifier(, expression)
                            listener: handleNoTypeArguments())
                            parseArgumentsOpt()
                              listener: handleNoArguments())
                            listener: handleSend(, ))
                  listener: handleForInitializerExpressionStatement(, false)
                parseForRest(null, , for)
                  parseForLoopPartsRest(, for, null)
                    ensureSemicolon()
                      reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                        listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
                      rewriter()
                    parseExpressionStatement(;)
                      parseExpression(;)
                        parsePrecedenceExpression(;, 1, true)
                          parseUnaryExpression(;, true)
                            parsePrimary(;, expression)
                              parseSend(;, expression)
                                isNextIdentifier(;)
                                ensureIdentifier(;, expression)
                                  reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
                                    listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
                                  rewriter()
                                  listener: handleIdentifier(, expression)
                                listener: handleNoTypeArguments())
                                parseArgumentsOpt()
                                  listener: handleNoArguments())
                                listener: handleSend(, ))
                      ensureSemicolon()
                        reportRecoverableError(, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
                        rewriter()
                      listener: handleExpressionStatement(;)
                    listener: handleForLoopParts(for, (, ;, 0)
                  listener: beginForStatementBody({)
                  parseStatement())
                    parseStatementX())
                      parseBlock(), BlockKind(statement))
                        ensureBlock(), null, null)
                        listener: beginBlock({, BlockKind(statement))
                        notEofOrValue(}, })
                        listener: endBlock(0, {, }, BlockKind(statement))
                  listener: endForStatementBody(})
                  listener: endForStatement(})
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(main)
  listener: endCompilationUnit(1, )
