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,461 @@
1
+ /**
2
+ * Declaration parsing: functions, classes, interfaces, type aliases, enums,
3
+ * namespaces and type members.
4
+ */
5
+ import { DiagnosticCode } from "../diagnostics/diagnostic.js";
6
+ import { TokenKind } from "../lexer/token.js";
7
+ import { ModifierKind, NodeFlags, SyntaxKind, } from "../ast/nodes.js";
8
+ import { expressionToPropertyName } from "./helpers.js";
9
+ export const declarationMethods = {
10
+ // -- functions ------------------------------------------------------------
11
+ parseFunctionDeclaration(modifiers) {
12
+ const start = this.parseExpected(TokenKind.FunctionKeyword).start;
13
+ let flags = NodeFlags.None;
14
+ if (this.at(TokenKind.Asterisk)) {
15
+ this.nextToken();
16
+ flags |= NodeFlags.Generator;
17
+ }
18
+ if (this.hasModifier(modifiers, ModifierKind.Async))
19
+ flags |= NodeFlags.Async;
20
+ if (this.hasModifier(modifiers, ModifierKind.Declare))
21
+ flags |= NodeFlags.Declare;
22
+ let name;
23
+ if (!this.at(TokenKind.OpenParen) && !this.at(TokenKind.LessThan))
24
+ name = this.parseIdentifier();
25
+ const typeParameters = this.parseTypeParameters();
26
+ const parameters = this.parseParameters();
27
+ let returnType;
28
+ if (this.at(TokenKind.Colon)) {
29
+ this.nextToken();
30
+ returnType = this.parseReturnType();
31
+ }
32
+ let body;
33
+ if (this.at(TokenKind.OpenBrace))
34
+ body = this.parseBlock();
35
+ else
36
+ this.parseSemicolon();
37
+ return {
38
+ kind: SyntaxKind.FunctionDeclaration,
39
+ name,
40
+ modifiers,
41
+ typeParameters,
42
+ parameters,
43
+ returnType,
44
+ body,
45
+ flags,
46
+ start,
47
+ end: body?.end ?? returnType?.end ?? parameters[parameters.length - 1]?.end ?? start,
48
+ };
49
+ },
50
+ parseTypeParameters() {
51
+ if (!this.at(TokenKind.LessThan))
52
+ return [];
53
+ this.nextToken();
54
+ const params = [];
55
+ while (!this.at(TokenKind.GreaterThan) && !this.at(TokenKind.EndOfFile)) {
56
+ const name = this.parseIdentifier();
57
+ let constraint;
58
+ if (this.at(TokenKind.ExtendsKeyword)) {
59
+ this.nextToken();
60
+ constraint = this.parseType();
61
+ }
62
+ let defaultType;
63
+ if (this.at(TokenKind.Equals)) {
64
+ this.nextToken();
65
+ defaultType = this.parseType();
66
+ }
67
+ params.push({ kind: SyntaxKind.TypeParameterDeclaration, name, constraint, default: defaultType, start: name.start, end: defaultType?.end ?? constraint?.end ?? name.end });
68
+ if (this.at(TokenKind.Comma))
69
+ this.nextToken();
70
+ else
71
+ break;
72
+ }
73
+ this.parseGreaterThan();
74
+ return params;
75
+ },
76
+ /** Consume a `>` that may have been lexed as `>>` / `>>>`, splitting it. */
77
+ parseGreaterThan() {
78
+ const token = this.token;
79
+ if (token.kind === TokenKind.GreaterThan) {
80
+ this.nextToken();
81
+ return;
82
+ }
83
+ if (token.kind === TokenKind.GreaterThanGreaterThan || token.kind === TokenKind.GreaterThanGreaterThanGreaterThan) {
84
+ const extra = token.kind === TokenKind.GreaterThanGreaterThan ? 1 : 2;
85
+ this.tokens[this.index] = {
86
+ kind: extra === 1 ? TokenKind.GreaterThan : TokenKind.GreaterThanGreaterThan,
87
+ start: token.start + 1,
88
+ end: token.end,
89
+ text: token.text.slice(1),
90
+ precededByLineBreak: false,
91
+ };
92
+ return;
93
+ }
94
+ this.parseExpected(TokenKind.GreaterThan);
95
+ },
96
+ parseParameters() {
97
+ this.parseExpected(TokenKind.OpenParen);
98
+ const params = [];
99
+ while (!this.at(TokenKind.CloseParen) && !this.at(TokenKind.EndOfFile)) {
100
+ const start = this.token.start;
101
+ const modifiers = this.tryParseModifiers();
102
+ let dotDotDotToken = false;
103
+ if (this.at(TokenKind.DotDotDot)) {
104
+ this.nextToken();
105
+ dotDotDotToken = true;
106
+ }
107
+ const name = this.parseIdentifier();
108
+ let questionToken = false;
109
+ if (this.at(TokenKind.Question)) {
110
+ this.nextToken();
111
+ questionToken = true;
112
+ }
113
+ let type;
114
+ if (this.at(TokenKind.Colon)) {
115
+ this.nextToken();
116
+ type = this.parseType();
117
+ }
118
+ let initializer;
119
+ if (this.at(TokenKind.Equals)) {
120
+ this.nextToken();
121
+ initializer = this.parseAssignmentExpression();
122
+ }
123
+ params.push({ kind: SyntaxKind.Parameter, name, modifiers, dotDotDotToken, questionToken, type, initializer, start, end: initializer?.end ?? type?.end ?? name.end });
124
+ if (this.at(TokenKind.Comma))
125
+ this.nextToken();
126
+ else
127
+ break;
128
+ }
129
+ this.parseExpected(TokenKind.CloseParen);
130
+ return params;
131
+ },
132
+ parseReturnType() {
133
+ if (this.at(TokenKind.AssertsKeyword)) {
134
+ const start = this.nextToken().start;
135
+ let paramName;
136
+ if (this.isIdentifierLike(this.token) || this.at(TokenKind.ThisKeyword))
137
+ paramName = this.parseIdentifierName();
138
+ let predicateType;
139
+ if (this.at(TokenKind.IsKeyword)) {
140
+ this.nextToken();
141
+ predicateType = this.parseType();
142
+ }
143
+ const stub = { kind: SyntaxKind.Identifier, text: paramName?.text ?? "this", start: paramName?.start ?? start, end: paramName?.end ?? start };
144
+ return { kind: SyntaxKind.TypePredicate, parameterName: stub, type: predicateType, start, end: predicateType?.end ?? start };
145
+ }
146
+ if (this.isIdentifierLike(this.token) && this.atAhead(1, TokenKind.IsKeyword)) {
147
+ const paramName = this.parseIdentifierName();
148
+ this.nextToken();
149
+ const predicateType = this.parseType();
150
+ return { kind: SyntaxKind.TypePredicate, parameterName: paramName, type: predicateType, start: paramName.start, end: predicateType.end };
151
+ }
152
+ return this.parseType();
153
+ },
154
+ // -- classes --------------------------------------------------------------
155
+ parseClassDeclaration(modifiers) {
156
+ const start = this.parseExpected(TokenKind.ClassKeyword).start;
157
+ let name;
158
+ if (!this.at(TokenKind.OpenBrace) && !this.at(TokenKind.ExtendsKeyword) && !this.at(TokenKind.ImplementsKeyword)) {
159
+ name = this.parseIdentifier();
160
+ }
161
+ const typeParameters = this.parseTypeParameters();
162
+ const heritage = this.parseHeritageClauses();
163
+ const members = this.parseClassMembers();
164
+ return { kind: SyntaxKind.ClassDeclaration, name, modifiers, typeParameters, heritage, members, start, end: members[members.length - 1]?.end ?? start };
165
+ },
166
+ parseHeritageClauses() {
167
+ const clauses = [];
168
+ while (this.at(TokenKind.ExtendsKeyword) || this.at(TokenKind.ImplementsKeyword)) {
169
+ const token = this.nextToken();
170
+ const tokenKind = token.kind === TokenKind.ExtendsKeyword ? "extends" : "implements";
171
+ const types = [];
172
+ do {
173
+ const expression = this.parseLeftHandSideExpression();
174
+ const typeArguments = this.at(TokenKind.LessThan) ? this.parseTypeArguments() : [];
175
+ types.push({ kind: SyntaxKind.ExpressionWithTypeArguments, expression, typeArguments, start: expression.start, end: typeArguments[typeArguments.length - 1]?.end ?? expression.end });
176
+ } while (this.at(TokenKind.Comma) && this.nextToken());
177
+ clauses.push({ kind: SyntaxKind.HeritageClause, token: tokenKind, types, start: token.start, end: types[types.length - 1]?.end ?? token.end });
178
+ }
179
+ return clauses;
180
+ },
181
+ parseClassMembers() {
182
+ this.parseExpected(TokenKind.OpenBrace);
183
+ const members = [];
184
+ while (!this.at(TokenKind.CloseBrace) && !this.at(TokenKind.EndOfFile)) {
185
+ const before = this.consumed;
186
+ const member = this.parseClassElement();
187
+ if (member)
188
+ members.push(member);
189
+ if (this.consumed === before)
190
+ this.nextToken();
191
+ }
192
+ this.parseExpected(TokenKind.CloseBrace);
193
+ return members;
194
+ },
195
+ parseClassElement() {
196
+ const start = this.token.start;
197
+ const modifiers = this.tryParseModifiers();
198
+ if (this.at(TokenKind.Semicolon)) {
199
+ this.nextToken();
200
+ return undefined;
201
+ }
202
+ if (this.at(TokenKind.ConstructorKeyword)) {
203
+ const name = this.nextToken();
204
+ const parameters = this.parseParameters();
205
+ let body;
206
+ if (this.at(TokenKind.OpenBrace))
207
+ body = this.parseBlock();
208
+ else
209
+ this.parseSemicolon();
210
+ const ctor = { kind: SyntaxKind.ConstructorDeclaration, modifiers, parameters, body, start, end: body?.end ?? name.end };
211
+ return ctor;
212
+ }
213
+ let flags = NodeFlags.None;
214
+ if (this.at(TokenKind.Asterisk)) {
215
+ this.nextToken();
216
+ flags |= NodeFlags.Generator;
217
+ }
218
+ if (this.hasModifier(modifiers, ModifierKind.Async))
219
+ flags |= NodeFlags.Async;
220
+ const name = this.parsePropertyName();
221
+ let questionToken = false;
222
+ let exclamationToken = false;
223
+ if (this.at(TokenKind.Question)) {
224
+ this.nextToken();
225
+ questionToken = true;
226
+ }
227
+ if (this.at(TokenKind.Exclamation)) {
228
+ this.nextToken();
229
+ exclamationToken = true;
230
+ }
231
+ const typeParameters = this.at(TokenKind.LessThan) ? this.parseTypeParameters() : [];
232
+ if (this.at(TokenKind.OpenParen)) {
233
+ const parameters = this.parseParameters();
234
+ let returnType;
235
+ if (this.at(TokenKind.Colon)) {
236
+ this.nextToken();
237
+ returnType = this.parseReturnType();
238
+ }
239
+ let body;
240
+ if (this.at(TokenKind.OpenBrace))
241
+ body = this.parseBlock();
242
+ else
243
+ this.parseSemicolon();
244
+ const method = {
245
+ kind: SyntaxKind.MethodDeclaration,
246
+ name,
247
+ modifiers,
248
+ typeParameters,
249
+ parameters,
250
+ returnType,
251
+ body,
252
+ flags,
253
+ optional: questionToken,
254
+ start,
255
+ end: body?.end ?? returnType?.end ?? name.end,
256
+ };
257
+ return method;
258
+ }
259
+ let type;
260
+ if (this.at(TokenKind.Colon)) {
261
+ this.nextToken();
262
+ type = this.parseType();
263
+ }
264
+ let initializer;
265
+ if (this.at(TokenKind.Equals)) {
266
+ this.nextToken();
267
+ initializer = this.parseAssignmentExpression();
268
+ }
269
+ this.parseSemicolon();
270
+ const property = {
271
+ kind: SyntaxKind.PropertyDeclaration,
272
+ name,
273
+ modifiers,
274
+ questionToken,
275
+ exclamationToken,
276
+ type,
277
+ initializer,
278
+ start,
279
+ end: initializer?.end ?? type?.end ?? name.end,
280
+ };
281
+ return property;
282
+ },
283
+ parsePropertyName() {
284
+ const token = this.token;
285
+ if (token.kind === TokenKind.StringLiteral) {
286
+ this.nextToken();
287
+ return { kind: SyntaxKind.StringLiteral, text: token.text, raw: token.text, value: String(token.value ?? ""), start: token.start, end: token.end };
288
+ }
289
+ if (token.kind === TokenKind.NumericLiteral) {
290
+ this.nextToken();
291
+ return { kind: SyntaxKind.NumericLiteral, text: token.text, value: Number(token.value ?? 0), start: token.start, end: token.end };
292
+ }
293
+ if (token.kind === TokenKind.OpenBracket) {
294
+ this.nextToken();
295
+ const expr = this.parseAssignmentExpression();
296
+ this.parseExpected(TokenKind.CloseBracket);
297
+ const name = expressionToPropertyName(expr);
298
+ if (name)
299
+ return name;
300
+ this.error(DiagnosticCode.InvalidTypeSyntax, "Computed property names are not supported by xbintsc");
301
+ return { kind: SyntaxKind.Identifier, text: "<computed>", start: expr.start, end: expr.end };
302
+ }
303
+ return this.parseIdentifierName();
304
+ },
305
+ // -- interfaces / aliases / enums / namespaces ----------------------------
306
+ parseInterfaceDeclaration(modifiers) {
307
+ const start = this.parseExpected(TokenKind.InterfaceKeyword).start;
308
+ const name = this.parseIdentifier();
309
+ const typeParameters = this.parseTypeParameters();
310
+ const heritage = this.parseHeritageClauses();
311
+ const members = this.parseTypeMembers();
312
+ return { kind: SyntaxKind.InterfaceDeclaration, name, modifiers, typeParameters, heritage, members, start, end: members[members.length - 1]?.end ?? name.end };
313
+ },
314
+ parseTypeAliasDeclaration(modifiers) {
315
+ const start = this.parseExpected(TokenKind.TypeKeyword).start;
316
+ const name = this.parseIdentifier();
317
+ const typeParameters = this.parseTypeParameters();
318
+ this.parseExpected(TokenKind.Equals);
319
+ const type = this.parseType();
320
+ this.parseSemicolon();
321
+ return { kind: SyntaxKind.TypeAliasDeclaration, name, modifiers, typeParameters, type, start, end: type.end };
322
+ },
323
+ parseEnumDeclaration(modifiers) {
324
+ const start = this.parseExpected(TokenKind.EnumKeyword).start;
325
+ const name = this.parseIdentifier();
326
+ this.parseExpected(TokenKind.OpenBrace);
327
+ const members = [];
328
+ while (!this.at(TokenKind.CloseBrace) && !this.at(TokenKind.EndOfFile)) {
329
+ const memberName = this.parsePropertyName();
330
+ let initializer;
331
+ if (this.at(TokenKind.Equals)) {
332
+ this.nextToken();
333
+ initializer = this.parseAssignmentExpression();
334
+ }
335
+ members.push({ kind: SyntaxKind.EnumMember, name: memberName, initializer, start: memberName.start, end: initializer?.end ?? memberName.end });
336
+ if (this.at(TokenKind.Comma))
337
+ this.nextToken();
338
+ else
339
+ break;
340
+ }
341
+ const close = this.parseExpected(TokenKind.CloseBrace);
342
+ return { kind: SyntaxKind.EnumDeclaration, name, modifiers, members, start, end: close.end };
343
+ },
344
+ parseModuleDeclaration(modifiers) {
345
+ const start = this.nextToken().start;
346
+ let name;
347
+ if (this.at(TokenKind.StringLiteral)) {
348
+ const token = this.nextToken();
349
+ name = { kind: SyntaxKind.StringLiteral, text: token.text, raw: token.text, value: String(token.value ?? ""), start: token.start, end: token.end };
350
+ }
351
+ else {
352
+ name = this.parseIdentifierName();
353
+ }
354
+ while (this.at(TokenKind.Dot)) {
355
+ this.nextToken();
356
+ this.parseIdentifierName();
357
+ }
358
+ let body;
359
+ if (this.at(TokenKind.OpenBrace))
360
+ body = this.parseBlock();
361
+ else
362
+ this.parseSemicolon();
363
+ return { kind: SyntaxKind.ModuleDeclaration, name, modifiers, body, start, end: body?.end ?? name.end };
364
+ },
365
+ // -- type members ---------------------------------------------------------
366
+ parseTypeMembers() {
367
+ this.parseExpected(TokenKind.OpenBrace);
368
+ const members = [];
369
+ while (!this.at(TokenKind.CloseBrace) && !this.at(TokenKind.EndOfFile)) {
370
+ const before = this.consumed;
371
+ const member = this.parseTypeMember();
372
+ if (member)
373
+ members.push(member);
374
+ if (this.consumed === before)
375
+ this.nextToken();
376
+ }
377
+ this.parseExpected(TokenKind.CloseBrace);
378
+ return members;
379
+ },
380
+ parseTypeMember() {
381
+ const start = this.token.start;
382
+ const readonlyToken = this.at(TokenKind.ReadonlyKeyword);
383
+ if (readonlyToken)
384
+ this.nextToken();
385
+ if (this.at(TokenKind.OpenParen) || this.at(TokenKind.LessThan)) {
386
+ const typeParameters = this.parseTypeParameters();
387
+ const parameters = this.parseParameters();
388
+ let returnType;
389
+ if (this.at(TokenKind.Colon)) {
390
+ this.nextToken();
391
+ returnType = this.parseType();
392
+ }
393
+ this.parseSemicolonOrComma();
394
+ const name = { kind: SyntaxKind.Identifier, text: "__call", start, end: start };
395
+ return { kind: SyntaxKind.MethodSignature, name, questionToken: false, typeParameters, parameters, returnType, start, end: returnType?.end ?? start };
396
+ }
397
+ if (this.at(TokenKind.OpenBracket) && this.atAhead(1, TokenKind.Identifier)) {
398
+ const saveIndex = this.index;
399
+ const savePos = this.scanner.position;
400
+ const savedTokens = this.tokens.slice();
401
+ this.nextToken();
402
+ const parameters = [];
403
+ let ok = true;
404
+ try {
405
+ const paramName = this.parseIdentifier();
406
+ let type;
407
+ if (this.at(TokenKind.Colon)) {
408
+ this.nextToken();
409
+ type = this.parseType();
410
+ }
411
+ else
412
+ ok = false;
413
+ this.parseExpected(TokenKind.CloseBracket);
414
+ parameters.push({ kind: SyntaxKind.Parameter, name: paramName, modifiers: [], dotDotDotToken: false, questionToken: false, type, start: paramName.start, end: type?.end ?? paramName.end });
415
+ }
416
+ catch {
417
+ ok = false;
418
+ }
419
+ if (ok && this.at(TokenKind.Colon)) {
420
+ this.nextToken();
421
+ const type = this.parseType();
422
+ this.parseSemicolonOrComma();
423
+ return { kind: SyntaxKind.IndexSignature, parameters, type, start, end: type.end };
424
+ }
425
+ this.index = saveIndex;
426
+ this.tokens = savedTokens;
427
+ this.scanner.seek(savePos);
428
+ }
429
+ const name = this.parsePropertyName();
430
+ let questionToken = false;
431
+ if (this.at(TokenKind.Question)) {
432
+ this.nextToken();
433
+ questionToken = true;
434
+ }
435
+ const typeParameters = this.at(TokenKind.LessThan) ? this.parseTypeParameters() : [];
436
+ if (this.at(TokenKind.OpenParen) || typeParameters.length > 0) {
437
+ const parameters = this.parseParameters();
438
+ let returnType;
439
+ if (this.at(TokenKind.Colon)) {
440
+ this.nextToken();
441
+ returnType = this.parseType();
442
+ }
443
+ this.parseSemicolonOrComma();
444
+ const sig = { kind: SyntaxKind.MethodSignature, name, questionToken, typeParameters, parameters, returnType, start, end: returnType?.end ?? name.end };
445
+ return sig;
446
+ }
447
+ let type;
448
+ if (this.at(TokenKind.Colon)) {
449
+ this.nextToken();
450
+ type = this.parseType();
451
+ }
452
+ this.parseSemicolonOrComma();
453
+ const signature = { kind: SyntaxKind.PropertySignature, name, questionToken, readonlyToken, type, start, end: type?.end ?? name.end };
454
+ return signature;
455
+ },
456
+ parseSemicolonOrComma() {
457
+ if (this.at(TokenKind.Semicolon) || this.at(TokenKind.Comma))
458
+ this.nextToken();
459
+ },
460
+ };
461
+ //# sourceMappingURL=declarations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declarations.js","sourceRoot":"","sources":["../../../src/parser/declarations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Expression parsing: assignment/conditional/binary/unary operators, calls,
3
+ * member access, literals, arrow functions, templates and regexes.
4
+ */
5
+ import { type ArrowFunction, type Expression, type NewExpression } from "../ast/nodes.js";
6
+ import type { Parser } from "./parser.js";
7
+ export interface ExpressionMethods {
8
+ parseExpression(this: Parser, noIn?: boolean): Expression;
9
+ parseAssignmentExpression(this: Parser, noIn?: boolean): Expression;
10
+ tryParseArrowFunction(this: Parser): ArrowFunction | undefined;
11
+ countTypeParameterTokens(this: Parser, cursor: number): number;
12
+ findMatchingParen(this: Parser, cursor: number): number;
13
+ skipTypeTokens(this: Parser, startIndex: number): number;
14
+ parseConditionalExpression(this: Parser, noIn: boolean): Expression;
15
+ parseBinaryExpression(this: Parser, minPrecedence: number, noIn: boolean): Expression;
16
+ parseUnaryExpression(this: Parser): Expression;
17
+ parsePostfixExpression(this: Parser): Expression;
18
+ parseLeftHandSideExpression(this: Parser): Expression;
19
+ parseNewExpression(this: Parser): NewExpression;
20
+ parseMemberOnlyExpression(this: Parser): Expression;
21
+ parsePrimaryExpression(this: Parser): Expression;
22
+ parseCallAndMemberTail(this: Parser, base: Expression): Expression;
23
+ previousEnd(this: Parser, args: readonly Expression[], fallback: number): number;
24
+ parsePropertyAccess(this: Parser, expression: Expression): Expression;
25
+ parseArguments(this: Parser): Expression[];
26
+ }
27
+ export declare const expressionMethods: ExpressionMethods;