parseUnit(UnmatchedToken(())
  skipErrorTokens(UnmatchedToken(())
  listener: beginCompilationUnit(n)
  syntheticPreviousToken(n)
  parseTopLevelDeclarationImpl(UnmatchedToken(<), Instance of 'DirectiveContext')
    parseMetadataStar(UnmatchedToken(<))
      listener: beginMetadataStar(n)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(UnmatchedToken(<))
      listener: beginTopLevelMember(n)
      parseTopLevelMethod(UnmatchedToken(<), null, UnmatchedToken(<), Instance of 'ComplexTypeInfo', null, e, false)
        listener: beginTopLevelMethod(UnmatchedToken(<), null)
        ensureIdentifier(UnmatchedToken(<), typeReference)
          listener: handleIdentifier(n, typeReference)
        listener: beginTypeArguments(<)
        listener: handleIdentifier(S, typeReference)
        listener: handleNoTypeArguments(e)
        listener: handleType(S, null)
        reportRecoverableError(S, Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}])
          listener: handleRecoverableError(Message[ExpectedAfterButGot, Expected '>' after this., null, {string: >}], S, S)
        listener: endTypeArguments(1, <, >)
        listener: handleType(n, null)
        ensureIdentifierPotentiallyRecovered(>, topLevelFunctionDeclaration, false)
          insertSyntheticIdentifier(>, topLevelFunctionDeclaration, 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(, topLevelFunctionDeclaration)
        parseMethodTypeVar()
          listener: handleNoTypeVariables()
        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
          missingParameterMessage(MemberKind.TopLevelMethod)
          reportRecoverableError(, MissingFunctionParameters)
            listener: handleRecoverableError(MissingFunctionParameters, , )
            listener: // WARNING: Reporting at eof for .
          rewriter()
          parseFormalParametersRest((, MemberKind.TopLevelMethod)
            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
        parseAsyncModifierOpt())
          listener: handleAsyncModifier(null, null)
          inPlainSync()
        parseFunctionBody(), false, false)
          ensureBlock(), Instance of 'Template<(Token) => Message>', null)
            reportRecoverableError(, Message[ExpectedFunctionBody, Expected a function body, but got ''., null, {lexeme: }])
              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got ''., null, {lexeme: }], , )
              listener: // WARNING: Reporting at eof for .
            insertBlock())
              rewriter()
              rewriter()
          listener: handleInvalidFunctionBody({)
        listener: endTopLevelMethod(n, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(UnmatchedToken(())
    listener: handleErrorToken(UnmatchedToken(())
    listener: handleRecoverableError(Message[UnmatchedToken, Can't find ')' to match '('., null, {string: ), lexeme: (}], UnmatchedToken((), UnmatchedToken(())
    listener: handleErrorToken(UnmatchedToken(<))
    listener: handleRecoverableError(Message[UnmatchedToken, Can't find '>' to match '<'., null, {string: >, lexeme: <}], UnmatchedToken(<), UnmatchedToken(<))
  listener: endCompilationUnit(1, )
