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, {token: (}], (, ()
      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, {token: )}], ), ))
      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)
                        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(;)
        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 ''., {token: }], messageOnToken: null)
            reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {token: }])
              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {token: }], , )
            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, )
