parseUnit(typedef)
  skipErrorTokens(typedef)
  listener: beginCompilationUnit(typedef)
  syntheticPreviousToken(typedef)
  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
    parseMetadataStar()
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E1, typedefDeclaration)
        listener: beginTypeVariables(<)
        listener: beginMetadataStar(T)
        listener: endMetadataStar(0)
        listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E2, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E3, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(S, 2)
        listener: handleNoType(S)
        listener: endTypeVariable(>, 1, null, null)
        listener: handleNoType(T)
        listener: endTypeVariable(,, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E4, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E5, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(S, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(S, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(E6, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(T, 2)
        listener: handleIdentifier(T, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(T, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F1, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        listener: beginMetadataStar(T)
        listener: endMetadataStar(0)
        listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F2, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F3, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(S, 2)
        listener: handleNoType(S)
        listener: endTypeVariable(>, 1, null, null)
        listener: handleNoType(T)
        listener: endTypeVariable(,, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F4, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F5, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(S, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(S, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(F6, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(T, 2)
        listener: handleIdentifier(T, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(T, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G1, typedefDeclaration)
        listener: beginTypeVariables(<)
        listener: beginMetadataStar(X)
        listener: endMetadataStar(0)
        listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleNoType(X)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(X, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G2, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(X)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(X, 1)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(X, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G3, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(X)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        parseMetadataStar(,)
          listener: beginMetadataStar(Y)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(Y, typeVariableDeclaration)
        listener: beginTypeVariable(Y)
        listener: handleTypeVariablesDefined(Y, 2)
        listener: handleNoType(Y)
        listener: endTypeVariable(>, 1, null, null)
        listener: handleNoType(X)
        listener: endTypeVariable(,, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(Y, 2)
        listener: handleIdentifier(Y, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(Y, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(X, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G4, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(X)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        parseMetadataStar(,)
          listener: beginMetadataStar(Y)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(Y, typeVariableDeclaration)
        listener: beginTypeVariable(Y)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(Y, 2)
        listener: handleIdentifier(Y, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(Y, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(X, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G5, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(X)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(X, 2)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(X, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(S, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(S, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(G6, typedefDeclaration)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(X)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(X, typeVariableDeclaration)
        listener: beginTypeVariable(X)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(T, 2)
        listener: handleIdentifier(T, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(T, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(X, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(X, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H1, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              listener: beginMetadataStar(T)
              listener: endMetadataStar(0)
              listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              listener: handleTypeVariablesDefined(T, 1)
              listener: handleNoType(T)
              listener: endTypeVariable(>, 0, null, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H2, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              parseMetadataStar(<)
                listener: beginMetadataStar(T)
                listener: endMetadataStar(0)
              ensureIdentifier(<, typeVariableDeclaration)
                listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              listener: handleTypeVariablesDefined(num, 1)
              listener: handleIdentifier(num, typeReference)
              listener: handleNoTypeArguments(>)
              listener: handleType(num, null)
              listener: endTypeVariable(>, 0, extends, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H3, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              parseMetadataStar(<)
                listener: beginMetadataStar(T)
                listener: endMetadataStar(0)
              ensureIdentifier(<, typeVariableDeclaration)
                listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              parseMetadataStar(,)
                listener: beginMetadataStar(S)
                listener: endMetadataStar(0)
              ensureIdentifier(,, typeVariableDeclaration)
                listener: handleIdentifier(S, typeVariableDeclaration)
              listener: beginTypeVariable(S)
              listener: handleTypeVariablesDefined(S, 2)
              listener: handleNoType(S)
              listener: endTypeVariable(>, 1, null, null)
              listener: handleNoType(T)
              listener: endTypeVariable(,, 0, null, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H4, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              parseMetadataStar(<)
                listener: beginMetadataStar(T)
                listener: endMetadataStar(0)
              ensureIdentifier(<, typeVariableDeclaration)
                listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              parseMetadataStar(,)
                listener: beginMetadataStar(S)
                listener: endMetadataStar(0)
              ensureIdentifier(,, typeVariableDeclaration)
                listener: handleIdentifier(S, typeVariableDeclaration)
              listener: beginTypeVariable(S)
              listener: handleTypeVariablesDefined(num, 2)
              listener: handleIdentifier(num, typeReference)
              listener: handleNoTypeArguments(>)
              listener: handleType(num, null)
              listener: endTypeVariable(>, 1, extends, null)
              listener: handleIdentifier(num, typeReference)
              listener: handleNoTypeArguments(,)
              listener: handleType(num, null)
              listener: endTypeVariable(,, 0, extends, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H5, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              parseMetadataStar(<)
                listener: beginMetadataStar(T)
                listener: endMetadataStar(0)
              ensureIdentifier(<, typeVariableDeclaration)
                listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              parseMetadataStar(,)
                listener: beginMetadataStar(S)
                listener: endMetadataStar(0)
              ensureIdentifier(,, typeVariableDeclaration)
                listener: handleIdentifier(S, typeVariableDeclaration)
              listener: beginTypeVariable(S)
              listener: handleTypeVariablesDefined(num, 2)
              listener: handleIdentifier(num, typeReference)
              listener: handleNoTypeArguments(>)
              listener: handleType(num, null)
              listener: endTypeVariable(>, 1, extends, null)
              listener: handleIdentifier(S, typeReference)
              listener: handleNoTypeArguments(,)
              listener: handleType(S, null)
              listener: endTypeVariable(,, 0, extends, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(typedef)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(typedef)
      listener: endMetadataStar(0)
    parseTopLevelKeywordDeclaration(;, typedef, Instance of 'DirectiveContext')
      parseTopLevelKeywordModifiers(;, typedef)
      parseTypedef(typedef)
        listener: beginUncategorizedTopLevelDeclaration(typedef)
        listener: beginFunctionTypeAlias(typedef)
        ensureIdentifierPotentiallyRecovered(typedef, typedefDeclaration, true)
          listener: handleIdentifier(H6, typedefDeclaration)
        listener: handleNoTypeVariables(=)
        listener: beginFunctionType(void)
        listener: handleNoTypeVariables(()
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
              parseMetadataStar(()
                listener: beginMetadataStar(void)
                listener: endMetadataStar(0)
              listener: beginFormalParameter(void, MemberKind.GeneralizedFunctionType, null, null, null)
              listener: beginFunctionType(void)
              listener: beginTypeVariables(<)
              parseMetadataStar(<)
                listener: beginMetadataStar(T)
                listener: endMetadataStar(0)
              ensureIdentifier(<, typeVariableDeclaration)
                listener: handleIdentifier(T, typeVariableDeclaration)
              listener: beginTypeVariable(T)
              parseMetadataStar(,)
                listener: beginMetadataStar(S)
                listener: endMetadataStar(0)
              ensureIdentifier(,, typeVariableDeclaration)
                listener: handleIdentifier(S, typeVariableDeclaration)
              listener: beginTypeVariable(S)
              listener: handleTypeVariablesDefined(T, 2)
              listener: handleIdentifier(T, typeReference)
              listener: handleNoTypeArguments(>)
              listener: handleType(T, null)
              listener: endTypeVariable(>, 1, extends, null)
              listener: handleIdentifier(num, typeReference)
              listener: handleNoTypeArguments(,)
              listener: handleType(num, null)
              listener: endTypeVariable(,, 0, extends, null)
              listener: endTypeVariables(<, >)
              listener: handleVoidKeyword(void)
              parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
                parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
                  listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
                  listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
              listener: endFunctionType(Function, null)
              listener: handleNoName())
              listener: handleFormalParameterWithoutValue())
              listener: endFormalParameter(null, null, ), null, null, FormalParameterKind.mandatory, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureSemicolon())
        listener: endFunctionTypeAlias(typedef, =, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f1, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        listener: beginMetadataStar(T)
        listener: endMetadataStar(0)
        listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(T, 1)
        listener: handleNoType(T)
        listener: endTypeVariable(>, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f1, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f1, f1, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f2, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        listener: handleTypeVariablesDefined(num, 1)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f2, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f2, f2, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f3, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(S, 2)
        listener: handleNoType(S)
        listener: endTypeVariable(>, 1, null, null)
        listener: handleNoType(T)
        listener: endTypeVariable(,, 0, null, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f3, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f3, f3, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f4, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f4, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f4, f4, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f5, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(num, 2)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(num, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(S, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(S, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f5, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f5, f5, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(void)
  parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
    parseMetadataStar(;)
      listener: beginMetadataStar(void)
      listener: endMetadataStar(0)
    parseTopLevelMemberImpl(;)
      listener: beginTopLevelMember(void)
      parseFields(;, null, null, null, null, null, null, ;, Instance of 'ComplexTypeInfo', f6, DeclarationKind.TopLevel, null, false)
        listener: beginFields(;)
        listener: beginFunctionType(void)
        listener: beginTypeVariables(<)
        parseMetadataStar(<)
          listener: beginMetadataStar(T)
          listener: endMetadataStar(0)
        ensureIdentifier(<, typeVariableDeclaration)
          listener: handleIdentifier(T, typeVariableDeclaration)
        listener: beginTypeVariable(T)
        parseMetadataStar(,)
          listener: beginMetadataStar(S)
          listener: endMetadataStar(0)
        ensureIdentifier(,, typeVariableDeclaration)
          listener: handleIdentifier(S, typeVariableDeclaration)
        listener: beginTypeVariable(S)
        listener: handleTypeVariablesDefined(T, 2)
        listener: handleIdentifier(T, typeReference)
        listener: handleNoTypeArguments(>)
        listener: handleType(T, null)
        listener: endTypeVariable(>, 1, extends, null)
        listener: handleIdentifier(num, typeReference)
        listener: handleNoTypeArguments(,)
        listener: handleType(num, null)
        listener: endTypeVariable(,, 0, extends, null)
        listener: endTypeVariables(<, >)
        listener: handleVoidKeyword(void)
        parseFormalParametersRequiredOpt(>, MemberKind.GeneralizedFunctionType)
          parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
            listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
            listener: endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
        listener: endFunctionType(Function, null)
        ensureIdentifierPotentiallyRecovered(), topLevelVariableDeclaration, false)
          listener: handleIdentifier(f6, topLevelVariableDeclaration)
        parseFieldInitializerOpt(f6, f6, null, null, null, null, DeclarationKind.TopLevel, null)
          listener: handleNoFieldInitializer(;)
        listener: endTopLevelFields(null, null, null, null, null, 1, void, ;)
  listener: endTopLevelDeclaration(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(}, })
          listener: endBlockFunctionBody(0, {, })
        listener: endTopLevelMethod(main, null, })
  listener: endTopLevelDeclaration()
  reportAllErrorTokens(typedef)
  listener: endCompilationUnit(31, )
