Problems reported:

parser/error_recovery/keyword_named_typedefs:1:14: Expected an identifier, but got 'abstract'.
typedef void abstract();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:2:9: Expected an identifier, but got 'abstract'.
typedef abstract = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:3:14: Expected an identifier, but got 'as'.
typedef void as();
             ^^

parser/error_recovery/keyword_named_typedefs:4:9: Expected an identifier, but got 'as'.
typedef as = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:5:14: Expected an identifier, but got 'assert'.
typedef void assert();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:6:9: Expected an identifier, but got 'assert'.
typedef assert = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:11:14: Expected an identifier, but got 'break'.
typedef void break();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:12:9: Expected an identifier, but got 'break'.
typedef break = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:13:14: Expected an identifier, but got 'case'.
typedef void case();
             ^^^^

parser/error_recovery/keyword_named_typedefs:14:9: Expected an identifier, but got 'case'.
typedef case = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:15:14: Expected an identifier, but got 'catch'.
typedef void catch();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:16:9: Expected an identifier, but got 'catch'.
typedef catch = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:17:14: Expected an identifier, but got 'class'.
typedef void class();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:18:9: Expected an identifier, but got 'class'.
typedef class = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:19:14: Expected an identifier, but got 'const'.
typedef void const();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:20:9: Expected an identifier, but got 'const'.
typedef const = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:21:14: Expected an identifier, but got 'continue'.
typedef void continue();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:22:9: Expected an identifier, but got 'continue'.
typedef continue = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:23:14: Expected an identifier, but got 'covariant'.
typedef void covariant();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:24:9: Expected an identifier, but got 'covariant'.
typedef covariant = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:25:14: Expected an identifier, but got 'default'.
typedef void default();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:26:9: Expected an identifier, but got 'default'.
typedef default = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:27:14: Expected an identifier, but got 'deferred'.
typedef void deferred();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:28:9: Expected an identifier, but got 'deferred'.
typedef deferred = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:29:14: Expected an identifier, but got 'do'.
typedef void do();
             ^^

parser/error_recovery/keyword_named_typedefs:30:9: Expected an identifier, but got 'do'.
typedef do = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:31:14: Expected an identifier, but got 'dynamic'.
typedef void dynamic();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:32:9: Expected an identifier, but got 'dynamic'.
typedef dynamic = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:33:14: Expected an identifier, but got 'else'.
typedef void else();
             ^^^^

parser/error_recovery/keyword_named_typedefs:34:9: Expected an identifier, but got 'else'.
typedef else = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:35:14: Expected an identifier, but got 'enum'.
typedef void enum();
             ^^^^

parser/error_recovery/keyword_named_typedefs:36:9: Expected an identifier, but got 'enum'.
typedef enum = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:37:14: Expected an identifier, but got 'export'.
typedef void export();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:38:9: Expected an identifier, but got 'export'.
typedef export = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:39:14: Expected an identifier, but got 'extends'.
typedef void extends();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:40:9: Expected an identifier, but got 'extends'.
typedef extends = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:41:14: Expected an identifier, but got 'extension'.
typedef void extension();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:42:9: Expected an identifier, but got 'extension'.
typedef extension = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:43:14: Expected an identifier, but got 'external'.
typedef void external();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:44:9: Expected an identifier, but got 'external'.
typedef external = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:45:14: Expected an identifier, but got 'factory'.
typedef void factory();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:46:9: Expected an identifier, but got 'factory'.
typedef factory = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:47:14: Expected an identifier, but got 'false'.
typedef void false();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:48:9: Expected an identifier, but got 'false'.
typedef false = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:49:14: Expected an identifier, but got 'final'.
typedef void final();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:50:9: Expected an identifier, but got 'final'.
typedef final = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:51:14: Expected an identifier, but got 'finally'.
typedef void finally();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:52:9: Expected an identifier, but got 'finally'.
typedef finally = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:53:14: Expected an identifier, but got 'for'.
typedef void for();
             ^^^

parser/error_recovery/keyword_named_typedefs:54:9: Expected an identifier, but got 'for'.
typedef for = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:55:14: Expected an identifier, but got 'Function'.
typedef void Function();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:56:9: Expected an identifier, but got 'Function'.
typedef Function = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:57:14: Expected an identifier, but got 'get'.
typedef void get();
             ^^^

