Problems reported:

parser/error_recovery/keyword_named_typedefs:1:14: 'abstract' can't be used as an identifier because it's a keyword.
typedef void abstract();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:2:9: 'abstract' can't be used as an identifier because it's a keyword.
typedef abstract = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:3:14: 'as' can't be used as an identifier because it's a keyword.
typedef void as();
             ^^

parser/error_recovery/keyword_named_typedefs:4:9: 'as' can't be used as an identifier because it's a keyword.
typedef as = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:5:14: 'assert' can't be used as an identifier because it's a keyword.
typedef void assert();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:6:9: 'assert' can't be used as an identifier because it's a keyword.
typedef assert = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:11:14: 'break' can't be used as an identifier because it's a keyword.
typedef void break();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:12:9: 'break' can't be used as an identifier because it's a keyword.
typedef break = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:13:14: 'case' can't be used as an identifier because it's a keyword.
typedef void case();
             ^^^^

parser/error_recovery/keyword_named_typedefs:14:9: 'case' can't be used as an identifier because it's a keyword.
typedef case = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:15:14: 'catch' can't be used as an identifier because it's a keyword.
typedef void catch();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:16:9: 'catch' can't be used as an identifier because it's a keyword.
typedef catch = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:17:14: 'class' can't be used as an identifier because it's a keyword.
typedef void class();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:18:9: 'class' can't be used as an identifier because it's a keyword.
typedef class = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:19:14: 'const' can't be used as an identifier because it's a keyword.
typedef void const();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:20:9: 'const' can't be used as an identifier because it's a keyword.
typedef const = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:21:14: 'continue' can't be used as an identifier because it's a keyword.
typedef void continue();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:22:9: 'continue' can't be used as an identifier because it's a keyword.
typedef continue = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:23:14: 'covariant' can't be used as an identifier because it's a keyword.
typedef void covariant();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:24:9: 'covariant' can't be used as an identifier because it's a keyword.
typedef covariant = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:25:14: 'default' can't be used as an identifier because it's a keyword.
typedef void default();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:26:9: 'default' can't be used as an identifier because it's a keyword.
typedef default = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:27:14: 'deferred' can't be used as an identifier because it's a keyword.
typedef void deferred();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:28:9: 'deferred' can't be used as an identifier because it's a keyword.
typedef deferred = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:29:14: 'do' can't be used as an identifier because it's a keyword.
typedef void do();
             ^^

parser/error_recovery/keyword_named_typedefs:30:9: 'do' can't be used as an identifier because it's a keyword.
typedef do = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:31:14: 'dynamic' can't be used as an identifier because it's a keyword.
typedef void dynamic();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:32:9: 'dynamic' can't be used as an identifier because it's a keyword.
typedef dynamic = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:33:14: 'else' can't be used as an identifier because it's a keyword.
typedef void else();
             ^^^^

parser/error_recovery/keyword_named_typedefs:34:9: 'else' can't be used as an identifier because it's a keyword.
typedef else = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:35:14: 'enum' can't be used as an identifier because it's a keyword.
typedef void enum();
             ^^^^

parser/error_recovery/keyword_named_typedefs:36:9: 'enum' can't be used as an identifier because it's a keyword.
typedef enum = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:37:14: 'export' can't be used as an identifier because it's a keyword.
typedef void export();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:38:9: 'export' can't be used as an identifier because it's a keyword.
typedef export = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:39:14: 'extends' can't be used as an identifier because it's a keyword.
typedef void extends();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:40:9: 'extends' can't be used as an identifier because it's a keyword.
typedef extends = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:41:14: 'extension' can't be used as an identifier because it's a keyword.
typedef void extension();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:42:9: 'extension' can't be used as an identifier because it's a keyword.
typedef extension = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:43:14: 'external' can't be used as an identifier because it's a keyword.
typedef void external();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:44:9: 'external' can't be used as an identifier because it's a keyword.
typedef external = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:45:14: 'factory' can't be used as an identifier because it's a keyword.
typedef void factory();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:46:9: 'factory' can't be used as an identifier because it's a keyword.
typedef factory = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:47:14: 'false' can't be used as an identifier because it's a keyword.
typedef void false();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:48:9: 'false' can't be used as an identifier because it's a keyword.
typedef false = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:49:14: 'final' can't be used as an identifier because it's a keyword.
typedef void final();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:50:9: 'final' can't be used as an identifier because it's a keyword.
typedef final = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:51:14: 'finally' can't be used as an identifier because it's a keyword.
typedef void finally();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:52:9: 'finally' can't be used as an identifier because it's a keyword.
typedef finally = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:53:14: 'for' can't be used as an identifier because it's a keyword.
typedef void for();
             ^^^

