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)
                      listener: beginMetadataStar(int)
                      listener: endMetadataStar(0)
                      listener: handleIdentifier(int, typeReference)
                      listener: handleNoTypeArguments(i)
                      listener: handleType(int, null)
                      listener: beginVariablesDeclaration(i, null, null)
                parseForLoopPartsMid(int, null, for)
                  parseVariablesDeclarationRest(int, false)
                    parseOptionallyInitializedIdentifier(int)
                      ensureIdentifier(int, localVariableDeclaration)
                        listener: handleIdentifier(i, localVariableDeclaration)
                      listener: beginInitializedIdentifier(i)
                      parseVariableInitializerOpt(i)
                        listener: handleNoVariableInitializer(i)
                      listener: endInitializedIdentifier(i)
                    listener: endVariablesDeclaration(1, null)
                  listener: handleForInitializerLocalVariableDeclaration(i, true)
                  reportRecoverableError(:, ColonInPlaceOfIn)
                    listener: handleRecoverableError(ColonInPlaceOfIn, :, :)
                parseForInRest(i, null, for, i)
                  parseForInLoopPartsRest(i, null, for, i)
                    listener: beginForInExpression([)
                    parseExpression(:)
                      parsePrecedenceExpression(:, 1, true)
                        parseUnaryExpression(:, true)
                          parsePrimary(:, expression)
                            listener: handleNoTypeArguments([)
                            parseLiteralListSuffix(:, null)
                              parseExpression([)
                                parsePrecedenceExpression([, 1, true)
                                  parseUnaryExpression([, true)
                                    parsePrimary([, expression)
                                      parseLiteralInt([)
                                        listener: handleLiteralInt(1)
                              parseExpression(,)
                                parsePrecedenceExpression(,, 1, true)
                                  parseUnaryExpression(,, true)
                                    parsePrimary(,, expression)
                                      parseLiteralInt(,)
                                        listener: handleLiteralInt(2)
                              parseExpression(,)
                                parsePrecedenceExpression(,, 1, true)
                                  parseUnaryExpression(,, true)
                                    parsePrimary(,, expression)
                                      parseLiteralInt(,)
                                        listener: handleLiteralInt(3)
                              listener: handleLiteralList(3, [, null, ])
                    ensureCloseParen(], ()
                    listener: endForInExpression())
                    listener: handleForInLoopParts(null, for, (, :)
                  listener: beginForInBody({)
                  parseStatement())
                    parseStatementX())
                      parseBlock(), BlockKind(statement))
                        ensureBlock(), null, null)
                        listener: beginBlock({, BlockKind(statement))
                        notEofOrValue(}, print)
                        parseStatement({)
                          parseStatementX({)
                            parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
                              looksLikeLocalFunction(print)
                              parseExpressionStatement({)
                                parseExpression({)
                                  parsePrecedenceExpression({, 1, true)
                                    parseUnaryExpression({, true)
                                      parsePrimary({, expression)
                                        parseSendOrFunctionLiteral({, expression)
                                          looksLikeFunctionBody(;)
                                          parseSend({, expression)
                                            isNextIdentifier({)
                                            ensureIdentifier({, expression)
                                              listener: handleIdentifier(print, expression)
                                            listener: handleNoTypeArguments(()
                                            parseArgumentsOpt(print)
                                              parseArguments(print)
                                                parseArgumentsRest(()
                                                  listener: beginArguments(()
                                                  parseExpression(()
                                                    parsePrecedenceExpression((, 1, true)
                                                      parseUnaryExpression((, true)
                                                        parsePrimary((, expression)
                                                          parseSendOrFunctionLiteral((, expression)
                                                            parseSend((, expression)
                                                              isNextIdentifier(()
                                                              ensureIdentifier((, expression)
                                                                listener: handleIdentifier(i, expression)
                                                              listener: handleNoTypeArguments())
                                                              parseArgumentsOpt(i)
                                                                listener: handleNoArguments())
                                                              listener: handleSend(i, ))
                                                  listener: endArguments(1, (, ))
                                            listener: handleSend(print, ;)
                                ensureSemicolon())
                                listener: handleExpressionStatement(;)
                        notEofOrValue(}, })
                        listener: endBlock(1, {, }, BlockKind(statement))
                  listener: endForInBody(})
                  listener: endForIn(})
          notEofOrValue(}, })
          listener: endBlockFunctionBody(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(main)
  listener: endCompilationUnit(1, )
