xbintsc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/bin/xbintsc.js +26 -0
  4. package/dist/src/ast/factory.d.ts +11 -0
  5. package/dist/src/ast/factory.js +36 -0
  6. package/dist/src/ast/factory.js.map +1 -0
  7. package/dist/src/ast/nodes.d.ts +848 -0
  8. package/dist/src/ast/nodes.js +247 -0
  9. package/dist/src/ast/nodes.js.map +1 -0
  10. package/dist/src/ast/visitor.d.ts +18 -0
  11. package/dist/src/ast/visitor.js +52 -0
  12. package/dist/src/ast/visitor.js.map +1 -0
  13. package/dist/src/binder/binder.d.ts +82 -0
  14. package/dist/src/binder/binder.js +443 -0
  15. package/dist/src/binder/binder.js.map +1 -0
  16. package/dist/src/cli/main.d.ts +16 -0
  17. package/dist/src/cli/main.js +191 -0
  18. package/dist/src/cli/main.js.map +1 -0
  19. package/dist/src/codegen/llvm.d.ts +31 -0
  20. package/dist/src/codegen/llvm.js +1178 -0
  21. package/dist/src/codegen/llvm.js.map +1 -0
  22. package/dist/src/codegen/values.d.ts +23 -0
  23. package/dist/src/codegen/values.js +32 -0
  24. package/dist/src/codegen/values.js.map +1 -0
  25. package/dist/src/diagnostics/diagnostic.d.ts +69 -0
  26. package/dist/src/diagnostics/diagnostic.js +104 -0
  27. package/dist/src/diagnostics/diagnostic.js.map +1 -0
  28. package/dist/src/diagnostics/source.d.ts +43 -0
  29. package/dist/src/diagnostics/source.js +73 -0
  30. package/dist/src/diagnostics/source.js.map +1 -0
  31. package/dist/src/driver/cache.d.ts +37 -0
  32. package/dist/src/driver/cache.js +82 -0
  33. package/dist/src/driver/cache.js.map +1 -0
  34. package/dist/src/driver/compiler.d.ts +41 -0
  35. package/dist/src/driver/compiler.js +128 -0
  36. package/dist/src/driver/compiler.js.map +1 -0
  37. package/dist/src/driver/index.d.ts +4 -0
  38. package/dist/src/driver/index.js +5 -0
  39. package/dist/src/driver/index.js.map +1 -0
  40. package/dist/src/driver/paths.d.ts +4 -0
  41. package/dist/src/driver/paths.js +22 -0
  42. package/dist/src/driver/paths.js.map +1 -0
  43. package/dist/src/driver/toolchain.d.ts +43 -0
  44. package/dist/src/driver/toolchain.js +76 -0
  45. package/dist/src/driver/toolchain.js.map +1 -0
  46. package/dist/src/extensions/node.d.ts +9 -0
  47. package/dist/src/extensions/node.js +20 -0
  48. package/dist/src/extensions/node.js.map +1 -0
  49. package/dist/src/extensions/registry.d.ts +45 -0
  50. package/dist/src/extensions/registry.js +76 -0
  51. package/dist/src/extensions/registry.js.map +1 -0
  52. package/dist/src/index.d.ts +18 -0
  53. package/dist/src/index.js +19 -0
  54. package/dist/src/index.js.map +1 -0
  55. package/dist/src/lexer/scanner.d.ts +48 -0
  56. package/dist/src/lexer/scanner.js +650 -0
  57. package/dist/src/lexer/scanner.js.map +1 -0
  58. package/dist/src/lexer/token.d.ts +170 -0
  59. package/dist/src/lexer/token.js +250 -0
  60. package/dist/src/lexer/token.js.map +1 -0
  61. package/dist/src/parser/parser.d.ts +127 -0
  62. package/dist/src/parser/parser.js +2334 -0
  63. package/dist/src/parser/parser.js.map +1 -0
  64. package/dist/tests/binder/binder.test.d.ts +1 -0
  65. package/dist/tests/binder/binder.test.js +89 -0
  66. package/dist/tests/binder/binder.test.js.map +1 -0
  67. package/dist/tests/cli/main.test.d.ts +1 -0
  68. package/dist/tests/cli/main.test.js +68 -0
  69. package/dist/tests/cli/main.test.js.map +1 -0
  70. package/dist/tests/cli/process.test.d.ts +9 -0
  71. package/dist/tests/cli/process.test.js +57 -0
  72. package/dist/tests/cli/process.test.js.map +1 -0
  73. package/dist/tests/codegen/llvm.test.d.ts +1 -0
  74. package/dist/tests/codegen/llvm.test.js +93 -0
  75. package/dist/tests/codegen/llvm.test.js.map +1 -0
  76. package/dist/tests/driver/cache.test.d.ts +1 -0
  77. package/dist/tests/driver/cache.test.js +66 -0
  78. package/dist/tests/driver/cache.test.js.map +1 -0
  79. package/dist/tests/driver/compiler.test.d.ts +1 -0
  80. package/dist/tests/driver/compiler.test.js +80 -0
  81. package/dist/tests/driver/compiler.test.js.map +1 -0
  82. package/dist/tests/driver/toolchain.test.d.ts +1 -0
  83. package/dist/tests/driver/toolchain.test.js +60 -0
  84. package/dist/tests/driver/toolchain.test.js.map +1 -0
  85. package/dist/tests/e2e/compile.test.d.ts +5 -0
  86. package/dist/tests/e2e/compile.test.js +93 -0
  87. package/dist/tests/e2e/compile.test.js.map +1 -0
  88. package/dist/tests/extensions/registry.test.d.ts +1 -0
  89. package/dist/tests/extensions/registry.test.js +47 -0
  90. package/dist/tests/extensions/registry.test.js.map +1 -0
  91. package/dist/tests/helpers.d.ts +23 -0
  92. package/dist/tests/helpers.js +41 -0
  93. package/dist/tests/helpers.js.map +1 -0
  94. package/dist/tests/lexer/scanner.test.d.ts +1 -0
  95. package/dist/tests/lexer/scanner.test.js +95 -0
  96. package/dist/tests/lexer/scanner.test.js.map +1 -0
  97. package/dist/tests/parser/parser.test.d.ts +1 -0
  98. package/dist/tests/parser/parser.test.js +137 -0
  99. package/dist/tests/parser/parser.test.js.map +1 -0
  100. package/package.json +49 -0
  101. package/runtime/ext_node.c +42 -0
  102. package/runtime/rt.h +177 -0
  103. package/runtime/xt_runtime.c +682 -0
  104. package/scripts/build-runtime.mjs +34 -0
  105. package/src/ast/factory.ts +37 -0
  106. package/src/ast/nodes.ts +1111 -0
  107. package/src/ast/visitor.ts +60 -0
  108. package/src/binder/binder.ts +549 -0
  109. package/src/cli/main.ts +210 -0
  110. package/src/codegen/llvm.ts +1324 -0
  111. package/src/codegen/values.ts +36 -0
  112. package/src/diagnostics/diagnostic.ts +132 -0
  113. package/src/diagnostics/source.ts +97 -0
  114. package/src/driver/cache.ts +96 -0
  115. package/src/driver/compiler.ts +197 -0
  116. package/src/driver/index.ts +4 -0
  117. package/src/driver/paths.ts +24 -0
  118. package/src/driver/toolchain.ts +103 -0
  119. package/src/extensions/node.ts +23 -0
  120. package/src/extensions/registry.ts +101 -0
  121. package/src/index.ts +33 -0
  122. package/src/lexer/scanner.ts +650 -0
  123. package/src/lexer/token.ts +266 -0
  124. package/src/parser/parser.ts +2396 -0
