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(var, (, null, var, null, true)
                      listener: beginMetadataStar(var)
                      listener: endMetadataStar(0)
                      listener: handleNoType(var)
                      listener: beginVariablesDeclaration(i, null, var)
                parseForLoopPartsMid(var, null, for)
                  parseVariablesDeclarationRest(var, false)
                    parseOptionallyInitializedIdentifier(var)
                      ensureIdentifier(var, localVariableDeclaration)
                        listener: handleIdentifier(i, localVariableDeclaration)
                      listener: beginInitializedIdentifier(i)
                      parseVariableInitializerOpt(i)
                        listener: handleNoVariableInitializer(i)
                      listener: endInitializedIdentifier(i)
                    listener: endVariablesDeclaration(1, null)
                  listener: handleForInitializerLocalVariableDeclaration(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(1, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(main)
  listener: endCompilationUnit(1, )