parser/error_recovery/keyword_named_typedefs:58:9: Expected an identifier, but got 'get'.
typedef get = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:61:14: Expected an identifier, but got 'if'.
typedef void if();
             ^^

parser/error_recovery/keyword_named_typedefs:62:9: Expected an identifier, but got 'if'.
typedef if = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:63:14: Expected an identifier, but got 'implements'.
typedef void implements();
             ^^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:64:9: Expected an identifier, but got 'implements'.
typedef implements = void Function();
        ^^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:65:14: Expected an identifier, but got 'import'.
typedef void import();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:66:9: Expected an identifier, but got 'import'.
typedef import = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:67:14: Expected an identifier, but got 'in'.
typedef void in();
             ^^

parser/error_recovery/keyword_named_typedefs:68:9: Expected an identifier, but got 'in'.
typedef in = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:71:14: Expected an identifier, but got 'interface'.
typedef void interface();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:72:9: Expected an identifier, but got 'interface'.
typedef interface = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:73:14: Expected an identifier, but got 'is'.
typedef void is();
             ^^

parser/error_recovery/keyword_named_typedefs:74:9: Expected an identifier, but got 'is'.
typedef is = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:75:14: Expected an identifier, but got 'late'.
typedef void late();
             ^^^^

parser/error_recovery/keyword_named_typedefs:76:9: Expected an identifier, but got 'late'.
typedef late = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:77:14: Expected an identifier, but got 'library'.
typedef void library();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:78:9: Expected an identifier, but got 'library'.
typedef library = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:79:14: Expected an identifier, but got 'mixin'.
typedef void mixin();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:80:9: Expected an identifier, but got 'mixin'.
typedef mixin = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:83:14: Expected an identifier, but got 'new'.
typedef void new();
             ^^^

parser/error_recovery/keyword_named_typedefs:84:9: Expected an identifier, but got 'new'.
typedef new = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:85:14: Expected an identifier, but got 'null'.
typedef void null();
             ^^^^

parser/error_recovery/keyword_named_typedefs:86:9: Expected an identifier, but got 'null'.
typedef null = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:91:14: Expected an identifier, but got 'operator'.
typedef void operator();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:92:9: Expected an identifier, but got 'operator'.
typedef operator = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:95:14: Expected an identifier, but got 'part'.
typedef void part();
             ^^^^

parser/error_recovery/keyword_named_typedefs:96:9: Expected an identifier, but got 'part'.
typedef part = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:99:14: Expected an identifier, but got 'required'.
typedef void required();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:100:9: Expected an identifier, but got 'required'.
typedef required = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:101:14: Expected an identifier, but got 'rethrow'.
typedef void rethrow();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:102:9: Expected an identifier, but got 'rethrow'.
typedef rethrow = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:103:14: Expected an identifier, but got 'return'.
typedef void return();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:104:9: Expected an identifier, but got 'return'.
typedef return = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:105:14: Expected an identifier, but got 'set'.
typedef void set();
             ^^^

parser/error_recovery/keyword_named_typedefs:106:9: Expected an identifier, but got 'set'.
typedef set = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:111:14: Expected an identifier, but got 'static'.
typedef void static();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:112:9: Expected an identifier, but got 'static'.
typedef static = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:113:14: Expected an identifier, but got 'super'.
typedef void super();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:114:9: Expected an identifier, but got 'super'.
typedef super = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:115:14: Expected an identifier, but got 'switch'.
typedef void switch();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:116:9: Expected an identifier, but got 'switch'.
typedef switch = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:119:14: Expected an identifier, but got 'this'.
typedef void this();
             ^^^^

parser/error_recovery/keyword_named_typedefs:120:9: Expected an identifier, but got 'this'.
typedef this = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:121:14: Expected an identifier, but got 'throw'.
typedef void throw();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:122:9: Expected an identifier, but got 'throw'.
typedef throw = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:123:14: Expected an identifier, but got 'true'.
typedef void true();
             ^^^^

parser/error_recovery/keyword_named_typedefs:124:9: Expected an identifier, but got 'true'.
typedef true = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:125:14: Expected an identifier, but got 'try'.
typedef void try();
             ^^^

parser/error_recovery/keyword_named_typedefs:126:9: Expected an identifier, but got 'try'.
typedef try = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:127:14: Expected an identifier, but got 'typedef'.
typedef void typedef();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:128:9: Expected an identifier, but got 'typedef'.
typedef typedef = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:129:14: Expected an identifier, but got 'var'.
typedef void var();
             ^^^