@@ -0,0 +1,1111 @@
1
+ /**
2
+ * The xbintsc abstract syntax tree.
3
+ *
4
+ * The AST is a faithful, lossless-enough representation of the TypeScript
5
+ * source. Nodes are discriminated unions keyed by `kind` so the binder, checker
6
+ * and code generator can switch exhaustively over them. Every node carries a
7
+ * source range (`start`/`end` offsets) which the diagnostics layer maps back to
8
+ * line/column, and which the incremental cache uses to detect changes.
9
+ */
10
+
11
+ import type { Token } from "../lexer/token.js";
12
+
13
+ export interface Range {
14
+ /** Inclusive start offset (UTF-16 code units). */
15
+ readonly start: number;
16
+ /** Exclusive end offset. */
17
+ readonly end: number;
18
+ }
19
+
20
+ export interface Node extends Range {
21
+ readonly kind: SyntaxKind;
22
+ }
23
+
24
+ export const enum SyntaxKind {
25
+ // Markers
26
+ Unknown = 0,
27
+ EndOfFileToken = 1,
28
+ SourceFile = 300,
29
+ QualifiedName = 301,
30
+ ExpressionWithTypeArguments = 302,
31
+ ImportType = 303,
32
+
33
+ // Trivia-ish
34
+ Identifier = 2,
35
+ PrivateIdentifier = 3,
36
+
37
+ // Literals
38
+ NumericLiteral = 4,
39
+ BigIntLiteral = 5,
40
+ StringLiteral = 6,
41
+ NoSubstitutionTemplateLiteral = 7,
42
+ TemplateLiteral = 8,
43
+ TemplateSpan = 9,
44
+ RegularExpressionLiteral = 10,
45
+ TrueKeyword = 11,
46
+ FalseKeyword = 12,
47
+ NullKeyword = 13,
48
+ UndefinedKeyword = 14,
49
+ ThisKeyword = 15,
50
+
51
+ // Expressions
52
+ ArrayLiteralExpression = 20,
53
+ ObjectLiteralExpression = 21,
54
+ PropertyAssignment = 22,
55
+ ShorthandPropertyAssignment = 23,
56
+ SpreadElement = 24,
57
+ FunctionExpression = 25,
58
+ ArrowFunction = 26,
59
+ ClassExpression = 27,
60
+ CallExpression = 28,
61
+ NewExpression = 29,
62
+ PropertyAccessExpression = 30,
63
+ ElementAccessExpression = 31,
64
+ ParenthesizedExpression = 32,
65
+ PrefixUnaryExpression = 33,
66
+ PostfixUnaryExpression = 34,
67
+ BinaryExpression = 35,
68
+ ConditionalExpression = 36,
69
+ AsExpression = 37,
70
+ SatisfiesExpression = 38,
71
+ NonNullExpression = 39,
72
+ TypeOfExpression = 40,
73
+ VoidExpression = 41,
74
+ DeleteExpression = 42,
75
+ AwaitExpression = 43,
76
+ YieldExpression = 44,
77
+ TaggedTemplateExpression = 45,
78
+
79
+ // Statements
80
+ ExpressionStatement = 60,
81
+ Block = 61,
82
+ EmptyStatement = 62,
83
+ DebuggerStatement = 63,
84
+ VariableStatement = 64,
85
+ VariableDeclarationList = 65,
86
+ VariableDeclaration = 66,
87
+ IfStatement = 67,
88
+ WhileStatement = 68,
89
+ DoStatement = 69,
90
+ ForStatement = 70,
91
+ ForOfStatement = 71,
92
+ ForInStatement = 72,
93
+ ReturnStatement = 73,
94
+ BreakStatement = 74,
95
+ ContinueStatement = 75,
96
+ ThrowStatement = 76,
97
+ TryStatement = 77,
98
+ CatchClause = 78,
99
+ SwitchStatement = 79,
100
+ CaseClause = 80,
101
+ DefaultClause = 81,
102
+ LabeledStatement = 82,
103
+
104
+ // Declarations
105
+ FunctionDeclaration = 100,
106
+ ClassDeclaration = 101,
107
+ InterfaceDeclaration = 102,
108
+ TypeAliasDeclaration = 103,
109
+ EnumDeclaration = 104,
110
+ EnumMember = 105,
111
+ ModuleDeclaration = 106,
112
+ Parameter = 107,
113
+ TypeParameterDeclaration = 108,
114
+ PropertyDeclaration = 109,
115
+ MethodDeclaration = 110,
116
+ ConstructorDeclaration = 111,
117
+ HeritageClause = 112,
118
+ ImportDeclaration = 113,
119
+ ImportClause = 114,
120
+ NamedImports = 115,
121
+ ImportSpecifier = 116,
122
+ NamespaceImport = 117,
123
+ ExportDeclaration = 118,
124
+ ExportAssignment = 119,
125
+ NamedExports = 120,
126
+ ExportSpecifier = 121,
127
+
128
+ // Types
129
+ TypeReference = 200,
130
+ TypePredicate = 201,
131
+ AnyKeywordType = 202,
132
+ UnknownKeywordType = 203,
133
+ NumberKeywordType = 204,
134
+ BigIntKeywordType = 205,
135
+ StringKeywordType = 206,
136
+ BooleanKeywordType = 207,
137
+ SymbolKeywordType = 208,
138
+ VoidKeywordType = 209,
139
+ UndefinedKeywordType = 210,
140
+ NullKeywordType = 211,
141
+ NeverKeywordType = 212,
142
+ ObjectKeywordType = 213,
143
+ ThisKeywordType = 214,
144
+ LiteralType = 215,
145
+ ArrayType = 216,
146
+ TupleType = 217,
147
+ UnionType = 218,
148
+ IntersectionType = 219,
149
+ FunctionType = 220,
150
+ TypeLiteral = 221,
151
+ PropertySignature = 222,
152
+ MethodSignature = 223,
153
+ IndexSignature = 224,
154
+ ParenthesizedType = 225,
155
+ TypeQuery = 226,
156
+ IndexedAccessType = 227,
157
+ TypeOperator = 228,
158
+ MappedType = 229,
159
+ ConditionalType = 230,
160
+ InferType = 231,
161
+ OptionalType = 232,
162
+ RestType = 233,
163
+ }
164
+
165
+ export const enum NodeFlags {
166
+ None = 0,
167
+ Let = 1 << 0,
168
+ Const = 1 << 1,
169
+ Var = 1 << 2,
170
+ Exported = 1 << 3,
171
+ Default = 1 << 4,
172
+ Declare = 1 << 5,
173
+ Async = 1 << 6,
174
+ Generator = 1 << 7,
175
+ Ambient = 1 << 8,
176
+ Readonly = 1 << 9,
177
+ Abstract = 1 << 10,
178
+ Optional = 1 << 11,
179
+ }
180
+
181
+ export const enum ModifierKind {
182
+ Export = "export",
183
+ Default = "default",
184
+ Declare = "declare",
185
+ Abstract = "abstract",
186
+ Public = "public",
187
+ Private = "private",
188
+ Protected = "protected",
189
+ Static = "static",
190
+ Readonly = "readonly",
191
+ Async = "async",
192
+ }
193
+
194
+ export interface Modifier extends Node {
195
+ readonly kind: SyntaxKind.Unknown;
196
+ readonly modifierKind: ModifierKind;
197
+ }
198
+
199
+ // ---------------------------------------------------------------------------
200
+ // Base node shapes
201
+ // ---------------------------------------------------------------------------
202
+
203
+ export type Expression =
204
+ | Identifier
205
+ | PrivateIdentifier
206
+ | NumericLiteral
207
+ | BigIntLiteral
208
+ | StringLiteral
209
+ | NoSubstitutionTemplateLiteral
210
+ | TemplateLiteral
211
+ | RegularExpressionLiteral
212
+ | BooleanLiteral
213
+ | NullLiteral
214
+ | UndefinedLiteral
215
+ | ThisExpression
216
+ | ArrayLiteralExpression
217
+ | ObjectLiteralExpression
218
+ | FunctionExpression
219
+ | ArrowFunction
220
+ | ClassExpression
221
+ | CallExpression
222
+ | NewExpression
223
+ | PropertyAccessExpression
224
+ | ElementAccessExpression
225
+ | ParenthesizedExpression
226
+ | PrefixUnaryExpression
227
+ | PostfixUnaryExpression
228
+ | BinaryExpression
229
+ | ConditionalExpression
230
+ | AsExpression
231
+ | SatisfiesExpression
232
+ | NonNullExpression
233
+ | TypeOfExpression
234
+ | VoidExpression
235
+ | DeleteExpression
236
+ | AwaitExpression
237
+ | YieldExpression
238
+ | TaggedTemplateExpression
239
+ | SpreadElement;
240
+
241
+ export type Statement =
242
+ | ExpressionStatement
243
+ | Block
244
+ | EmptyStatement
245
+ | DebuggerStatement
246
+ | VariableStatement
247
+ | IfStatement
248
+ | WhileStatement
249
+ | DoStatement
250
+ | ForStatement
251
+ | ForOfStatement
252
+ | ForInStatement
253
+ | ReturnStatement
254
+ | BreakStatement
255
+ | ContinueStatement
256
+ | ThrowStatement
257
+ | TryStatement
258
+ | SwitchStatement
259
+ | LabeledStatement
260
+ | FunctionDeclaration
261
+ | ClassDeclaration
262
+ | InterfaceDeclaration
263
+ | TypeAliasDeclaration
264
+ | EnumDeclaration
265
+ | ModuleDeclaration
266
+ | ImportDeclaration
267
+ | ExportDeclaration
268
+ | ExportAssignment;
269
+
270
+ export type TypeNode =
271
+ | TypeReference
272
+ | TypePredicate
273
+ | KeywordTypeNode
274
+ | LiteralTypeNode
275
+ | ArrayTypeNode
276
+ | TupleTypeNode
277
+ | UnionTypeNode
278
+ | IntersectionTypeNode
279
+ | FunctionTypeNode
280
+ | TypeLiteralNode
281
+ | ParenthesizedTypeNode
282
+ | TypeQueryNode
283
+ | IndexedAccessTypeNode
284
+ | TypeOperatorNode
285
+ | MappedTypeNode
286
+ | ConditionalTypeNode
287
+ | InferTypeNode
288
+ | OptionalTypeNode
289
+ | RestTypeNode;
290
+
291
+ export interface SourceFileNode extends Node {
292
+ readonly kind: SyntaxKind.SourceFile;
293
+ readonly statements: Statement[];
294
+ readonly fileName: string;
295
+ readonly text: string;
296
+ }
297
+
298
+ // ---------------------------------------------------------------------------
299
+ // Identifiers and literals
300
+ // ---------------------------------------------------------------------------
301
+
302
+ export interface Identifier extends Node {
303
+ readonly kind: SyntaxKind.Identifier;
304
+ readonly text: string;
305
+ /** True when the identifier was written with a `#` prefix. */
306
+ readonly escaped?: boolean;
307
+ }
308
+
309
+ export interface PrivateIdentifier extends Node {
310
+ readonly kind: SyntaxKind.PrivateIdentifier;
311
+ readonly text: string;
312
+ }
313
+
314
+ export interface NumericLiteral extends Node {
315
+ readonly kind: SyntaxKind.NumericLiteral;
316
+ readonly text: string;
317
+ readonly value: number;
318
+ }
319
+
320
+ export interface BigIntLiteral extends Node {
321
+ readonly kind: SyntaxKind.BigIntLiteral;
322
+ readonly text: string;
323
+ readonly value: bigint;
324
+ }
325
+
326
+ export interface StringLiteral extends Node {
327
+ readonly kind: SyntaxKind.StringLiteral;
328
+ readonly text: string;
329
+ readonly value: string;
330
+ /** Raw source text, including quotes. */
331
+ readonly raw: string;
332
+ }
333
+
334
+ export interface NoSubstitutionTemplateLiteral extends Node {
335
+ readonly kind: SyntaxKind.NoSubstitutionTemplateLiteral;
336
+ readonly text: string;
337
+ readonly value: string;
338
+ }
339
+
340
+ export interface TemplateLiteral extends Node {
341
+ readonly kind: SyntaxKind.TemplateLiteral;
342
+ readonly head: string;
343
+ readonly spans: TemplateSpan[];
344
+ }
345
+
346
+ export interface TemplateSpan extends Node {
347
+ readonly kind: SyntaxKind.TemplateSpan;
348
+ readonly expression: Expression;
349
+ readonly literal: string;
350
+ /** True when this span terminates the template (tail) rather than continues it. */
351
+ readonly isTail: boolean;
352
+ }
353
+
354
+ export interface RegularExpressionLiteral extends Node {
355
+ readonly kind: SyntaxKind.RegularExpressionLiteral;
356
+ readonly text: string;
357
+ readonly pattern: string;
358
+ readonly flags: string;
359
+ }
360
+
361
+ export interface BooleanLiteral extends Node {
362
+ readonly kind: SyntaxKind.TrueKeyword | SyntaxKind.FalseKeyword;
363
+ readonly value: boolean;
364
+ }
365
+
366
+ export interface NullLiteral extends Node {
367
+ readonly kind: SyntaxKind.NullKeyword;
368
+ }
369
+
370
+ export interface UndefinedLiteral extends Node {
371
+ readonly kind: SyntaxKind.UndefinedKeyword;
372
+ }
373
+
374
+ export interface ThisExpression extends Node {
375
+ readonly kind: SyntaxKind.ThisKeyword;
376
+ }
377
+
378
+ // ---------------------------------------------------------------------------
379
+ // Expressions
380
+ // ---------------------------------------------------------------------------
381
+
382
+ export interface ArrayLiteralExpression extends Node {
383
+ readonly kind: SyntaxKind.ArrayLiteralExpression;
384
+ readonly elements: Expression[];
385
+ }
386
+
387
+ export interface PropertyAssignment extends Node {
388
+ readonly kind: SyntaxKind.PropertyAssignment;
389
+ readonly name: PropertyName;
390
+ readonly initializer: Expression;
391
+ }
392
+
393
+ export interface ShorthandPropertyAssignment extends Node {
394
+ readonly kind: SyntaxKind.ShorthandPropertyAssignment;
395
+ readonly name: Identifier;
396
+ }
397
+
398
+ export interface SpreadElement extends Node {
399
+ readonly kind: SyntaxKind.SpreadElement;
400
+ readonly expression: Expression;
401
+ }
402
+
403
+ export type ObjectLiteralElementLike = PropertyAssignment | ShorthandPropertyAssignment | SpreadElement;
404
+
405
+ export interface ObjectLiteralExpression extends Node {
406
+ readonly kind: SyntaxKind.ObjectLiteralExpression;
407
+ readonly properties: ObjectLiteralElementLike[];
408
+ }
409
+
410
+ export type PropertyName = Identifier | StringLiteral | NumericLiteral | PrivateIdentifier;
411
+
412
+ export interface FunctionExpression extends Node {
413
+ readonly kind: SyntaxKind.FunctionExpression;
414
+ readonly name?: Identifier;
415
+ readonly typeParameters: TypeParameterDeclaration[];
416
+ readonly parameters: Parameter[];
417
+ readonly returnType?: TypeNode;
418
+ readonly body: Block;
419
+ readonly flags: NodeFlags;
420
+ }
421
+
422
+ export interface ArrowFunction extends Node {
423
+ readonly kind: SyntaxKind.ArrowFunction;
424
+ readonly typeParameters: TypeParameterDeclaration[];
425
+ readonly parameters: Parameter[];
426
+ readonly returnType?: TypeNode;
427
+ readonly body: Block | Expression;
428
+ readonly flags: NodeFlags;
429
+ }
430
+
431
+ export interface ClassExpression extends Node {
432
+ readonly kind: SyntaxKind.ClassExpression;
433
+ readonly name?: Identifier;
434
+ readonly typeParameters: TypeParameterDeclaration[];
435
+ readonly heritage: HeritageClause[];
436
+ readonly members: ClassElement[];
437
+ }
438
+
439
+ export interface CallExpression extends Node {
440
+ readonly kind: SyntaxKind.CallExpression;
441
+ readonly expression: Expression;
442
+ readonly typeArguments: TypeNode[];
443
+ readonly arguments: Expression[];
444
+ readonly optional: boolean;
445
+ }
446
+
447
+ export interface NewExpression extends Node {
448
+ readonly kind: SyntaxKind.NewExpression;
449
+ readonly expression: Expression;
450
+ readonly typeArguments: TypeNode[];
451
+ readonly arguments: Expression[];
452
+ }
453
+
454
+ export interface PropertyAccessExpression extends Node {
455
+ readonly kind: SyntaxKind.PropertyAccessExpression;
456
+ readonly expression: Expression;
457
+ readonly name: Identifier;
458
+ readonly optional: boolean;
459
+ }
460
+
461
+ export interface ElementAccessExpression extends Node {
462
+ readonly kind: SyntaxKind.ElementAccessExpression;
463
+ readonly expression: Expression;
464
+ readonly argumentExpression: Expression;
465
+ readonly optional: boolean;
466
+ }
467
+
468
+ export interface ParenthesizedExpression extends Node {
469
+ readonly kind: SyntaxKind.ParenthesizedExpression;
470
+ readonly expression: Expression;
471
+ }
472
+
473
+ export const enum PrefixUnaryOperator {
474
+ Plus = "+",
475
+ Minus = "-",
476
+ Tilde = "~",
477
+ Exclamation = "!",
478
+ TypeOf = "typeof",
479
+ Void = "void",
480
+ Delete = "delete",
481
+ PlusPlus = "++",
482
+ MinusMinus = "--",
483
+ Await = "await",
484
+ }
485
+
486
+ export interface PrefixUnaryExpression extends Node {
487
+ readonly kind: SyntaxKind.PrefixUnaryExpression;
488
+ readonly operator: PrefixUnaryOperator;
489
+ readonly operand: Expression;
490
+ }
491
+
492
+ export const enum PostfixUnaryOperator {
493
+ PlusPlus = "++",
494
+ MinusMinus = "--",
495
+ }
496
+
497
+ export interface PostfixUnaryExpression extends Node {
498
+ readonly kind: SyntaxKind.PostfixUnaryExpression;
499
+ readonly operator: PostfixUnaryOperator;
500
+ readonly operand: Expression;
501
+ }
502
+
503
+ export const enum BinaryOperator {
504
+ Add = "+",
505
+ Subtract = "-",
506
+ Multiply = "*",
507
+ Divide = "/",
508
+ Remainder = "%",
509
+ Exponent = "**",
510
+ LessThan = "<",
511
+ LessThanEquals = "<=",
512
+ GreaterThan = ">",
513
+ GreaterThanEquals = ">=",
514
+ EqualsEquals = "==",
515
+ ExclamationEquals = "!=",
516
+ EqualsEqualsEquals = "===",
517
+ ExclamationEqualsEquals = "!==",
518
+ AmpersandAmpersand = "&&",
519
+ BarBar = "||",
520
+ QuestionQuestion = "??",
521
+ Ampersand = "&",
522
+ Bar = "|",
523
+ Caret = "^",
524
+ LessThanLessThan = "<<",
525
+ GreaterThanGreaterThan = ">>",
526
+ GreaterThanGreaterThanGreaterThan = ">>>",
527
+ Comma = ",",
528
+ In = "in",
529
+ InstanceOf = "instanceof",
530
+ }
531
+
532
+ /** Assignment operators, including the compound forms. */
533
+ export const enum AssignmentOperator {
534
+ Assign = "=",
535
+ AddAssign = "+=",
536
+ SubtractAssign = "-=",
537
+ MultiplyAssign = "*=",
538
+ DivideAssign = "/=",
539
+ RemainderAssign = "%=",
540
+ ExponentAssign = "**=",
541
+ LessThanLessThanAssign = "<<=",
542
+ GreaterThanGreaterThanAssign = ">>=",
543
+ GreaterThanGreaterThanGreaterThanAssign = ">>>=",
544
+ AmpersandAssign = "&=",
545
+ BarAssign = "|=",
546
+ CaretAssign = "^=",
547
+ AmpersandAmpersandAssign = "&&=",
548
+ BarBarAssign = "||=",
549
+ QuestionQuestionAssign = "??=",
550
+ }
551
+
552
+ export interface BinaryExpression extends Node {
553
+ readonly kind: SyntaxKind.BinaryExpression;
554
+ readonly left: Expression;
555
+ readonly operator: BinaryOperator;
556
+ readonly right: Expression;
557
+ readonly operatorToken: Token;
558
+ }
559
+
560
+ export interface AssignmentExpression extends Node {
561
+ readonly kind: SyntaxKind.BinaryExpression;
562
+ readonly left: Expression;
563
+ readonly operator: AssignmentOperator;
564
+ readonly right: Expression;
565
+ readonly operatorToken: Token;
566
+ }
567
+
568
+ export interface ConditionalExpression extends Node {
569
+ readonly kind: SyntaxKind.ConditionalExpression;
570
+ readonly condition: Expression;
571
+ readonly whenTrue: Expression;
572
+ readonly whenFalse: Expression;
573
+ }
574
+
575
+ export interface AsExpression extends Node {
576
+ readonly kind: SyntaxKind.AsExpression;
577
+ readonly expression: Expression;
578
+ readonly type: TypeNode;
579
+ }
580
+
581
+ export interface SatisfiesExpression extends Node {
582
+ readonly kind: SyntaxKind.SatisfiesExpression;
583
+ readonly expression: Expression;
584
+ readonly type: TypeNode;
585
+ }
586
+
587
+ export interface NonNullExpression extends Node {
588
+ readonly kind: SyntaxKind.NonNullExpression;
589
+ readonly expression: Expression;
590
+ }
591
+
592
+ export interface TypeOfExpression extends Node {
593
+ readonly kind: SyntaxKind.TypeOfExpression;
594
+ readonly expression: Expression;
595
+ }
596
+
597
+ export interface VoidExpression extends Node {
598
+ readonly kind: SyntaxKind.VoidExpression;
599
+ readonly expression?: Expression;
600
+ }
601
+
602
+ export interface DeleteExpression extends Node {
603
+ readonly kind: SyntaxKind.DeleteExpression;
604
+ readonly expression: Expression;
605
+ }
606
+
607
+ export interface AwaitExpression extends Node {
608
+ readonly kind: SyntaxKind.AwaitExpression;
609
+ readonly expression: Expression;
610
+ }
611
+
612
+ export interface YieldExpression extends Node {
613
+ readonly kind: SyntaxKind.YieldExpression;
614
+ readonly expression?: Expression;
615
+ readonly delegate: boolean;
616
+ }
617
+
618
+ export interface TaggedTemplateExpression extends Node {
619
+ readonly kind: SyntaxKind.TaggedTemplateExpression;
620
+ readonly tag: Expression;
621
+ readonly template: TemplateLiteral | NoSubstitutionTemplateLiteral;
622
+ }
623
+
624
+ // ---------------------------------------------------------------------------
625
+ // Statements
626
+ // ---------------------------------------------------------------------------
627
+
628
+ export interface ExpressionStatement extends Node {
629
+ readonly kind: SyntaxKind.ExpressionStatement;
630
+ readonly expression: Expression;
631
+ }
632
+
633
+ export interface Block extends Node {
634
+ readonly kind: SyntaxKind.Block;
635
+ readonly statements: Statement[];
636
+ }
637
+
638
+ export interface EmptyStatement extends Node {
639
+ readonly kind: SyntaxKind.EmptyStatement;
640
+ }
641
+
642
+ export interface DebuggerStatement extends Node {
643
+ readonly kind: SyntaxKind.DebuggerStatement;
644
+ }
645
+
646
+ export interface VariableDeclaration extends Node {
647
+ readonly kind: SyntaxKind.VariableDeclaration;
648
+ readonly name: Identifier;
649
+ readonly exclamation: boolean;
650
+ readonly type?: TypeNode;
651
+ readonly initializer?: Expression;
652
+ }
653
+
654
+ export interface VariableDeclarationList extends Node {
655
+ readonly kind: SyntaxKind.VariableDeclarationList;
656
+ readonly declarations: VariableDeclaration[];
657
+ readonly declarationKind: "var" | "let" | "const" | "using";
658
+ }
659
+
660
+ export interface VariableStatement extends Node {
661
+ readonly kind: SyntaxKind.VariableStatement;
662
+ readonly declarationList: VariableDeclarationList;
663
+ readonly modifiers: Modifier[];
664
+ }
665
+
666
+ export interface IfStatement extends Node {
667
+ readonly kind: SyntaxKind.IfStatement;
668
+ readonly condition: Expression;
669
+ readonly thenStatement: Statement;
670
+ readonly elseStatement?: Statement;
671
+ }
672
+
673
+ export interface WhileStatement extends Node {
674
+ readonly kind: SyntaxKind.WhileStatement;
675
+ readonly condition: Expression;
676
+ readonly statement: Statement;
677
+ }
678
+
679
+ export interface DoStatement extends Node {
680
+ readonly kind: SyntaxKind.DoStatement;
681
+ readonly condition: Expression;
682
+ readonly statement: Statement;
683
+ }
684
+
685
+ export interface ForStatement extends Node {
686
+ readonly kind: SyntaxKind.ForStatement;
687
+ readonly initializer?: VariableDeclarationList | Expression;
688
+ readonly condition?: Expression;
689
+ readonly incrementor?: Expression;
690
+ readonly statement: Statement;
691
+ }
692
+
693
+ export interface ForOfStatement extends Node {
694
+ readonly kind: SyntaxKind.ForOfStatement;
695
+ readonly initializer: VariableDeclarationList | Expression;
696
+ readonly expression: Expression;
697
+ readonly statement: Statement;
698
+ readonly awaitModifier: boolean;
699
+ }
700
+
701
+ export interface ForInStatement extends Node {
702
+ readonly kind: SyntaxKind.ForInStatement;
703
+ readonly initializer: VariableDeclarationList | Expression;
704
+ readonly expression: Expression;
705
+ readonly statement: Statement;
706
+ }
707
+
708
+ export interface ReturnStatement extends Node {
709
+ readonly kind: SyntaxKind.ReturnStatement;
710
+ readonly expression?: Expression;
711
+ }
712
+
713
+ export interface BreakStatement extends Node {
714
+ readonly kind: SyntaxKind.BreakStatement;
715
+ readonly label?: Identifier;
716
+ }
717
+
718
+ export interface ContinueStatement extends Node {
719
+ readonly kind: SyntaxKind.ContinueStatement;
720
+ readonly label?: Identifier;
721
+ }
722
+
723
+ export interface ThrowStatement extends Node {
724
+ readonly kind: SyntaxKind.ThrowStatement;
725
+ readonly expression: Expression;
726
+ }
727
+
728
+ export interface CatchClause extends Node {
729
+ readonly kind: SyntaxKind.CatchClause;
730
+ readonly variable?: Identifier;
731
+ readonly type?: TypeNode;
732
+ readonly block: Block;
733
+ }
734
+
735
+ export interface TryStatement extends Node {
736
+ readonly kind: SyntaxKind.TryStatement;
737
+ readonly tryBlock: Block;
738
+ readonly catchClause?: CatchClause;
739
+ readonly finallyBlock?: Block;
740
+ }
741
+
742
+ export interface CaseClause extends Node {
743
+ readonly kind: SyntaxKind.CaseClause;
744
+ readonly expression: Expression;
745
+ readonly statements: Statement[];
746
+ }
747
+
748
+ export interface DefaultClause extends Node {
749
+ readonly kind: SyntaxKind.DefaultClause;
750
+ readonly statements: Statement[];
751
+ }
752
+
753
+ export interface SwitchStatement extends Node {
754
+ readonly kind: SyntaxKind.SwitchStatement;
755
+ readonly expression: Expression;
756
+ readonly clauses: (CaseClause | DefaultClause)[];
757
+ }
758
+
759
+ export interface LabeledStatement extends Node {
760
+ readonly kind: SyntaxKind.LabeledStatement;
761
+ readonly label: Identifier;
762
+ readonly statement: Statement;
763
+ }
764
+
765
+ // ---------------------------------------------------------------------------
766
+ // Declarations
767
+ // ---------------------------------------------------------------------------
768
+
769
+ export interface Parameter extends Node {
770
+ readonly kind: SyntaxKind.Parameter;
771
+ readonly name: Identifier;
772
+ readonly modifiers: Modifier[];
773
+ readonly dotDotDotToken: boolean;
774
+ readonly questionToken: boolean;
775
+ readonly type?: TypeNode;
776
+ readonly initializer?: Expression;
777
+ }
778
+
779
+ export interface TypeParameterDeclaration extends Node {
780
+ readonly kind: SyntaxKind.TypeParameterDeclaration;
781
+ readonly name: Identifier;
782
+ readonly constraint?: TypeNode;
783
+ readonly default?: TypeNode;
784
+ }
785
+
786
+ export interface FunctionDeclaration extends Node {
787
+ readonly kind: SyntaxKind.FunctionDeclaration;
788
+ readonly name?: Identifier;
789
+ readonly modifiers: Modifier[];
790
+ readonly typeParameters: TypeParameterDeclaration[];
791
+ readonly parameters: Parameter[];
792
+ readonly returnType?: TypeNode;
793
+ readonly body?: Block;
794
+ readonly flags: NodeFlags;
795
+ }
796
+
797
+ export interface HeritageClause extends Node {
798
+ readonly kind: SyntaxKind.HeritageClause;
799
+ readonly token: "extends" | "implements";
800
+ readonly types: ExpressionWithTypeArguments[];
801
+ }
802
+
803
+ export interface ExpressionWithTypeArguments extends Node {
804
+ readonly kind: SyntaxKind.ExpressionWithTypeArguments;
805
+ readonly expression: Expression;
806
+ readonly typeArguments: TypeNode[];
807
+ }
808
+
809
+ export type ClassElement = PropertyDeclaration | MethodDeclaration | ConstructorDeclaration;
810
+
811
+ export interface PropertyDeclaration extends Node {
812
+ readonly kind: SyntaxKind.PropertyDeclaration;
813
+ readonly name: PropertyName;
814
+ readonly modifiers: Modifier[];
815
+ readonly questionToken: boolean;
816
+ readonly exclamationToken: boolean;
817
+ readonly type?: TypeNode;
818
+ readonly initializer?: Expression;
819
+ }
820
+
821
+ export interface MethodDeclaration extends Node {
822
+ readonly kind: SyntaxKind.MethodDeclaration;
823
+ readonly name: PropertyName;
824
+ readonly modifiers: Modifier[];
825
+ readonly typeParameters: TypeParameterDeclaration[];
826
+ readonly parameters: Parameter[];
827
+ readonly returnType?: TypeNode;
828
+ readonly body?: Block;
829
+ readonly flags: NodeFlags;
830
+ readonly optional: boolean;
831
+ }
832
+
833
+ export interface ConstructorDeclaration extends Node {
834
+ readonly kind: SyntaxKind.ConstructorDeclaration;
835
+ readonly modifiers: Modifier[];
836
+ readonly parameters: Parameter[];
837
+ readonly body?: Block;
838
+ }
839
+
840
+ export interface ClassDeclaration extends Node {
841
+ readonly kind: SyntaxKind.ClassDeclaration;
842
+ readonly name?: Identifier;
843
+ readonly modifiers: Modifier[];
844
+ readonly typeParameters: TypeParameterDeclaration[];
845
+ readonly heritage: HeritageClause[];
846
+ readonly members: ClassElement[];
847
+ }
848
+
849
+ export interface InterfaceDeclaration extends Node {
850
+ readonly kind: SyntaxKind.InterfaceDeclaration;
851
+ readonly name: Identifier;
852
+ readonly modifiers: Modifier[];
853
+ readonly typeParameters: TypeParameterDeclaration[];
854
+ readonly heritage: HeritageClause[];
855
+ readonly members: TypeElement[];
856
+ }
857
+
858
+ export interface TypeAliasDeclaration extends Node {
859
+ readonly kind: SyntaxKind.TypeAliasDeclaration;
860
+ readonly name: Identifier;
861
+ readonly modifiers: Modifier[];
862
+ readonly typeParameters: TypeParameterDeclaration[];
863
+ readonly type: TypeNode;
864
+ }
865
+
866
+ export interface EnumMember extends Node {
867
+ readonly kind: SyntaxKind.EnumMember;
868
+ readonly name: PropertyName;
869
+ readonly initializer?: Expression;
870
+ }
871
+
872
+ export interface EnumDeclaration extends Node {
873
+ readonly kind: SyntaxKind.EnumDeclaration;
874
+ readonly name: Identifier;
875
+ readonly modifiers: Modifier[];
876
+ readonly members: EnumMember[];
877
+ }
878
+
879
+ export interface ModuleDeclaration extends Node {
880
+ readonly kind: SyntaxKind.ModuleDeclaration;
881
+ readonly name: Identifier | StringLiteral;
882
+ readonly modifiers: Modifier[];
883
+ readonly body?: Block;
884
+ }
885
+
886
+ // ---------------------------------------------------------------------------
887
+ // Modules
888
+ // ---------------------------------------------------------------------------
889
+
890
+ export interface ImportSpecifier extends Node {
891
+ readonly kind: SyntaxKind.ImportSpecifier;
892
+ readonly propertyName?: Identifier;
893
+ readonly name: Identifier;
894
+ readonly isTypeOnly: boolean;
895
+ }
896
+
897
+ export interface NamedImports extends Node {
898
+ readonly kind: SyntaxKind.NamedImports;
899
+ readonly elements: ImportSpecifier[];
900
+ }
901
+
902
+ export interface NamespaceImport extends Node {
903
+ readonly kind: SyntaxKind.NamespaceImport;
904
+ readonly name: Identifier;
905
+ }
906
+
907
+ export interface ImportClause extends Node {
908
+ readonly kind: SyntaxKind.ImportClause;
909
+ readonly name?: Identifier;
910
+ readonly namedBindings?: NamedImports | NamespaceImport;
911
+ readonly isTypeOnly: boolean;
912
+ }
913
+
914
+ export interface ImportDeclaration extends Node {
915
+ readonly kind: SyntaxKind.ImportDeclaration;
916
+ readonly importClause?: ImportClause;
917
+ readonly moduleSpecifier: StringLiteral;
918
+ readonly attributes: { name: string; value: string }[];
919
+ }
920
+
921
+ export interface ExportSpecifier extends Node {
922
+ readonly kind: SyntaxKind.ExportSpecifier;
923
+ readonly propertyName?: Identifier;
924
+ readonly name: Identifier;
925
+ readonly isTypeOnly: boolean;
926
+ }
927
+
928
+ export interface NamedExports extends Node {
929
+ readonly kind: SyntaxKind.NamedExports;
930
+ readonly elements: ExportSpecifier[];
931
+ }
932
+
933
+ export interface ExportDeclaration extends Node {
934
+ readonly kind: SyntaxKind.ExportDeclaration;
935
+ readonly modifiers: Modifier[];
936
+ readonly exportClause?: NamedExports | NamespaceExport;
937
+ readonly moduleSpecifier?: StringLiteral;
938
+ readonly isTypeOnly: boolean;
939
+ }
940
+
941
+ export interface NamespaceExport extends Node {
942
+ readonly kind: SyntaxKind.NamespaceImport;
943
+ readonly name: Identifier;
944
+ }
945
+
946
+ export interface ExportAssignment extends Node {
947
+ readonly kind: SyntaxKind.ExportAssignment;
948
+ readonly isExportEquals: boolean;
949
+ readonly expression: Expression;
950
+ }
951
+
952
+ // ---------------------------------------------------------------------------
953
+ // Type nodes
954
+ // ---------------------------------------------------------------------------
955
+
956
+ export interface TypeReference extends Node {
957
+ readonly kind: SyntaxKind.TypeReference;
958
+ readonly typeName: Identifier | QualifiedName;
959
+ readonly typeArguments: TypeNode[];
960
+ }
961
+
962
+ export interface QualifiedName extends Node {
963
+ readonly kind: SyntaxKind.QualifiedName;
964
+ readonly left: Identifier | QualifiedName;
965
+ readonly right: Identifier;
966
+ }
967
+
968
+ export interface TypePredicate extends Node {
969
+ readonly kind: SyntaxKind.TypePredicate;
970
+ readonly parameterName: Identifier | ThisExpression;
971
+ readonly type?: TypeNode;
972
+ }
973
+
974
+ export interface KeywordTypeNode extends Node {
975
+ readonly kind:
976
+ | SyntaxKind.AnyKeywordType
977
+ | SyntaxKind.UnknownKeywordType
978
+ | SyntaxKind.NumberKeywordType
979
+ | SyntaxKind.BigIntKeywordType
980
+ | SyntaxKind.StringKeywordType
981
+ | SyntaxKind.BooleanKeywordType
982
+ | SyntaxKind.SymbolKeywordType
983
+ | SyntaxKind.VoidKeywordType
984
+ | SyntaxKind.UndefinedKeywordType
985
+ | SyntaxKind.NullKeywordType
986
+ | SyntaxKind.NeverKeywordType
987
+ | SyntaxKind.ObjectKeywordType
988
+ | SyntaxKind.ThisKeywordType;
989
+ }
990
+
991
+ export interface LiteralTypeNode extends Node {
992
+ readonly kind: SyntaxKind.LiteralType;
993
+ readonly literal: StringLiteral | NumericLiteral | BooleanLiteral | NullLiteral;
994
+ }
995
+
996
+ export interface ArrayTypeNode extends Node {
997
+ readonly kind: SyntaxKind.ArrayType;
998
+ readonly elementType: TypeNode;
999
+ }
1000
+
1001
+ export interface TupleTypeNode extends Node {
1002
+ readonly kind: SyntaxKind.TupleType;
1003
+ readonly elements: TypeNode[];
1004
+ }
1005
+
1006
+ export interface UnionTypeNode extends Node {
1007
+ readonly kind: SyntaxKind.UnionType;
1008
+ readonly types: TypeNode[];
1009
+ }
1010
+
1011
+ export interface IntersectionTypeNode extends Node {
1012
+ readonly kind: SyntaxKind.IntersectionType;
1013
+ readonly types: TypeNode[];
1014
+ }
1015
+
1016
+ export interface FunctionTypeNode extends Node {
1017
+ readonly kind: SyntaxKind.FunctionType;
1018
+ readonly typeParameters: TypeParameterDeclaration[];
1019
+ readonly parameters: Parameter[];
1020
+ readonly returnType: TypeNode;
1021
+ }
1022
+
1023
+ export type TypeElement = PropertySignature | MethodSignature | IndexSignature;
1024
+
1025
+ export interface PropertySignature extends Node {
1026
+ readonly kind: SyntaxKind.PropertySignature;
1027
+ readonly name: PropertyName;
1028
+ readonly questionToken: boolean;
1029
+ readonly readonlyToken: boolean;
1030
+ readonly type?: TypeNode;
1031
+ }
1032
+
1033
+ export interface MethodSignature extends Node {
1034
+ readonly kind: SyntaxKind.MethodSignature;
1035
+ readonly name: PropertyName;
1036
+ readonly questionToken: boolean;
1037
+ readonly typeParameters: TypeParameterDeclaration[];
1038
+ readonly parameters: Parameter[];
1039
+ readonly returnType?: TypeNode;
1040
+ }
1041
+
1042
+ export interface IndexSignature extends Node {
1043
+ readonly kind: SyntaxKind.IndexSignature;
1044
+ readonly parameters: Parameter[];
1045
+ readonly type?: TypeNode;
1046
+ }
1047
+
1048
+ export interface TypeLiteralNode extends Node {
1049
+ readonly kind: SyntaxKind.TypeLiteral;
1050
+ readonly members: TypeElement[];
1051
+ }
1052
+
1053
+ export interface ParenthesizedTypeNode extends Node {
1054
+ readonly kind: SyntaxKind.ParenthesizedType;
1055
+ readonly type: TypeNode;
1056
+ }
1057
+
1058
+ export interface TypeQueryNode extends Node {
1059
+ readonly kind: SyntaxKind.TypeQuery;
1060
+ readonly exprName: Identifier | QualifiedName;
1061
+ readonly typeArguments: TypeNode[];
1062
+ }
1063
+
1064
+ export interface IndexedAccessTypeNode extends Node {
1065
+ readonly kind: SyntaxKind.IndexedAccessType;
1066
+ readonly objectType: TypeNode;
1067
+ readonly indexType: TypeNode;
1068
+ }
1069
+
1070
+ export const enum TypeOperator {
1071
+ KeyOf = "keyof",
1072
+ Unique = "unique",
1073
+ Readonly = "readonly",
1074
+ }
1075
+
1076
+ export interface TypeOperatorNode extends Node {
1077
+ readonly kind: SyntaxKind.TypeOperator;
1078
+ readonly operator: TypeOperator;
1079
+ readonly type: TypeNode;
1080
+ }
1081
+
1082
+ export interface MappedTypeNode extends Node {
1083
+ readonly kind: SyntaxKind.MappedType;
1084
+ readonly readonlyToken: boolean | "+" | "-";
1085
+ readonly typeParameter: TypeParameterDeclaration;
1086
+ readonly questionToken: boolean | "+" | "-";
1087
+ readonly type?: TypeNode;
1088
+ }
1089
+
1090
+ export interface ConditionalTypeNode extends Node {
1091
+ readonly kind: SyntaxKind.ConditionalType;
1092
+ readonly checkType: TypeNode;
1093
+ readonly extendsType: TypeNode;
1094
+ readonly trueType: TypeNode;
1095
+ readonly falseType: TypeNode;
1096
+ }
1097
+
1098
+ export interface InferTypeNode extends Node {
1099
+ readonly kind: SyntaxKind.InferType;
1100
+ readonly typeParameter: TypeParameterDeclaration;
1101
+ }
1102
+
1103
+ export interface OptionalTypeNode extends Node {
1104
+ readonly kind: SyntaxKind.OptionalType;
1105
+ readonly type: TypeNode;
1106
+ }
1107
+
1108
+ export interface RestTypeNode extends Node {
1109
+ readonly kind: SyntaxKind.RestType;
1110
+ readonly type: TypeNode;
1111
+ }