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 ''., null, {token: }], messageOnToken: null)
            reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., null, {token: }])
              listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., null, {token: }], , )
            rewriter()
          listener: handleIdentifier(, topLevelFunctionDeclaration)
        parseMethodTypeVar()
          listener: handleNoTypeVariables()
        parseGetterOrFormalParameters(, , false, MemberKind.TopLevelMethod)
          missingParameterMessage(MemberKind.TopLevelMethod)
          reportRecoverableError(, MissingFunctionParameters)
            listener: handleRecoverableError(MissingFunctionParameters, , )
          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, {token: }])
              listener: handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got ''., null, {token: }], , )
            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: ), token: (}], UnmatchedToken((), UnmatchedToken(())
    listener: handleErrorToken(UnmatchedToken(<))
    listener: handleRecoverableError(Message[UnmatchedToken, Can't find '>' to match '<'., null, {string: >, token: <}], UnmatchedToken(<), UnmatchedToken(<))
  listener: endCompilationUnit(1, )