parser/error_recovery/keyword_named_typedefs:54:9: 'for' can't be used as an identifier because it's a keyword.
typedef for = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:55:14: 'Function' can't be used as an identifier because it's a keyword.
typedef void Function();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:56:9: 'Function' can't be used as an identifier because it's a keyword.
typedef Function = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:57:14: 'get' can't be used as an identifier because it's a keyword.
typedef void get();
             ^^^

parser/error_recovery/keyword_named_typedefs:58:9: 'get' can't be used as an identifier because it's a keyword.
typedef get = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:61:14: 'if' can't be used as an identifier because it's a keyword.
typedef void if();
             ^^

parser/error_recovery/keyword_named_typedefs:62:9: 'if' can't be used as an identifier because it's a keyword.
typedef if = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:63:14: 'implements' can't be used as an identifier because it's a keyword.
typedef void implements();
             ^^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:64:9: 'implements' can't be used as an identifier because it's a keyword.
typedef implements = void Function();
        ^^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:65:14: 'import' can't be used as an identifier because it's a keyword.
typedef void import();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:66:9: 'import' can't be used as an identifier because it's a keyword.
typedef import = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:67:14: 'in' can't be used as an identifier because it's a keyword.
typedef void in();
             ^^

parser/error_recovery/keyword_named_typedefs:68:9: 'in' can't be used as an identifier because it's a keyword.
typedef in = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:71:14: 'interface' can't be used as an identifier because it's a keyword.
typedef void interface();
             ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:72:9: 'interface' can't be used as an identifier because it's a keyword.
typedef interface = void Function();
        ^^^^^^^^^

parser/error_recovery/keyword_named_typedefs:73:14: 'is' can't be used as an identifier because it's a keyword.
typedef void is();
             ^^

parser/error_recovery/keyword_named_typedefs:74:9: 'is' can't be used as an identifier because it's a keyword.
typedef is = void Function();
        ^^

parser/error_recovery/keyword_named_typedefs:75:14: 'late' can't be used as an identifier because it's a keyword.
typedef void late();
             ^^^^

parser/error_recovery/keyword_named_typedefs:76:9: 'late' can't be used as an identifier because it's a keyword.
typedef late = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:77:14: 'library' can't be used as an identifier because it's a keyword.
typedef void library();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:78:9: 'library' can't be used as an identifier because it's a keyword.
typedef library = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:79:14: 'mixin' can't be used as an identifier because it's a keyword.
typedef void mixin();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:80:9: 'mixin' can't be used as an identifier because it's a keyword.
typedef mixin = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:83:14: 'new' can't be used as an identifier because it's a keyword.
typedef void new();
             ^^^

parser/error_recovery/keyword_named_typedefs:84:9: 'new' can't be used as an identifier because it's a keyword.
typedef new = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:85:14: 'null' can't be used as an identifier because it's a keyword.
typedef void null();
             ^^^^

parser/error_recovery/keyword_named_typedefs:86:9: 'null' can't be used as an identifier because it's a keyword.
typedef null = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:91:14: 'operator' can't be used as an identifier because it's a keyword.
typedef void operator();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:92:9: 'operator' can't be used as an identifier because it's a keyword.
typedef operator = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:95:14: 'part' can't be used as an identifier because it's a keyword.
typedef void part();
             ^^^^

parser/error_recovery/keyword_named_typedefs:96:9: 'part' can't be used as an identifier because it's a keyword.
typedef part = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:99:14: 'required' can't be used as an identifier because it's a keyword.
typedef void required();
             ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:100:9: 'required' can't be used as an identifier because it's a keyword.
typedef required = void Function();
        ^^^^^^^^

parser/error_recovery/keyword_named_typedefs:101:14: 'rethrow' can't be used as an identifier because it's a keyword.
typedef void rethrow();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:102:9: 'rethrow' can't be used as an identifier because it's a keyword.
typedef rethrow = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:103:14: 'return' can't be used as an identifier because it's a keyword.
typedef void return();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:104:9: 'return' can't be used as an identifier because it's a keyword.
typedef return = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:105:14: 'set' can't be used as an identifier because it's a keyword.
typedef void set();
             ^^^

parser/error_recovery/keyword_named_typedefs:106:9: 'set' can't be used as an identifier because it's a keyword.
typedef set = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:111:14: 'static' can't be used as an identifier because it's a keyword.
typedef void static();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:112:9: 'static' can't be used as an identifier because it's a keyword.
typedef static = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:113:14: 'super' can't be used as an identifier because it's a keyword.
typedef void super();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:114:9: 'super' can't be used as an identifier because it's a keyword.
typedef super = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:115:14: 'switch' can't be used as an identifier because it's a keyword.
typedef void switch();
             ^^^^^^

