parseUnit(()
  skipErrorTokens(()
  listener: beginCompilationUnit(()
  syntheticPreviousToken(()
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(()
      listener: endMetadataStar(0)
    listener: beginTopLevelMember(()
    parseInvalidTopLevelDeclaration()
      reportRecoverableErrorWithToken((, Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '('., null, {lexeme: (}], (, ()
      listener: handleInvalidTopLevelDeclaration(()
  listener: endTopLevelDeclaration())
  parseTopLevelDeclarationImpl((, Instance of 'DirectiveContext')
    parseMetadataStar(()
      listener: beginMetadataStar())
      listener: endMetadataStar(0)
    listener: beginTopLevelMember())
    parseInvalidTopLevelDeclaration(()
      reportRecoverableErrorWithToken(), Instance of 'Template<(Token) => Message>')
        listener: handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got ')'., null, {lexeme: )}], ), ))
      listener: handleInvalidTopLevelDeclaration())
  listener: endTopLevelDeclaration(async)
  parseTopLevelDeclarationImpl(), Instance of 'DirectiveContext')
    parseMetadataStar())
      listener: beginMetadataStar(async)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl())
      listener: beginTopLevelMember(async)
      isReservedKeyword(=>)
      parseTopLevelMethod(), null, ), Instance of 'NoType', null, async, false)
        listener: beginTopLevelMethod(), null)
        listener: handleNoType())
        ensureIdentifierPotentiallyRecovered(), topLevelFunctionDeclaration, false)
          listener: handleIdentifier(async, topLevelFunctionDeclaration)
        parseMethodTypeVar(async)
          listener: handleNoTypeVariables(=>)
        parseGetterOrFormalParameters(async, async, false, MemberKind.TopLevelMethod)
          missingParameterMessage(MemberKind.TopLevelMethod)
          reportRecoverableError(async, MissingFunctionParameters)
            listener: handleRecoverableError(MissingFunctionParameters, async, async)
          rewriter()
          parseFormalParametersRest((, MemberKind.TopLevelMethod)
            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          parseExpressionFunctionBody(=>, false)
            parseExpression(=>)
              parsePrecedenceExpression(=>, 1, true)
                parseUnaryExpression(=>, true)
                  parsePrimary(=>, expression)
                    parseSendOrFunctionLiteral(=>, expression)
                      parseSend(=>, expression)
                        isNextIdentifier(=>)
                        ensureIdentifier(=>, expression)
                          listener: handleIdentifier(a, expression)
                        listener: handleNoTypeArguments(b)
                        parseArgumentsOpt(a)
                          listener: handleNoArguments(b)
                        listener: handleSend(a, b)
            ensureSemicolon(a)
              reportRecoverableError(a, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
                listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], a, a)
              rewriter()
            listener: handleExpressionFunctionBody(=>, ;)
            inGenerator()
        listener: endTopLevelMethod(async, null, ;)
  listener: endTopLevelDeclaration(b)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(b)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(b)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', $, DeclarationKind.TopLevel, null, false)
        listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
        ensureIdentifier(;, typeReference)
          listener: handleIdentifier(b, typeReference)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(c, typeReference)
        listener: handleNoTypeArguments($)
        listener: handleType(c, null)
        reportRecoverableError(c, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], c, c)
        listener: endTypeArguments(1, <, >)
        listener: handleType(b, null)
        ensureIdentifierPotentiallyRecovered(>, topLevelVariableDeclaration, false)
          insertSyntheticIdentifier(>, topLevelVariableDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
            reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }])
              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
              listener: // WARNING: Reporting at eof for .
            rewriter()
          listener: handleIdentifier(, topLevelVariableDeclaration)
        parseFieldInitializerOpt(, , null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer()
        ensureSemicolon()
          reportRecoverableError(>, Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}])
            listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], >, >)
          rewriter()
        listener: endTopLevelFields(null, null, null, null, null, 1, b, ;)
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(()
  listener: endCompilationUnit(4, )
