xbintsc 0.1.3 → 0.1.8

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 (142) hide show
  1. package/README.md +14 -13
  2. package/dist/src/ast/common.d.ts +33 -0
  3. package/dist/src/ast/common.js +7 -0
  4. package/dist/src/ast/common.js.map +1 -0
  5. package/dist/src/ast/declarations.d.ts +110 -0
  6. package/dist/src/ast/declarations.js +5 -0
  7. package/dist/src/ast/declarations.js.map +1 -0
  8. package/dist/src/ast/expressions.d.ts +219 -0
  9. package/dist/src/ast/expressions.js +6 -0
  10. package/dist/src/ast/expressions.js.map +1 -0
  11. package/dist/src/ast/kinds.d.ts +160 -0
  12. package/dist/src/ast/kinds.js +171 -0
  13. package/dist/src/ast/kinds.js.map +1 -0
  14. package/dist/src/ast/modules.d.ts +61 -0
  15. package/dist/src/ast/modules.js +5 -0
  16. package/dist/src/ast/modules.js.map +1 -0
  17. package/dist/src/ast/nodes.d.ts +11 -839
  18. package/dist/src/ast/nodes.js +11 -237
  19. package/dist/src/ast/nodes.js.map +1 -1
  20. package/dist/src/ast/operators.d.ts +71 -0
  21. package/dist/src/ast/operators.js +77 -0
  22. package/dist/src/ast/operators.js.map +1 -0
  23. package/dist/src/ast/statements.d.ts +120 -0
  24. package/dist/src/ast/statements.js +5 -0
  25. package/dist/src/ast/statements.js.map +1 -0
  26. package/dist/src/ast/types.d.ts +123 -0
  27. package/dist/src/ast/types.js +6 -0
  28. package/dist/src/ast/types.js.map +1 -0
  29. package/dist/src/codegen/generator/calls.d.ts +22 -0
  30. package/dist/src/codegen/generator/calls.js +301 -0
  31. package/dist/src/codegen/generator/calls.js.map +1 -0
  32. package/dist/src/codegen/generator/context.d.ts +45 -0
  33. package/dist/src/codegen/generator/context.js +128 -0
  34. package/dist/src/codegen/generator/context.js.map +1 -0
  35. package/dist/src/codegen/generator/expressions.d.ts +22 -0
  36. package/dist/src/codegen/generator/expressions.js +383 -0
  37. package/dist/src/codegen/generator/expressions.js.map +1 -0
  38. package/dist/src/codegen/generator/generator.d.ts +22 -0
  39. package/dist/src/codegen/generator/generator.js +21 -0
  40. package/dist/src/codegen/generator/generator.js.map +1 -0
  41. package/dist/src/codegen/generator/module.d.ts +15 -0
  42. package/dist/src/codegen/generator/module.js +114 -0
  43. package/dist/src/codegen/generator/module.js.map +1 -0
  44. package/dist/src/codegen/generator/state.d.ts +40 -0
  45. package/dist/src/codegen/generator/state.js +84 -0
  46. package/dist/src/codegen/generator/state.js.map +1 -0
  47. package/dist/src/codegen/generator/statements.d.ts +22 -0
  48. package/dist/src/codegen/generator/statements.js +425 -0
  49. package/dist/src/codegen/generator/statements.js.map +1 -0
  50. package/dist/src/codegen/generator/tables.d.ts +19 -0
  51. package/dist/src/codegen/generator/tables.js +153 -0
  52. package/dist/src/codegen/generator/tables.js.map +1 -0
  53. package/dist/src/codegen/llvm.d.ts +4 -13
  54. package/dist/src/codegen/llvm.js +4 -1159
  55. package/dist/src/codegen/llvm.js.map +1 -1
  56. package/dist/src/driver/compiler.js +13 -4
  57. package/dist/src/driver/compiler.js.map +1 -1
  58. package/dist/src/lexer/char.d.ts +78 -0
  59. package/dist/src/lexer/char.js +106 -0
  60. package/dist/src/lexer/char.js.map +1 -0
  61. package/dist/src/lexer/scanner.js +1 -98
  62. package/dist/src/lexer/scanner.js.map +1 -1
  63. package/dist/src/parser/context.d.ts +58 -0
  64. package/dist/src/parser/context.js +174 -0
  65. package/dist/src/parser/context.js.map +1 -0
  66. package/dist/src/parser/declarations.d.ts +26 -0
  67. package/dist/src/parser/declarations.js +461 -0
  68. package/dist/src/parser/declarations.js.map +1 -0
  69. package/dist/src/parser/expressions.d.ts +27 -0
  70. package/dist/src/parser/expressions.js +437 -0
  71. package/dist/src/parser/expressions.js.map +1 -0
  72. package/dist/src/parser/helpers.d.ts +7 -0
  73. package/dist/src/parser/helpers.js +36 -0
  74. package/dist/src/parser/helpers.js.map +1 -0
  75. package/dist/src/parser/literals.d.ts +16 -0
  76. package/dist/src/parser/literals.js +193 -0
  77. package/dist/src/parser/literals.js.map +1 -0
  78. package/dist/src/parser/modules.d.ts +12 -0
  79. package/dist/src/parser/modules.js +175 -0
  80. package/dist/src/parser/modules.js.map +1 -0
  81. package/dist/src/parser/operators.d.ts +12 -0
  82. package/dist/src/parser/operators.js +172 -0
  83. package/dist/src/parser/operators.js.map +1 -0
  84. package/dist/src/parser/parser.d.ts +17 -122
  85. package/dist/src/parser/parser.js +18 -2307
  86. package/dist/src/parser/parser.js.map +1 -1
  87. package/dist/src/parser/speculation.d.ts +6 -0
  88. package/dist/src/parser/speculation.js +10 -0
  89. package/dist/src/parser/speculation.js.map +1 -0
  90. package/dist/src/parser/statements.d.ts +28 -0
  91. package/dist/src/parser/statements.js +402 -0
  92. package/dist/src/parser/statements.js.map +1 -0
  93. package/dist/src/parser/types.d.ts +21 -0
  94. package/dist/src/parser/types.js +338 -0
  95. package/dist/src/parser/types.js.map +1 -0
  96. package/dist/tests/e2e/compile.test.js +122 -2
  97. package/dist/tests/e2e/compile.test.js.map +1 -1
  98. package/dist/tests/parser/parser.test.js +9 -1
  99. package/dist/tests/parser/parser.test.js.map +1 -1
  100. package/package.json +1 -1
  101. package/runtime/rt.h +32 -0
  102. package/runtime/rt_internal.h +106 -0
  103. package/runtime/xt_alloc.c +38 -0
  104. package/runtime/xt_builtins.c +192 -0
  105. package/runtime/xt_containers.c +225 -0
  106. package/runtime/xt_io.c +133 -0
  107. package/runtime/xt_stdlib.c +502 -0
  108. package/runtime/xt_values.c +291 -0
  109. package/scripts/build-runtime.mjs +8 -1
  110. package/src/ast/common.ts +210 -0
  111. package/src/ast/declarations.ts +130 -0
  112. package/src/ast/expressions.ts +275 -0
  113. package/src/ast/kinds.ts +176 -0
  114. package/src/ast/modules.ts +73 -0
  115. package/src/ast/nodes.ts +11 -1101
  116. package/src/ast/operators.ts +76 -0
  117. package/src/ast/statements.ts +148 -0
  118. package/src/ast/types.ts +173 -0
  119. package/src/codegen/generator/calls.ts +355 -0
  120. package/src/codegen/generator/context.ts +156 -0
  121. package/src/codegen/generator/expressions.ts +431 -0
  122. package/src/codegen/generator/generator.ts +35 -0
  123. package/src/codegen/generator/module.ts +139 -0
  124. package/src/codegen/generator/state.ts +126 -0
  125. package/src/codegen/generator/statements.ts +474 -0
  126. package/src/codegen/generator/tables.ts +171 -0
  127. package/src/codegen/llvm.ts +4 -1305
  128. package/src/driver/compiler.ts +17 -5
  129. package/src/lexer/char.ts +116 -0
  130. package/src/lexer/scanner.ts +9 -109
  131. package/src/parser/context.ts +196 -0
  132. package/src/parser/declarations.ts +502 -0
  133. package/src/parser/expressions.ts +465 -0
  134. package/src/parser/helpers.ts +42 -0
  135. package/src/parser/literals.ts +207 -0
  136. package/src/parser/modules.ts +194 -0
  137. package/src/parser/operators.ts +181 -0
  138. package/src/parser/parser.ts +35 -2369
  139. package/src/parser/speculation.ts +9 -0
  140. package/src/parser/statements.ts +457 -0
  141. package/src/parser/types.ts +365 -0
  142. package/runtime/xt_runtime.c +0 -682
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Expression nodes of the xbintsc AST, plus the literal and identifier nodes
3
+ * they are built from.
4
+ */
5
+
6
+ import type { Token } from "../lexer/token.js";
7
+ import { NodeFlags, SyntaxKind } from "./kinds.js";
8
+ import {
9
+ AssignmentOperator,
10
+ BinaryOperator,
11
+ PostfixUnaryOperator,
12
+ PrefixUnaryOperator,
13
+ } from "./operators.js";
14
+ import type { Expression, Node, TypeNode } from "./common.js";
15
+ import type { Block } from "./statements.js";
16
+ import type { ClassElement, HeritageClause, Parameter, TypeParameterDeclaration } from "./declarations.js";
17
+
18
+ // ---------------------------------------------------------------------------
19
+ // Identifiers and literals
20
+ // ---------------------------------------------------------------------------
21
+
22
+ export interface Identifier extends Node {
23
+ readonly kind: SyntaxKind.Identifier;
24
+ readonly text: string;
25
+ /** True when the identifier was written with a `#` prefix. */
26
+ readonly escaped?: boolean;
27
+ }
28
+
29
+ export interface PrivateIdentifier extends Node {
30
+ readonly kind: SyntaxKind.PrivateIdentifier;
31
+ readonly text: string;
32
+ }
33
+
34
+ export interface NumericLiteral extends Node {
35
+ readonly kind: SyntaxKind.NumericLiteral;
36
+ readonly text: string;
37
+ readonly value: number;
38
+ }
39
+
40
+ export interface BigIntLiteral extends Node {
41
+ readonly kind: SyntaxKind.BigIntLiteral;
42
+ readonly text: string;
43
+ readonly value: bigint;
44
+ }
45
+
46
+ export interface StringLiteral extends Node {
47
+ readonly kind: SyntaxKind.StringLiteral;
48
+ readonly text: string;
49
+ readonly value: string;
50
+ /** Raw source text, including quotes. */
51
+ readonly raw: string;
52
+ }
53
+
54
+ export interface NoSubstitutionTemplateLiteral extends Node {
55
+ readonly kind: SyntaxKind.NoSubstitutionTemplateLiteral;
56
+ readonly text: string;
57
+ readonly value: string;
58
+ }
59
+
60
+ export interface TemplateLiteral extends Node {
61
+ readonly kind: SyntaxKind.TemplateLiteral;
62
+ readonly head: string;
63
+ readonly spans: TemplateSpan[];
64
+ }
65
+
66
+ export interface TemplateSpan extends Node {
67
+ readonly kind: SyntaxKind.TemplateSpan;
68
+ readonly expression: Expression;
69
+ readonly literal: string;
70
+ /** True when this span terminates the template (tail) rather than continues it. */
71
+ readonly isTail: boolean;
72
+ }
73
+
74
+ export interface RegularExpressionLiteral extends Node {
75
+ readonly kind: SyntaxKind.RegularExpressionLiteral;
76
+ readonly text: string;
77
+ readonly pattern: string;
78
+ readonly flags: string;
79
+ }
80
+
81
+ export interface BooleanLiteral extends Node {
82
+ readonly kind: SyntaxKind.TrueKeyword | SyntaxKind.FalseKeyword;
83
+ readonly value: boolean;
84
+ }
85
+
86
+ export interface NullLiteral extends Node {
87
+ readonly kind: SyntaxKind.NullKeyword;
88
+ }
89
+
90
+ export interface UndefinedLiteral extends Node {
91
+ readonly kind: SyntaxKind.UndefinedKeyword;
92
+ }
93
+
94
+ export interface ThisExpression extends Node {
95
+ readonly kind: SyntaxKind.ThisKeyword;
96
+ }
97
+
98
+ // ---------------------------------------------------------------------------
99
+ // Expressions
100
+ // ---------------------------------------------------------------------------
101
+
102
+ export interface ArrayLiteralExpression extends Node {
103
+ readonly kind: SyntaxKind.ArrayLiteralExpression;
104
+ readonly elements: Expression[];
105
+ }
106
+
107
+ export interface PropertyAssignment extends Node {
108
+ readonly kind: SyntaxKind.PropertyAssignment;
109
+ readonly name: PropertyName;
110
+ readonly initializer: Expression;
111
+ }
112
+
113
+ export interface ShorthandPropertyAssignment extends Node {
114
+ readonly kind: SyntaxKind.ShorthandPropertyAssignment;
115
+ readonly name: Identifier;
116
+ }
117
+
118
+ export interface SpreadElement extends Node {
119
+ readonly kind: SyntaxKind.SpreadElement;
120
+ readonly expression: Expression;
121
+ }
122
+
123
+ export type ObjectLiteralElementLike = PropertyAssignment | ShorthandPropertyAssignment | SpreadElement;
124
+
125
+ export interface ObjectLiteralExpression extends Node {
126
+ readonly kind: SyntaxKind.ObjectLiteralExpression;
127
+ readonly properties: ObjectLiteralElementLike[];
128
+ }
129
+
130
+ export type PropertyName = Identifier | StringLiteral | NumericLiteral | PrivateIdentifier;
131
+
132
+ export interface FunctionExpression extends Node {
133
+ readonly kind: SyntaxKind.FunctionExpression;
134
+ readonly name?: Identifier;
135
+ readonly typeParameters: TypeParameterDeclaration[];
136
+ readonly parameters: Parameter[];
137
+ readonly returnType?: TypeNode;
138
+ readonly body: Block;
139
+ readonly flags: NodeFlags;
140
+ }
141
+
142
+ export interface ArrowFunction extends Node {
143
+ readonly kind: SyntaxKind.ArrowFunction;
144
+ readonly typeParameters: TypeParameterDeclaration[];
145
+ readonly parameters: Parameter[];
146
+ readonly returnType?: TypeNode;
147
+ readonly body: Block | Expression;
148
+ readonly flags: NodeFlags;
149
+ }
150
+
151
+ export interface ClassExpression extends Node {
152
+ readonly kind: SyntaxKind.ClassExpression;
153
+ readonly name?: Identifier;
154
+ readonly typeParameters: TypeParameterDeclaration[];
155
+ readonly heritage: HeritageClause[];
156
+ readonly members: ClassElement[];
157
+ }
158
+
159
+ export interface CallExpression extends Node {
160
+ readonly kind: SyntaxKind.CallExpression;
161
+ readonly expression: Expression;
162
+ readonly typeArguments: TypeNode[];
163
+ readonly arguments: Expression[];
164
+ readonly optional: boolean;
165
+ }
166
+
167
+ export interface NewExpression extends Node {
168
+ readonly kind: SyntaxKind.NewExpression;
169
+ readonly expression: Expression;
170
+ readonly typeArguments: TypeNode[];
171
+ readonly arguments: Expression[];
172
+ }
173
+
174
+ export interface PropertyAccessExpression extends Node {
175
+ readonly kind: SyntaxKind.PropertyAccessExpression;
176
+ readonly expression: Expression;
177
+ readonly name: Identifier;
178
+ readonly optional: boolean;
179
+ }
180
+
181
+ export interface ElementAccessExpression extends Node {
182
+ readonly kind: SyntaxKind.ElementAccessExpression;
183
+ readonly expression: Expression;
184
+ readonly argumentExpression: Expression;
185
+ readonly optional: boolean;
186
+ }
187
+
188
+ export interface ParenthesizedExpression extends Node {
189
+ readonly kind: SyntaxKind.ParenthesizedExpression;
190
+ readonly expression: Expression;
191
+ }
192
+
193
+ export interface PrefixUnaryExpression extends Node {
194
+ readonly kind: SyntaxKind.PrefixUnaryExpression;
195
+ readonly operator: PrefixUnaryOperator;
196
+ readonly operand: Expression;
197
+ }
198
+
199
+ export interface PostfixUnaryExpression extends Node {
200
+ readonly kind: SyntaxKind.PostfixUnaryExpression;
201
+ readonly operator: PostfixUnaryOperator;
202
+ readonly operand: Expression;
203
+ }
204
+
205
+ export interface BinaryExpression extends Node {
206
+ readonly kind: SyntaxKind.BinaryExpression;
207
+ readonly left: Expression;
208
+ readonly operator: BinaryOperator;
209
+ readonly right: Expression;
210
+ readonly operatorToken: Token;
211
+ }
212
+
213
+ export interface AssignmentExpression extends Node {
214
+ readonly kind: SyntaxKind.BinaryExpression;
215
+ readonly left: Expression;
216
+ readonly operator: AssignmentOperator;
217
+ readonly right: Expression;
218
+ readonly operatorToken: Token;
219
+ }
220
+
221
+ export interface ConditionalExpression extends Node {
222
+ readonly kind: SyntaxKind.ConditionalExpression;
223
+ readonly condition: Expression;
224
+ readonly whenTrue: Expression;
225
+ readonly whenFalse: Expression;
226
+ }
227
+
228
+ export interface AsExpression extends Node {
229
+ readonly kind: SyntaxKind.AsExpression;
230
+ readonly expression: Expression;
231
+ readonly type: TypeNode;
232
+ }
233
+
234
+ export interface SatisfiesExpression extends Node {
235
+ readonly kind: SyntaxKind.SatisfiesExpression;
236
+ readonly expression: Expression;
237
+ readonly type: TypeNode;
238
+ }
239
+
240
+ export interface NonNullExpression extends Node {
241
+ readonly kind: SyntaxKind.NonNullExpression;
242
+ readonly expression: Expression;
243
+ }
244
+
245
+ export interface TypeOfExpression extends Node {
246
+ readonly kind: SyntaxKind.TypeOfExpression;
247
+ readonly expression: Expression;
248
+ }
249
+
250
+ export interface VoidExpression extends Node {
251
+ readonly kind: SyntaxKind.VoidExpression;
252
+ readonly expression?: Expression;
253
+ }
254
+
255
+ export interface DeleteExpression extends Node {
256
+ readonly kind: SyntaxKind.DeleteExpression;
257
+ readonly expression: Expression;
258
+ }
259
+
260
+ export interface AwaitExpression extends Node {
261
+ readonly kind: SyntaxKind.AwaitExpression;
262
+ readonly expression: Expression;
263
+ }
264
+
265
+ export interface YieldExpression extends Node {
266
+ readonly kind: SyntaxKind.YieldExpression;
267
+ readonly expression?: Expression;
268
+ readonly delegate: boolean;
269
+ }
270
+
271
+ export interface TaggedTemplateExpression extends Node {
272
+ readonly kind: SyntaxKind.TaggedTemplateExpression;
273
+ readonly tag: Expression;
274
+ readonly template: TemplateLiteral | NoSubstitutionTemplateLiteral;
275
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Syntax kinds and node flags for the xbintsc AST.
3
+ *
4
+ * These numeric/string tags are the discriminants used throughout the binder,
5
+ * checker and code generator to switch exhaustively over nodes.
6
+ */
7
+
8
+ export const enum SyntaxKind {
9
+ // Markers
10
+ Unknown = 0,
11
+ EndOfFileToken = 1,
12
+ SourceFile = 300,
13
+ QualifiedName = 301,
14
+ ExpressionWithTypeArguments = 302,
15
+ ImportType = 303,
16
+
17
+ // Trivia-ish
18
+ Identifier = 2,
19
+ PrivateIdentifier = 3,
20
+
21
+ // Literals
22
+ NumericLiteral = 4,
23
+ BigIntLiteral = 5,
24
+ StringLiteral = 6,
25
+ NoSubstitutionTemplateLiteral = 7,
26
+ TemplateLiteral = 8,
27
+ TemplateSpan = 9,
28
+ RegularExpressionLiteral = 10,
29
+ TrueKeyword = 11,
30
+ FalseKeyword = 12,
31
+ NullKeyword = 13,
32
+ UndefinedKeyword = 14,
33
+ ThisKeyword = 15,
34
+
35
+ // Expressions
36
+ ArrayLiteralExpression = 20,
37
+ ObjectLiteralExpression = 21,
38
+ PropertyAssignment = 22,
39
+ ShorthandPropertyAssignment = 23,
40
+ SpreadElement = 24,
41
+ FunctionExpression = 25,
42
+ ArrowFunction = 26,
43
+ ClassExpression = 27,
44
+ CallExpression = 28,
45
+ NewExpression = 29,
46
+ PropertyAccessExpression = 30,
47
+ ElementAccessExpression = 31,
48
+ ParenthesizedExpression = 32,
49
+ PrefixUnaryExpression = 33,
50
+ PostfixUnaryExpression = 34,
51
+ BinaryExpression = 35,
52
+ ConditionalExpression = 36,
53
+ AsExpression = 37,
54
+ SatisfiesExpression = 38,
55
+ NonNullExpression = 39,
56
+ TypeOfExpression = 40,
57
+ VoidExpression = 41,
58
+ DeleteExpression = 42,
59
+ AwaitExpression = 43,
60
+ YieldExpression = 44,
61
+ TaggedTemplateExpression = 45,
62
+
63
+ // Statements
64
+ ExpressionStatement = 60,
65
+ Block = 61,
66
+ EmptyStatement = 62,
67
+ DebuggerStatement = 63,
68
+ VariableStatement = 64,
69
+ VariableDeclarationList = 65,
70
+ VariableDeclaration = 66,
71
+ IfStatement = 67,
72
+ WhileStatement = 68,
73
+ DoStatement = 69,
74
+ ForStatement = 70,
75
+ ForOfStatement = 71,
76
+ ForInStatement = 72,
77
+ ReturnStatement = 73,
78
+ BreakStatement = 74,
79
+ ContinueStatement = 75,
80
+ ThrowStatement = 76,
81
+ TryStatement = 77,
82
+ CatchClause = 78,
83
+ SwitchStatement = 79,
84
+ CaseClause = 80,
85
+ DefaultClause = 81,
86
+ LabeledStatement = 82,
87
+
88
+ // Declarations
89
+ FunctionDeclaration = 100,
90
+ ClassDeclaration = 101,
91
+ InterfaceDeclaration = 102,
92
+ TypeAliasDeclaration = 103,
93
+ EnumDeclaration = 104,
94
+ EnumMember = 105,
95
+ ModuleDeclaration = 106,
96
+ Parameter = 107,
97
+ TypeParameterDeclaration = 108,
98
+ PropertyDeclaration = 109,
99
+ MethodDeclaration = 110,
100
+ ConstructorDeclaration = 111,
101
+ HeritageClause = 112,
102
+ ImportDeclaration = 113,
103
+ ImportClause = 114,
104
+ NamedImports = 115,
105
+ ImportSpecifier = 116,
106
+ NamespaceImport = 117,
107
+ ExportDeclaration = 118,
108
+ ExportAssignment = 119,
109
+ NamedExports = 120,
110
+ ExportSpecifier = 121,
111
+
112
+ // Types
113
+ TypeReference = 200,
114
+ TypePredicate = 201,
115
+ AnyKeywordType = 202,
116
+ UnknownKeywordType = 203,
117
+ NumberKeywordType = 204,
118
+ BigIntKeywordType = 205,
119
+ StringKeywordType = 206,
120
+ BooleanKeywordType = 207,
121
+ SymbolKeywordType = 208,
122
+ VoidKeywordType = 209,
123
+ UndefinedKeywordType = 210,
124
+ NullKeywordType = 211,
125
+ NeverKeywordType = 212,
126
+ ObjectKeywordType = 213,
127
+ ThisKeywordType = 214,
128
+ LiteralType = 215,
129
+ ArrayType = 216,
130
+ TupleType = 217,
131
+ UnionType = 218,
132
+ IntersectionType = 219,
133
+ FunctionType = 220,
134
+ TypeLiteral = 221,
135
+ PropertySignature = 222,
136
+ MethodSignature = 223,
137
+ IndexSignature = 224,
138
+ ParenthesizedType = 225,
139
+ TypeQuery = 226,
140
+ IndexedAccessType = 227,
141
+ TypeOperator = 228,
142
+ MappedType = 229,
143
+ ConditionalType = 230,
144
+ InferType = 231,
145
+ OptionalType = 232,
146
+ RestType = 233,
147
+ }
148
+
149
+ export const enum NodeFlags {
150
+ None = 0,
151
+ Let = 1 << 0,
152
+ Const = 1 << 1,
153
+ Var = 1 << 2,
154
+ Exported = 1 << 3,
155
+ Default = 1 << 4,
156
+ Declare = 1 << 5,
157
+ Async = 1 << 6,
158
+ Generator = 1 << 7,
159
+ Ambient = 1 << 8,
160
+ Readonly = 1 << 9,
161
+ Abstract = 1 << 10,
162
+ Optional = 1 << 11,
163
+ }
164
+
165
+ export const enum ModifierKind {
166
+ Export = "export",
167
+ Default = "default",
168
+ Declare = "declare",
169
+ Abstract = "abstract",
170
+ Public = "public",
171
+ Private = "private",
172
+ Protected = "protected",
173
+ Static = "static",
174
+ Readonly = "readonly",
175
+ Async = "async",
176
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Import and export declaration nodes of the xbintsc AST.
3
+ */
4
+
5
+ import { SyntaxKind } from "./kinds.js";
6
+ import type { Expression, Modifier, Node } from "./common.js";
7
+ import type { Identifier, StringLiteral } from "./expressions.js";
8
+
9
+ // ---------------------------------------------------------------------------
10
+ // Modules
11
+ // ---------------------------------------------------------------------------
12
+
13
+ export interface ImportSpecifier extends Node {
14
+ readonly kind: SyntaxKind.ImportSpecifier;
15
+ readonly propertyName?: Identifier;
16
+ readonly name: Identifier;
17
+ readonly isTypeOnly: boolean;
18
+ }
19
+
20
+ export interface NamedImports extends Node {
21
+ readonly kind: SyntaxKind.NamedImports;
22
+ readonly elements: ImportSpecifier[];
23
+ }
24
+
25
+ export interface NamespaceImport extends Node {
26
+ readonly kind: SyntaxKind.NamespaceImport;
27
+ readonly name: Identifier;
28
+ }
29
+
30
+ export interface ImportClause extends Node {
31
+ readonly kind: SyntaxKind.ImportClause;
32
+ readonly name?: Identifier;
33
+ readonly namedBindings?: NamedImports | NamespaceImport;
34
+ readonly isTypeOnly: boolean;
35
+ }
36
+
37
+ export interface ImportDeclaration extends Node {
38
+ readonly kind: SyntaxKind.ImportDeclaration;
39
+ readonly importClause?: ImportClause;
40
+ readonly moduleSpecifier: StringLiteral;
41
+ readonly attributes: { name: string; value: string }[];
42
+ }
43
+
44
+ export interface ExportSpecifier extends Node {
45
+ readonly kind: SyntaxKind.ExportSpecifier;
46
+ readonly propertyName?: Identifier;
47
+ readonly name: Identifier;
48
+ readonly isTypeOnly: boolean;
49
+ }
50
+
51
+ export interface NamedExports extends Node {
52
+ readonly kind: SyntaxKind.NamedExports;
53
+ readonly elements: ExportSpecifier[];
54
+ }
55
+
56
+ export interface ExportDeclaration extends Node {
57
+ readonly kind: SyntaxKind.ExportDeclaration;
58
+ readonly modifiers: Modifier[];
59
+ readonly exportClause?: NamedExports | NamespaceExport;
60
+ readonly moduleSpecifier?: StringLiteral;
61
+ readonly isTypeOnly: boolean;
62
+ }
63
+
64
+ export interface NamespaceExport extends Node {
65
+ readonly kind: SyntaxKind.NamespaceImport;
66
+ readonly name: Identifier;
67
+ }
68
+
69
+ export interface ExportAssignment extends Node {
70
+ readonly kind: SyntaxKind.ExportAssignment;
71
+ readonly isExportEquals: boolean;
72
+ readonly expression: Expression;
73
+ }