parser/error_recovery/keyword_named_typedefs:116:9: 'switch' can't be used as an identifier because it's a keyword.
typedef switch = void Function();
        ^^^^^^

parser/error_recovery/keyword_named_typedefs:119:14: 'this' can't be used as an identifier because it's a keyword.
typedef void this();
             ^^^^

parser/error_recovery/keyword_named_typedefs:120:9: 'this' can't be used as an identifier because it's a keyword.
typedef this = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:121:14: 'throw' can't be used as an identifier because it's a keyword.
typedef void throw();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:122:9: 'throw' can't be used as an identifier because it's a keyword.
typedef throw = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:123:14: 'true' can't be used as an identifier because it's a keyword.
typedef void true();
             ^^^^

parser/error_recovery/keyword_named_typedefs:124:9: 'true' can't be used as an identifier because it's a keyword.
typedef true = void Function();
        ^^^^

parser/error_recovery/keyword_named_typedefs:125:14: 'try' can't be used as an identifier because it's a keyword.
typedef void try();
             ^^^

parser/error_recovery/keyword_named_typedefs:126:9: 'try' can't be used as an identifier because it's a keyword.
typedef try = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:127:14: 'typedef' can't be used as an identifier because it's a keyword.
typedef void typedef();
             ^^^^^^^

parser/error_recovery/keyword_named_typedefs:128:9: 'typedef' can't be used as an identifier because it's a keyword.
typedef typedef = void Function();
        ^^^^^^^

parser/error_recovery/keyword_named_typedefs:129:14: 'var' can't be used as an identifier because it's a keyword.
typedef void var();
             ^^^

parser/error_recovery/keyword_named_typedefs:130:9: 'var' can't be used as an identifier because it's a keyword.
typedef var = void Function();
        ^^^

parser/error_recovery/keyword_named_typedefs:131:14: 'void' can't be used as an identifier because it's a keyword.
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: 'while' can't be used as an identifier because it's a keyword.
typedef void while();
             ^^^^^

parser/error_recovery/keyword_named_typedefs:134:9: 'while' can't be used as an identifier because it's a keyword.
typedef while = void Function();
        ^^^^^

parser/error_recovery/keyword_named_typedefs:135:14: 'with' can't be used as an identifier because it's a keyword.
typedef void with();
             ^^^^

parser/error_recovery/keyword_named_typedefs:136:9: 'with' can't be used as an identifier because it's a keyword.
typedef with = void Function();
        ^^^^

