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(}, var)
          parseStatement({)
            parseStatementX({)
              parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, false)
                looksLikeLocalFunction(i)
                listener: beginMetadataStar(var)
                listener: endMetadataStar(0)
                listener: handleNoType(var)
                listener: beginVariablesDeclaration(i, null, var)
                parseVariablesDeclarationRest(var, true)
                  parseOptionallyInitializedIdentifier(var)
                    ensureIdentifier(var, localVariableDeclaration)
                      listener: handleIdentifier(i, localVariableDeclaration)
                    listener: beginInitializedIdentifier(i)
                    parseVariableInitializerOpt(i)
                      listener: handleNoVariableInitializer(i)
                    listener: endInitializedIdentifier(i)
                  ensureSemicolon(i)
                  listener: endVariablesDeclaration(1, ;)
          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)
                          parseSendOrFunctionLiteral((, expression)
                            parseSend((, expression)
                              ensureIdentifier((, expression)
                                listener: handleIdentifier(i, expression)
                              listener: handleNoTypeArguments(in)
                              parseArgumentsOpt(i)
                                listener: handleNoArguments(in)
                              listener: handleSend(i, in)
                  listener: handleForInitializerExpressionStatement(i, true)
                parseForInRest(i, null, for, i)
                  parseForInLoopPartsRest(i, null, for, i)
                    listener: beginForInExpression([])
                    parseExpression(in)
                      parsePrecedenceExpression(in, 1, true)
                        parseUnaryExpression(in, true)
                          parsePrimary(in, expression)
                            listener: handleNoTypeArguments([])
                            parseLiteralListSuffix(in, null)
                              rewriteSquareBrackets(in)
                                link([, ])
                                rewriter()
                              listener: handleLiteralList(0, [, null, ])
                    ensureCloseParen(], ()
                    listener: endForInExpression())
                    listener: handleForInLoopParts(null, for, (, in)
                  listener: beginForInBody({)
                  parseStatement())
                    parseStatementX())
                      parseBlock(), BlockKind(statement))
                        ensureBlock(), null, null)
                        listener: beginBlock({, BlockKind(statement))
                        notEofOrValue(}, })
                        listener: endBlock(0, {, }, BlockKind(statement))
                  listener: endForInBody(})
                  listener: endForIn(})
          notEofOrValue(}, })
          listener: endBlockFunctionBody(2, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(main)
  listener: endCompilationUnit(1, )