parser/error_recovery/keyword_named_typedefs:130:9: Expected an identifier, but got 'var'.
typedef var = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:131:14: Expected an identifier, but got 'void'.
typedef void void();
             ^^^^

parser/error_recovery/keyword_named_typedefs:132:14: Expected an identifier, but got '='.
typedef void = void Function();
             ^

parser/error_recovery/keyword_named_typedefs:132:14: A typedef needs an explicit list of parameters.
typedef void = void Function();
             ^

parser/error_recovery/keyword_named_typedefs:132:14: Expected ';' after this.
typedef void = void Function();
             ^

parser/error_recovery/keyword_named_typedefs:132:14: Expected a declaration, but got '='.
typedef void = void Function();
             ^

parser/error_recovery/keyword_named_typedefs:132:31: Expected a function body or '=>'.
typedef void = void Function();
                              ^

parser/error_recovery/keyword_named_typedefs:133:14: Expected an identifier, but got 'while'.
typedef void while();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:134:9: Expected an identifier, but got 'while'.
typedef while = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:135:14: Expected an identifier, but got 'with'.
typedef void with();
             ^^^^

parser/error_recovery/keyword_named_typedefs:136:9: Expected an identifier, but got 'with'.
typedef with = void Function();
        ^^^^

beginCompilationUnit(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
      handleIdentifier(abstract, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'abstract'., null, {token: abstract}], abstract, abstract)
      handleIdentifier(abstract, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
      handleIdentifier(as, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'as'., null, {token: as}], as, as)
      handleIdentifier(as, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
      handleIdentifier(assert, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'assert'., null, {token: assert}], assert, assert)
      handleIdentifier(assert, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(async, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(async, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(await, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(await, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
      handleIdentifier(break, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'break'., null, {token: break}], break, break)
      handleIdentifier(break, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
      handleIdentifier(case, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'case'., null, {token: case}], case, case)
      handleIdentifier(case, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
      handleIdentifier(catch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'catch'., null, {token: catch}], catch, catch)
      handleIdentifier(catch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
      handleIdentifier(class, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'class'., null, {token: class}], class, class)
      handleIdentifier(class, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
      handleIdentifier(const, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'const'., null, {token: const}], const, const)
      handleIdentifier(const, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
      handleIdentifier(continue, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'continue'., null, {token: continue}], continue, continue)
      handleIdentifier(continue, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
      handleIdentifier(covariant, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'covariant'., null, {token: covariant}], covariant, covariant)
      handleIdentifier(covariant, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
      handleIdentifier(default, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'default'., null, {token: default}], default, default)
      handleIdentifier(default, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
      handleIdentifier(deferred, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'deferred'., null, {token: deferred}], deferred, deferred)
      handleIdentifier(deferred, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
      handleIdentifier(do, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'do'., null, {token: do}], do, do)
      handleIdentifier(do, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
      handleIdentifier(dynamic, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'dynamic'., null, {token: dynamic}], dynamic, dynamic)
      handleIdentifier(dynamic, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
      handleIdentifier(else, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'else'., null, {token: else}], else, else)
      handleIdentifier(else, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
      handleIdentifier(enum, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'enum'., null, {token: enum}], enum, enum)
      handleIdentifier(enum, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
      handleIdentifier(export, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'export'., null, {token: export}], export, export)
      handleIdentifier(export, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
      handleIdentifier(extends, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extends'., null, {token: extends}], extends, extends)
      handleIdentifier(extends, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
      handleIdentifier(extension, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'extension'., null, {token: extension}], extension, extension)
      handleIdentifier(extension, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
      handleIdentifier(external, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'external'., null, {token: external}], external, external)
      handleIdentifier(external, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
      handleIdentifier(factory, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'factory'., null, {token: factory}], factory, factory)
      handleIdentifier(factory, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
      handleIdentifier(false, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'false'., null, {token: false}], false, false)
      handleIdentifier(false, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
      handleIdentifier(final, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'final'., null, {token: final}], final, final)
      handleIdentifier(final, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
      handleIdentifier(finally, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'finally'., null, {token: finally}], finally, finally)
      handleIdentifier(finally, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
      handleIdentifier(for, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'for'., null, {token: for}], for, for)
      handleIdentifier(for, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
      handleIdentifier(Function, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'Function'., null, {token: Function}], Function, Function)
      handleIdentifier(Function, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
      handleIdentifier(get, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'get'., null, {token: get}], get, get)
      handleIdentifier(get, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(hide, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(hide, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
      handleIdentifier(if, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'if'., null, {token: if}], if, if)
      handleIdentifier(if, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
      handleIdentifier(implements, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'implements'., null, {token: implements}], implements, implements)
      handleIdentifier(implements, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
      handleIdentifier(import, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'import'., null, {token: import}], import, import)
      handleIdentifier(import, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
      handleIdentifier(in, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'in'., null, {token: in}], in, in)
      handleIdentifier(in, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(inout, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(inout, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
      handleIdentifier(interface, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'interface'., null, {token: interface}], interface, interface)
      handleIdentifier(interface, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
      handleIdentifier(is, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., null, {token: is}], is, is)
      handleIdentifier(is, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
      handleIdentifier(late, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'late'., null, {token: late}], late, late)
      handleIdentifier(late, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
      handleIdentifier(library, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'library'., null, {token: library}], library, library)
      handleIdentifier(library, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
      handleIdentifier(mixin, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'mixin'., null, {token: mixin}], mixin, mixin)
      handleIdentifier(mixin, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(native, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(native, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
      handleIdentifier(new, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'new'., null, {token: new}], new, new)
      handleIdentifier(new, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
      handleIdentifier(null, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'null'., null, {token: null}], null, null)
      handleIdentifier(null, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(of, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(of, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(on, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(on, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
      handleIdentifier(operator, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'operator'., null, {token: operator}], operator, operator)
      handleIdentifier(operator, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(out, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(out, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
      handleIdentifier(part, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'part'., null, {token: part}], part, part)
      handleIdentifier(part, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(patch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(patch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
      handleIdentifier(required, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'required'., null, {token: required}], required, required)
      handleIdentifier(required, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
      handleIdentifier(rethrow, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'rethrow'., null, {token: rethrow}], rethrow, rethrow)
      handleIdentifier(rethrow, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
      handleIdentifier(return, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'return'., null, {token: return}], return, return)
      handleIdentifier(return, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
      handleIdentifier(set, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'set'., null, {token: set}], set, set)
      handleIdentifier(set, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(show, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(show, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(source, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(source, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
      handleIdentifier(static, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'static'., null, {token: static}], static, static)
      handleIdentifier(static, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
      handleIdentifier(super, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'super'., null, {token: super}], super, super)
      handleIdentifier(super, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
      handleIdentifier(switch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'switch'., null, {token: switch}], switch, switch)
      handleIdentifier(switch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(sync, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(sync, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
      handleIdentifier(this, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'this'., null, {token: this}], this, this)
      handleIdentifier(this, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
      handleIdentifier(throw, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'throw'., null, {token: throw}], throw, throw)
      handleIdentifier(throw, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
      handleIdentifier(true, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'true'., null, {token: true}], true, true)
      handleIdentifier(true, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
      handleIdentifier(try, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'try'., null, {token: try}], try, try)
      handleIdentifier(try, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
      handleIdentifier(typedef, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'typedef'., null, {token: typedef}], typedef, typedef)
      handleIdentifier(typedef, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
      handleIdentifier(var, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'var'., null, {token: var}], var, var)
      handleIdentifier(var, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'void'., null, {token: void}], void, void)
      handleIdentifier(void, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., null, {token: =}], =, =)
      handleIdentifier(, typedefDeclaration)
      handleNoTypeVariables(=)
      handleRecoverableError(MissingTypedefParameters, =, =)
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(=)
  beginMetadataStar(=)
  endMetadataStar(0)
  beginTopLevelMember(=)
    handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {token: =}], =, =)
    handleInvalidTopLevelDeclaration(=)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(=, null)
      handleVoidKeyword(void)
      handleIdentifier(Function, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleRecoverableError(ExpectedBody, ;, ;)
      handleEmptyFunctionBody(;)
    endTopLevelMethod(void, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
      handleIdentifier(while, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'while'., null, {token: while}], while, while)
      handleIdentifier(while, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
      handleIdentifier(with, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'with'., null, {token: with}], with, with)
      handleIdentifier(with, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleVoidKeyword(void)
      handleIdentifier(yield, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endFunctionTypeAlias(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginFunctionTypeAlias(typedef)
      handleIdentifier(yield, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endFunctionTypeAlias(typedef, =, ;)
  endTopLevelDeclaration()
endCompilationUnit(140, )