beginCompilationUnit(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'abstract' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: abstract}], abstract, abstract)
      handleIdentifier(abstract, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'abstract' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: abstract}], abstract, abstract)
      handleIdentifier(abstract, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'as' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: as}], as, as)
      handleIdentifier(as, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'as' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: as}], as, as)
      handleIdentifier(as, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
      handleIdentifier(assert, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
      handleIdentifier(assert, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(async, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(async, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(await, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(await, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
      handleIdentifier(break, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
      handleIdentifier(break, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
      handleIdentifier(case, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
      handleIdentifier(case, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
      handleIdentifier(catch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
      handleIdentifier(catch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
      handleIdentifier(class, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
      handleIdentifier(class, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
      handleIdentifier(const, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
      handleIdentifier(const, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
      handleIdentifier(continue, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
      handleIdentifier(continue, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'covariant' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: covariant}], covariant, covariant)
      handleIdentifier(covariant, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'covariant' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: covariant}], covariant, covariant)
      handleIdentifier(covariant, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
      handleIdentifier(default, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
      handleIdentifier(default, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'deferred' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: deferred}], deferred, deferred)
      handleIdentifier(deferred, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'deferred' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: deferred}], deferred, deferred)
      handleIdentifier(deferred, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
      handleIdentifier(do, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
      handleIdentifier(do, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'dynamic' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: dynamic}], dynamic, dynamic)
      handleIdentifier(dynamic, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'dynamic' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: dynamic}], dynamic, dynamic)
      handleIdentifier(dynamic, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
      handleIdentifier(else, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
      handleIdentifier(else, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
      handleIdentifier(enum, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
      handleIdentifier(enum, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'export' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: export}], export, export)
      handleIdentifier(export, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'export' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: export}], export, export)
      handleIdentifier(export, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
      handleIdentifier(extends, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
      handleIdentifier(extends, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extension' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extension}], extension, extension)
      handleIdentifier(extension, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extension' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extension}], extension, extension)
      handleIdentifier(extension, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'external' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: external}], external, external)
      handleIdentifier(external, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'external' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: external}], external, external)
      handleIdentifier(external, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'factory' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: factory}], factory, factory)
      handleIdentifier(factory, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'factory' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: factory}], factory, factory)
      handleIdentifier(factory, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
      handleIdentifier(false, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
      handleIdentifier(false, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
      handleIdentifier(final, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
      handleIdentifier(final, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
      handleIdentifier(finally, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
      handleIdentifier(finally, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
      handleIdentifier(for, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
      handleIdentifier(for, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'Function' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: Function}], Function, Function)
      handleIdentifier(Function, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'get' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: get}], get, get)
      handleIdentifier(get, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'get' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: get}], get, get)
      handleIdentifier(get, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(hide, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(hide, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
      handleIdentifier(if, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
      handleIdentifier(if, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'implements' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: implements}], implements, implements)
      handleIdentifier(implements, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'implements' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: implements}], implements, implements)
      handleIdentifier(implements, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'import' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: import}], import, import)
      handleIdentifier(import, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'import' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: import}], import, import)
      handleIdentifier(import, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
      handleIdentifier(in, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
      handleIdentifier(in, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(inout, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(inout, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'interface' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: interface}], interface, interface)
      handleIdentifier(interface, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'interface' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: interface}], interface, interface)
      handleIdentifier(interface, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
      handleIdentifier(is, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
      handleIdentifier(is, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'late' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: late}], late, late)
      handleIdentifier(late, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'late' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: late}], late, late)
      handleIdentifier(late, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'library' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: library}], library, library)
      handleIdentifier(library, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'library' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: library}], library, library)
      handleIdentifier(library, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'mixin' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: mixin}], mixin, mixin)
      handleIdentifier(mixin, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'mixin' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: mixin}], mixin, mixin)
      handleIdentifier(mixin, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(native, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(native, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
      handleIdentifier(new, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
      handleIdentifier(new, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
      handleIdentifier(null, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
      handleIdentifier(null, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(of, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(of, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(on, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(on, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'operator' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: operator}], operator, operator)
      handleIdentifier(operator, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'operator' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: operator}], operator, operator)
      handleIdentifier(operator, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(out, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(out, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'part' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: part}], part, part)
      handleIdentifier(part, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'part' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: part}], part, part)
      handleIdentifier(part, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(patch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(patch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'required' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: required}], required, required)
      handleIdentifier(required, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'required' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: required}], required, required)
      handleIdentifier(required, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
      handleIdentifier(rethrow, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
      handleIdentifier(rethrow, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
      handleIdentifier(return, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
      handleIdentifier(return, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'set' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: set}], set, set)
      handleIdentifier(set, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'set' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: set}], set, set)
      handleIdentifier(set, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(show, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(show, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(source, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(source, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'static' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: static}], static, static)
      handleIdentifier(static, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'static' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: static}], static, static)
      handleIdentifier(static, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
      handleIdentifier(super, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
      handleIdentifier(super, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
      handleIdentifier(switch, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
      handleIdentifier(switch, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(sync, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(sync, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
      handleIdentifier(this, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
      handleIdentifier(this, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
      handleIdentifier(throw, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
      handleIdentifier(throw, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
      handleIdentifier(true, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
      handleIdentifier(true, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
      handleIdentifier(try, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
      handleIdentifier(try, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'typedef' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: typedef}], typedef, typedef)
      handleIdentifier(typedef, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'typedef' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: typedef}], typedef, typedef)
      handleIdentifier(typedef, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
      handleIdentifier(var, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
      handleIdentifier(var, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
      handleIdentifier(void, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '='., Try inserting an identifier before '='., {lexeme: =}], =, =)
      handleIdentifier(, typedefDeclaration)
      handleNoTypeVariables(=)
      handleRecoverableError(MissingTypedefParameters, =, =)
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
      handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], =, =)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(=)
  beginMetadataStar(=)
  endMetadataStar(0)
  beginTopLevelMember(=)
    handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '='., null, {lexeme: =}], =, =)
    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)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
      handleIdentifier(while, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
      handleIdentifier(while, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
      handleIdentifier(with, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
      handleIdentifier(with, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleVoidKeyword(void)
      handleIdentifier(yield, typedefDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.FunctionTypeAlias)
      endFormalParameters(0, (, ), MemberKind.FunctionTypeAlias)
    endTypedef(typedef, null, ;)
  endTopLevelDeclaration(typedef)
  beginMetadataStar(typedef)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(typedef)
    beginTypedef(typedef)
      handleIdentifier(yield, typedefDeclaration)
      handleNoTypeVariables(=)
      beginFunctionType(void)
        handleNoTypeVariables(()
        handleVoidKeyword(void)
        beginFormalParameters((, MemberKind.GeneralizedFunctionType)
        endFormalParameters(0, (, ), MemberKind.GeneralizedFunctionType)
      endFunctionType(Function, null)
    endTypedef(typedef, =, ;)
  endTopLevelDeclaration()
endCompilationUnit(140, )
