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.
- package/README.md +14 -13
- package/dist/src/ast/common.d.ts +33 -0
- package/dist/src/ast/common.js +7 -0
- package/dist/src/ast/common.js.map +1 -0
- package/dist/src/ast/declarations.d.ts +110 -0
- package/dist/src/ast/declarations.js +5 -0
- package/dist/src/ast/declarations.js.map +1 -0
- package/dist/src/ast/expressions.d.ts +219 -0
- package/dist/src/ast/expressions.js +6 -0
- package/dist/src/ast/expressions.js.map +1 -0
- package/dist/src/ast/kinds.d.ts +160 -0
- package/dist/src/ast/kinds.js +171 -0
- package/dist/src/ast/kinds.js.map +1 -0
- package/dist/src/ast/modules.d.ts +61 -0
- package/dist/src/ast/modules.js +5 -0
- package/dist/src/ast/modules.js.map +1 -0
- package/dist/src/ast/nodes.d.ts +11 -839
- package/dist/src/ast/nodes.js +11 -237
- package/dist/src/ast/nodes.js.map +1 -1
- package/dist/src/ast/operators.d.ts +71 -0
- package/dist/src/ast/operators.js +77 -0
- package/dist/src/ast/operators.js.map +1 -0
- package/dist/src/ast/statements.d.ts +120 -0
- package/dist/src/ast/statements.js +5 -0
- package/dist/src/ast/statements.js.map +1 -0
- package/dist/src/ast/types.d.ts +123 -0
- package/dist/src/ast/types.js +6 -0
- package/dist/src/ast/types.js.map +1 -0
- package/dist/src/codegen/generator/calls.d.ts +22 -0
- package/dist/src/codegen/generator/calls.js +301 -0
- package/dist/src/codegen/generator/calls.js.map +1 -0
- package/dist/src/codegen/generator/context.d.ts +45 -0
- package/dist/src/codegen/generator/context.js +128 -0
- package/dist/src/codegen/generator/context.js.map +1 -0
- package/dist/src/codegen/generator/expressions.d.ts +22 -0
- package/dist/src/codegen/generator/expressions.js +383 -0
- package/dist/src/codegen/generator/expressions.js.map +1 -0
- package/dist/src/codegen/generator/generator.d.ts +22 -0
- package/dist/src/codegen/generator/generator.js +21 -0
- package/dist/src/codegen/generator/generator.js.map +1 -0
- package/dist/src/codegen/generator/module.d.ts +15 -0
- package/dist/src/codegen/generator/module.js +114 -0
- package/dist/src/codegen/generator/module.js.map +1 -0
- package/dist/src/codegen/generator/state.d.ts +40 -0
- package/dist/src/codegen/generator/state.js +84 -0
- package/dist/src/codegen/generator/state.js.map +1 -0
- package/dist/src/codegen/generator/statements.d.ts +22 -0
- package/dist/src/codegen/generator/statements.js +425 -0
- package/dist/src/codegen/generator/statements.js.map +1 -0
- package/dist/src/codegen/generator/tables.d.ts +19 -0
- package/dist/src/codegen/generator/tables.js +153 -0
- package/dist/src/codegen/generator/tables.js.map +1 -0
- package/dist/src/codegen/llvm.d.ts +4 -13
- package/dist/src/codegen/llvm.js +4 -1159
- package/dist/src/codegen/llvm.js.map +1 -1
- package/dist/src/driver/compiler.js +13 -4
- package/dist/src/driver/compiler.js.map +1 -1
- package/dist/src/lexer/char.d.ts +78 -0
- package/dist/src/lexer/char.js +106 -0
- package/dist/src/lexer/char.js.map +1 -0
- package/dist/src/lexer/scanner.js +1 -98
- package/dist/src/lexer/scanner.js.map +1 -1
- package/dist/src/parser/context.d.ts +58 -0
- package/dist/src/parser/context.js +174 -0
- package/dist/src/parser/context.js.map +1 -0
- package/dist/src/parser/declarations.d.ts +26 -0
- package/dist/src/parser/declarations.js +461 -0
- package/dist/src/parser/declarations.js.map +1 -0
- package/dist/src/parser/expressions.d.ts +27 -0
- package/dist/src/parser/expressions.js +437 -0
- package/dist/src/parser/expressions.js.map +1 -0
- package/dist/src/parser/helpers.d.ts +7 -0
- package/dist/src/parser/helpers.js +36 -0
- package/dist/src/parser/helpers.js.map +1 -0
- package/dist/src/parser/literals.d.ts +16 -0
- package/dist/src/parser/literals.js +193 -0
- package/dist/src/parser/literals.js.map +1 -0
- package/dist/src/parser/modules.d.ts +12 -0
- package/dist/src/parser/modules.js +175 -0
- package/dist/src/parser/modules.js.map +1 -0
- package/dist/src/parser/operators.d.ts +12 -0
- package/dist/src/parser/operators.js +172 -0
- package/dist/src/parser/operators.js.map +1 -0
- package/dist/src/parser/parser.d.ts +17 -122
- package/dist/src/parser/parser.js +18 -2307
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/speculation.d.ts +6 -0
- package/dist/src/parser/speculation.js +10 -0
- package/dist/src/parser/speculation.js.map +1 -0
- package/dist/src/parser/statements.d.ts +28 -0
- package/dist/src/parser/statements.js +402 -0
- package/dist/src/parser/statements.js.map +1 -0
- package/dist/src/parser/types.d.ts +21 -0
- package/dist/src/parser/types.js +338 -0
- package/dist/src/parser/types.js.map +1 -0
- package/dist/tests/e2e/compile.test.js +122 -2
- package/dist/tests/e2e/compile.test.js.map +1 -1
- package/dist/tests/parser/parser.test.js +9 -1
- package/dist/tests/parser/parser.test.js.map +1 -1
- package/package.json +1 -1
- package/runtime/rt.h +32 -0
- package/runtime/rt_internal.h +106 -0
- package/runtime/xt_alloc.c +38 -0
- package/runtime/xt_builtins.c +192 -0
- package/runtime/xt_containers.c +225 -0
- package/runtime/xt_io.c +133 -0
- package/runtime/xt_stdlib.c +502 -0
- package/runtime/xt_values.c +291 -0
- package/scripts/build-runtime.mjs +8 -1
- package/src/ast/common.ts +210 -0
- package/src/ast/declarations.ts +130 -0
- package/src/ast/expressions.ts +275 -0
- package/src/ast/kinds.ts +176 -0
- package/src/ast/modules.ts +73 -0
- package/src/ast/nodes.ts +11 -1101
- package/src/ast/operators.ts +76 -0
- package/src/ast/statements.ts +148 -0
- package/src/ast/types.ts +173 -0
- package/src/codegen/generator/calls.ts +355 -0
- package/src/codegen/generator/context.ts +156 -0
- package/src/codegen/generator/expressions.ts +431 -0
- package/src/codegen/generator/generator.ts +35 -0
- package/src/codegen/generator/module.ts +139 -0
- package/src/codegen/generator/state.ts +126 -0
- package/src/codegen/generator/statements.ts +474 -0
- package/src/codegen/generator/tables.ts +171 -0
- package/src/codegen/llvm.ts +4 -1305
- package/src/driver/compiler.ts +17 -5
- package/src/lexer/char.ts +116 -0
- package/src/lexer/scanner.ts +9 -109
- package/src/parser/context.ts +196 -0
- package/src/parser/declarations.ts +502 -0
- package/src/parser/expressions.ts +465 -0
- package/src/parser/helpers.ts +42 -0
- package/src/parser/literals.ts +207 -0
- package/src/parser/modules.ts +194 -0
- package/src/parser/operators.ts +181 -0
- package/src/parser/parser.ts +35 -2369
- package/src/parser/speculation.ts +9 -0
- package/src/parser/statements.ts +457 -0
- package/src/parser/types.ts +365 -0
- package/runtime/xt_runtime.c +0 -682
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type parsing: unions, intersections, operators, references, function/tuple
|
|
3
|
+
* types, type literals and mapped types.
|
|
4
|
+
*/
|
|
5
|
+
import { DiagnosticCode } from "../diagnostics/diagnostic.js";
|
|
6
|
+
import { TokenKind } from "../lexer/token.js";
|
|
7
|
+
import { TypeOperator } from "../ast/operators.js";
|
|
8
|
+
import { SyntaxKind, } from "../ast/nodes.js";
|
|
9
|
+
export const typeMethods = {
|
|
10
|
+
parseTypeArguments() {
|
|
11
|
+
this.parseExpected(TokenKind.LessThan);
|
|
12
|
+
const types = [];
|
|
13
|
+
while (!this.at(TokenKind.GreaterThan) && !this.at(TokenKind.EndOfFile)) {
|
|
14
|
+
types.push(this.parseType());
|
|
15
|
+
if (this.at(TokenKind.Comma))
|
|
16
|
+
this.nextToken();
|
|
17
|
+
else
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
this.parseGreaterThan();
|
|
21
|
+
return types;
|
|
22
|
+
},
|
|
23
|
+
// -- types ----------------------------------------------------------------
|
|
24
|
+
parseType() {
|
|
25
|
+
const start = this.token.start;
|
|
26
|
+
const checkType = this.parseUnionType();
|
|
27
|
+
if (this.at(TokenKind.ExtendsKeyword)) {
|
|
28
|
+
this.nextToken();
|
|
29
|
+
const extendsType = this.parseUnionType();
|
|
30
|
+
this.parseExpected(TokenKind.Question);
|
|
31
|
+
const trueType = this.parseType();
|
|
32
|
+
this.parseExpected(TokenKind.Colon);
|
|
33
|
+
const falseType = this.parseType();
|
|
34
|
+
return { kind: SyntaxKind.ConditionalType, checkType, extendsType, trueType, falseType, start, end: falseType.end };
|
|
35
|
+
}
|
|
36
|
+
return checkType;
|
|
37
|
+
},
|
|
38
|
+
parseUnionType() {
|
|
39
|
+
const start = this.token.start;
|
|
40
|
+
const leading = this.at(TokenKind.Bar);
|
|
41
|
+
if (leading)
|
|
42
|
+
this.nextToken();
|
|
43
|
+
const first = this.parseIntersectionType();
|
|
44
|
+
if (!this.at(TokenKind.Bar))
|
|
45
|
+
return first;
|
|
46
|
+
const types = [first];
|
|
47
|
+
while (this.at(TokenKind.Bar)) {
|
|
48
|
+
this.nextToken();
|
|
49
|
+
types.push(this.parseIntersectionType());
|
|
50
|
+
}
|
|
51
|
+
return { kind: SyntaxKind.UnionType, types, start, end: types[types.length - 1].end };
|
|
52
|
+
},
|
|
53
|
+
parseIntersectionType() {
|
|
54
|
+
const start = this.token.start;
|
|
55
|
+
const leading = this.at(TokenKind.Ampersand);
|
|
56
|
+
if (leading)
|
|
57
|
+
this.nextToken();
|
|
58
|
+
const first = this.parseTypeOperatorOrHigher();
|
|
59
|
+
if (!this.at(TokenKind.Ampersand))
|
|
60
|
+
return first;
|
|
61
|
+
const types = [first];
|
|
62
|
+
while (this.at(TokenKind.Ampersand)) {
|
|
63
|
+
this.nextToken();
|
|
64
|
+
types.push(this.parseTypeOperatorOrHigher());
|
|
65
|
+
}
|
|
66
|
+
return { kind: SyntaxKind.IntersectionType, types, start, end: types[types.length - 1].end };
|
|
67
|
+
},
|
|
68
|
+
parseTypeOperatorOrHigher() {
|
|
69
|
+
const start = this.token.start;
|
|
70
|
+
if (this.at(TokenKind.KeyOfKeyword)) {
|
|
71
|
+
this.nextToken();
|
|
72
|
+
const type = this.parseTypeOperatorOrHigher();
|
|
73
|
+
return { kind: SyntaxKind.TypeOperator, operator: TypeOperator.KeyOf, type, start, end: type.end };
|
|
74
|
+
}
|
|
75
|
+
if (this.at(TokenKind.UniqueKeyword)) {
|
|
76
|
+
this.nextToken();
|
|
77
|
+
const type = this.parseTypeOperatorOrHigher();
|
|
78
|
+
return { kind: SyntaxKind.TypeOperator, operator: TypeOperator.Unique, type, start, end: type.end };
|
|
79
|
+
}
|
|
80
|
+
if (this.at(TokenKind.ReadonlyKeyword)) {
|
|
81
|
+
this.nextToken();
|
|
82
|
+
const type = this.parseTypeOperatorOrHigher();
|
|
83
|
+
return { kind: SyntaxKind.TypeOperator, operator: TypeOperator.Readonly, type, start, end: type.end };
|
|
84
|
+
}
|
|
85
|
+
if (this.at(TokenKind.InferKeyword)) {
|
|
86
|
+
this.nextToken();
|
|
87
|
+
const name = this.parseIdentifier();
|
|
88
|
+
let constraint;
|
|
89
|
+
if (this.at(TokenKind.ExtendsKeyword)) {
|
|
90
|
+
this.nextToken();
|
|
91
|
+
constraint = this.parseType();
|
|
92
|
+
}
|
|
93
|
+
const typeParameter = { kind: SyntaxKind.TypeParameterDeclaration, name, constraint, start: name.start, end: constraint?.end ?? name.end };
|
|
94
|
+
return { kind: SyntaxKind.InferType, typeParameter, start, end: typeParameter.end };
|
|
95
|
+
}
|
|
96
|
+
return this.parsePostfixType();
|
|
97
|
+
},
|
|
98
|
+
parsePostfixType() {
|
|
99
|
+
const start = this.token.start;
|
|
100
|
+
let type = this.parsePrimaryType();
|
|
101
|
+
for (;;) {
|
|
102
|
+
if (this.at(TokenKind.OpenBracket)) {
|
|
103
|
+
this.nextToken();
|
|
104
|
+
if (this.at(TokenKind.CloseBracket)) {
|
|
105
|
+
const close = this.nextToken();
|
|
106
|
+
type = { kind: SyntaxKind.ArrayType, elementType: type, start, end: close.end };
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const indexType = this.parseType();
|
|
110
|
+
const close = this.parseExpected(TokenKind.CloseBracket);
|
|
111
|
+
type = { kind: SyntaxKind.IndexedAccessType, objectType: type, indexType, start, end: close.end };
|
|
112
|
+
}
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (this.at(TokenKind.Question) && this.atAhead(1, TokenKind.Colon)) {
|
|
116
|
+
// Optional tuple member, handled inside tuples only.
|
|
117
|
+
}
|
|
118
|
+
return type;
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
parsePrimaryType() {
|
|
122
|
+
const token = this.token;
|
|
123
|
+
const start = token.start;
|
|
124
|
+
switch (token.kind) {
|
|
125
|
+
case TokenKind.AnyKeyword:
|
|
126
|
+
this.nextToken();
|
|
127
|
+
return { kind: SyntaxKind.AnyKeywordType, start, end: token.end };
|
|
128
|
+
case TokenKind.UnknownKeyword:
|
|
129
|
+
this.nextToken();
|
|
130
|
+
return { kind: SyntaxKind.UnknownKeywordType, start, end: token.end };
|
|
131
|
+
case TokenKind.NumberKeyword:
|
|
132
|
+
this.nextToken();
|
|
133
|
+
return { kind: SyntaxKind.NumberKeywordType, start, end: token.end };
|
|
134
|
+
case TokenKind.BigIntKeyword:
|
|
135
|
+
this.nextToken();
|
|
136
|
+
return { kind: SyntaxKind.BigIntKeywordType, start, end: token.end };
|
|
137
|
+
case TokenKind.StringKeyword:
|
|
138
|
+
this.nextToken();
|
|
139
|
+
return { kind: SyntaxKind.StringKeywordType, start, end: token.end };
|
|
140
|
+
case TokenKind.BooleanKeyword:
|
|
141
|
+
this.nextToken();
|
|
142
|
+
return { kind: SyntaxKind.BooleanKeywordType, start, end: token.end };
|
|
143
|
+
case TokenKind.SymbolKeyword:
|
|
144
|
+
this.nextToken();
|
|
145
|
+
return { kind: SyntaxKind.SymbolKeywordType, start, end: token.end };
|
|
146
|
+
case TokenKind.VoidKeyword:
|
|
147
|
+
this.nextToken();
|
|
148
|
+
return { kind: SyntaxKind.VoidKeywordType, start, end: token.end };
|
|
149
|
+
case TokenKind.UndefinedKeyword:
|
|
150
|
+
this.nextToken();
|
|
151
|
+
return { kind: SyntaxKind.UndefinedKeywordType, start, end: token.end };
|
|
152
|
+
case TokenKind.NullKeyword:
|
|
153
|
+
this.nextToken();
|
|
154
|
+
return { kind: SyntaxKind.NullKeywordType, start, end: token.end };
|
|
155
|
+
case TokenKind.NeverKeyword:
|
|
156
|
+
this.nextToken();
|
|
157
|
+
return { kind: SyntaxKind.NeverKeywordType, start, end: token.end };
|
|
158
|
+
case TokenKind.ObjectKeyword:
|
|
159
|
+
this.nextToken();
|
|
160
|
+
return { kind: SyntaxKind.ObjectKeywordType, start, end: token.end };
|
|
161
|
+
case TokenKind.ThisKeyword:
|
|
162
|
+
this.nextToken();
|
|
163
|
+
return { kind: SyntaxKind.ThisKeywordType, start, end: token.end };
|
|
164
|
+
case TokenKind.TypeOfKeyword: {
|
|
165
|
+
this.nextToken();
|
|
166
|
+
const exprName = this.parseEntityName();
|
|
167
|
+
const typeArguments = this.at(TokenKind.LessThan) ? this.parseTypeArguments() : [];
|
|
168
|
+
return { kind: SyntaxKind.TypeQuery, exprName, typeArguments, start, end: this.token.start };
|
|
169
|
+
}
|
|
170
|
+
case TokenKind.OpenBrace:
|
|
171
|
+
return this.parseTypeLiteral();
|
|
172
|
+
case TokenKind.OpenBracket:
|
|
173
|
+
return this.parseTupleType();
|
|
174
|
+
case TokenKind.OpenParen: {
|
|
175
|
+
const closeIndex = this.findMatchingParen(0);
|
|
176
|
+
if (closeIndex >= 0 && this.lookAhead(closeIndex + 1).kind === TokenKind.EqualsGreaterThan) {
|
|
177
|
+
return this.parseFunctionType();
|
|
178
|
+
}
|
|
179
|
+
this.nextToken();
|
|
180
|
+
const type = this.parseType();
|
|
181
|
+
const close = this.parseExpected(TokenKind.CloseParen);
|
|
182
|
+
return { kind: SyntaxKind.ParenthesizedType, type, start, end: close.end };
|
|
183
|
+
}
|
|
184
|
+
case TokenKind.LessThan:
|
|
185
|
+
return this.parseFunctionType();
|
|
186
|
+
case TokenKind.NewKeyword: {
|
|
187
|
+
this.nextToken();
|
|
188
|
+
return this.parseFunctionType(start);
|
|
189
|
+
}
|
|
190
|
+
case TokenKind.StringLiteral: {
|
|
191
|
+
this.nextToken();
|
|
192
|
+
const literal = this.stringLiteralFromToken(token);
|
|
193
|
+
return { kind: SyntaxKind.LiteralType, literal, start, end: token.end };
|
|
194
|
+
}
|
|
195
|
+
case TokenKind.NumericLiteral: {
|
|
196
|
+
this.nextToken();
|
|
197
|
+
const literal = { kind: SyntaxKind.NumericLiteral, text: token.text, value: Number(token.value ?? 0), start, end: token.end };
|
|
198
|
+
return { kind: SyntaxKind.LiteralType, literal, start, end: token.end };
|
|
199
|
+
}
|
|
200
|
+
case TokenKind.TrueKeyword: {
|
|
201
|
+
this.nextToken();
|
|
202
|
+
const literal = { kind: SyntaxKind.TrueKeyword, value: true, start, end: token.end };
|
|
203
|
+
return { kind: SyntaxKind.LiteralType, literal, start, end: token.end };
|
|
204
|
+
}
|
|
205
|
+
case TokenKind.FalseKeyword: {
|
|
206
|
+
this.nextToken();
|
|
207
|
+
const literal = { kind: SyntaxKind.FalseKeyword, value: false, start, end: token.end };
|
|
208
|
+
return { kind: SyntaxKind.LiteralType, literal, start, end: token.end };
|
|
209
|
+
}
|
|
210
|
+
case TokenKind.Minus: {
|
|
211
|
+
this.nextToken();
|
|
212
|
+
const num = this.parseExpected(TokenKind.NumericLiteral);
|
|
213
|
+
const literal = { kind: SyntaxKind.NumericLiteral, text: `-${num.text}`, value: -Number(num.value ?? 0), start, end: num.end };
|
|
214
|
+
return { kind: SyntaxKind.LiteralType, literal, start, end: num.end };
|
|
215
|
+
}
|
|
216
|
+
case TokenKind.ImportKeyword: {
|
|
217
|
+
// import("...").T - parse loosely and degrade to `any`.
|
|
218
|
+
this.nextToken();
|
|
219
|
+
if (this.at(TokenKind.OpenParen)) {
|
|
220
|
+
this.nextToken();
|
|
221
|
+
if (this.at(TokenKind.StringLiteral))
|
|
222
|
+
this.nextToken();
|
|
223
|
+
this.parseExpected(TokenKind.CloseParen);
|
|
224
|
+
}
|
|
225
|
+
while (this.at(TokenKind.Dot)) {
|
|
226
|
+
this.nextToken();
|
|
227
|
+
this.parseIdentifierName();
|
|
228
|
+
}
|
|
229
|
+
const typeArguments = this.at(TokenKind.LessThan) ? this.parseTypeArguments() : [];
|
|
230
|
+
return { kind: SyntaxKind.AnyKeywordType, start, end: this.token.start, typeArguments };
|
|
231
|
+
}
|
|
232
|
+
default:
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
if (this.isIdentifierLike(token)) {
|
|
236
|
+
const typeName = this.parseEntityName();
|
|
237
|
+
const typeArguments = this.at(TokenKind.LessThan) ? this.parseTypeArguments() : [];
|
|
238
|
+
return { kind: SyntaxKind.TypeReference, typeName, typeArguments, start, end: this.previousTypeEnd(typeArguments, typeName.end) };
|
|
239
|
+
}
|
|
240
|
+
this.error(DiagnosticCode.InvalidTypeSyntax, `Expected a type but found '${token.text || token.kind}'`);
|
|
241
|
+
if (token.kind !== TokenKind.EndOfFile)
|
|
242
|
+
this.nextToken();
|
|
243
|
+
return { kind: SyntaxKind.AnyKeywordType, start, end: token.end };
|
|
244
|
+
},
|
|
245
|
+
previousTypeEnd(typeArguments, fallback) {
|
|
246
|
+
return typeArguments[typeArguments.length - 1]?.end ?? fallback;
|
|
247
|
+
},
|
|
248
|
+
parseEntityName() {
|
|
249
|
+
let left = this.parseIdentifierName();
|
|
250
|
+
while (this.at(TokenKind.Dot)) {
|
|
251
|
+
this.nextToken();
|
|
252
|
+
const right = this.parseIdentifierName();
|
|
253
|
+
left = { kind: SyntaxKind.QualifiedName, left, right, start: left.start, end: right.end };
|
|
254
|
+
}
|
|
255
|
+
return left;
|
|
256
|
+
},
|
|
257
|
+
parseFunctionType(explicitStart) {
|
|
258
|
+
const start = explicitStart ?? this.token.start;
|
|
259
|
+
const typeParameters = this.at(TokenKind.LessThan) ? this.parseTypeParameters() : [];
|
|
260
|
+
const parameters = this.parseParameters();
|
|
261
|
+
this.parseExpected(TokenKind.EqualsGreaterThan);
|
|
262
|
+
const returnType = this.parseReturnType();
|
|
263
|
+
return { kind: SyntaxKind.FunctionType, typeParameters, parameters, returnType, start, end: returnType.end };
|
|
264
|
+
},
|
|
265
|
+
parseTupleType() {
|
|
266
|
+
const open = this.parseExpected(TokenKind.OpenBracket);
|
|
267
|
+
const elements = [];
|
|
268
|
+
while (!this.at(TokenKind.CloseBracket) && !this.at(TokenKind.EndOfFile)) {
|
|
269
|
+
let element;
|
|
270
|
+
if (this.at(TokenKind.DotDotDot)) {
|
|
271
|
+
const restStart = this.nextToken().start;
|
|
272
|
+
const type = this.parseType();
|
|
273
|
+
element = { kind: SyntaxKind.RestType, type, start: restStart, end: type.end };
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
element = this.parseType();
|
|
277
|
+
}
|
|
278
|
+
if (this.at(TokenKind.Question)) {
|
|
279
|
+
const end = this.nextToken().end;
|
|
280
|
+
element = { kind: SyntaxKind.OptionalType, type: element, start: element.start, end };
|
|
281
|
+
}
|
|
282
|
+
elements.push(element);
|
|
283
|
+
if (this.at(TokenKind.Comma))
|
|
284
|
+
this.nextToken();
|
|
285
|
+
else
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
const close = this.parseExpected(TokenKind.CloseBracket);
|
|
289
|
+
return { kind: SyntaxKind.TupleType, elements, start: open.start, end: close.end };
|
|
290
|
+
},
|
|
291
|
+
parseTypeLiteral() {
|
|
292
|
+
const start = this.token.start;
|
|
293
|
+
// Detect mapped type: { [K in T]: U }
|
|
294
|
+
let cursor = 0;
|
|
295
|
+
if (this.atAhead(1, TokenKind.OpenBracket)) {
|
|
296
|
+
cursor = 1;
|
|
297
|
+
if (this.atAhead(2, TokenKind.Identifier)) {
|
|
298
|
+
let i = 3;
|
|
299
|
+
if (this.lookAhead(i).kind === TokenKind.InKeyword) {
|
|
300
|
+
const open = this.parseExpected(TokenKind.OpenBrace);
|
|
301
|
+
this.parseExpected(TokenKind.OpenBracket);
|
|
302
|
+
const name = this.parseIdentifier();
|
|
303
|
+
this.parseExpected(TokenKind.InKeyword);
|
|
304
|
+
let constraint = this.parseType();
|
|
305
|
+
this.parseExpected(TokenKind.CloseBracket);
|
|
306
|
+
let questionToken = false;
|
|
307
|
+
if (this.at(TokenKind.Question)) {
|
|
308
|
+
this.nextToken();
|
|
309
|
+
questionToken = true;
|
|
310
|
+
}
|
|
311
|
+
else if (this.at(TokenKind.Plus)) {
|
|
312
|
+
this.nextToken();
|
|
313
|
+
this.nextToken();
|
|
314
|
+
questionToken = "+";
|
|
315
|
+
}
|
|
316
|
+
else if (this.at(TokenKind.Minus)) {
|
|
317
|
+
this.nextToken();
|
|
318
|
+
this.nextToken();
|
|
319
|
+
questionToken = "-";
|
|
320
|
+
}
|
|
321
|
+
let type;
|
|
322
|
+
if (this.at(TokenKind.Colon)) {
|
|
323
|
+
this.nextToken();
|
|
324
|
+
type = this.parseType();
|
|
325
|
+
}
|
|
326
|
+
this.parseSemicolonOrComma();
|
|
327
|
+
const close = this.parseExpected(TokenKind.CloseBrace);
|
|
328
|
+
const typeParameter = { kind: SyntaxKind.TypeParameterDeclaration, name, constraint, start: name.start, end: constraint.end };
|
|
329
|
+
return { kind: SyntaxKind.MappedType, readonlyToken: false, typeParameter, questionToken, type, start: open.start, end: close.end };
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
void cursor;
|
|
334
|
+
const members = this.parseTypeMembers();
|
|
335
|
+
return { kind: SyntaxKind.TypeLiteral, members, start, end: this.token.start };
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/parser/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,11 @@ describeWithClang("end-to-end compilation", () => {
|
|
|
23
23
|
rmSync(workdir, { recursive: true, force: true });
|
|
24
24
|
});
|
|
25
25
|
function runProgram(source, options = {}) {
|
|
26
|
+
const result = runProgramFull(source, options);
|
|
27
|
+
expect(result.status).toBe(0);
|
|
28
|
+
return result.stdout.trim();
|
|
29
|
+
}
|
|
30
|
+
function runProgramFull(source, options = {}) {
|
|
26
31
|
const name = options.name ?? `program_${Math.random().toString(36).slice(2)}`;
|
|
27
32
|
const entry = join(workdir, `${name}.ts`);
|
|
28
33
|
writeFileSync(entry, source);
|
|
@@ -35,8 +40,7 @@ describeWithClang("end-to-end compilation", () => {
|
|
|
35
40
|
});
|
|
36
41
|
expect(result.diagnostics.filter((d) => d.category === "error")).toEqual([]);
|
|
37
42
|
const executed = spawnSync(result.outputPath, [], { encoding: "utf8" });
|
|
38
|
-
|
|
39
|
-
return executed.stdout.trim();
|
|
43
|
+
return { stdout: executed.stdout, stderr: executed.stderr, status: executed.status };
|
|
40
44
|
}
|
|
41
45
|
it("evaluates arithmetic and prints results", () => {
|
|
42
46
|
expect(runProgram('console.log("sum", 2 + 3 * 4);')).toBe("sum 14");
|
|
@@ -89,5 +93,121 @@ describeWithClang("end-to-end compilation", () => {
|
|
|
89
93
|
const source = `console.log(readFileSync(${JSON.stringify(dataPath)}));`;
|
|
90
94
|
expect(runProgram(source, { extensions: true })).toBe("from a file");
|
|
91
95
|
});
|
|
96
|
+
it("supports switch statements with fall-through", () => {
|
|
97
|
+
const source = `
|
|
98
|
+
function size(n: number): string {
|
|
99
|
+
switch (n) {
|
|
100
|
+
case 0:
|
|
101
|
+
return "none";
|
|
102
|
+
case 1:
|
|
103
|
+
case 2:
|
|
104
|
+
return "few";
|
|
105
|
+
default:
|
|
106
|
+
return "many";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
console.log(size(0), size(1), size(2), size(7));
|
|
110
|
+
`;
|
|
111
|
+
expect(runProgram(source)).toBe("none few few many");
|
|
112
|
+
});
|
|
113
|
+
it("provides common array and string methods", () => {
|
|
114
|
+
const source = `
|
|
115
|
+
const xs = [3, 1, 2];
|
|
116
|
+
xs.push(4);
|
|
117
|
+
const doubled = xs.map((x) => x * 2).filter((x) => x > 4);
|
|
118
|
+
const total = xs.reduce((a, x) => a + x, 0);
|
|
119
|
+
console.log(xs.join("-"), doubled.join(","), total, xs.includes(2), xs.indexOf(1));
|
|
120
|
+
const s = " Hello World ";
|
|
121
|
+
console.log(s.trim().toUpperCase(), s.trim().slice(0, 5), "a,b,c".split(",").join("|"));
|
|
122
|
+
`;
|
|
123
|
+
expect(runProgram(source)).toBe("3-1-2-4 6,8 10 true 1\nHELLO WORLD Hello a|b|c");
|
|
124
|
+
});
|
|
125
|
+
it("supports Math, global functions and console levels", () => {
|
|
126
|
+
const source = `
|
|
127
|
+
console.log(Math.max(1, 9, 4), Math.abs(-3), Math.floor(2.9), Math.pow(2, 8), Math.PI > 3.14);
|
|
128
|
+
console.log(parseInt("42px"), parseFloat("2.5x"), isNaN(NaN), isFinite(1), Number("7"), String(9), Boolean(0));
|
|
129
|
+
console.warn("warned");
|
|
130
|
+
console.error("failed");
|
|
131
|
+
`;
|
|
132
|
+
const result = runProgramFull(source);
|
|
133
|
+
expect(result.status).toBe(0);
|
|
134
|
+
expect(result.stdout.trim()).toBe("9 3 2 256 true\n42 2.5 true true 7 9 false");
|
|
135
|
+
expect(result.stderr.trim()).toBe("warned\nfailed");
|
|
136
|
+
});
|
|
137
|
+
it("supports default parameters, rest parameters and arguments", () => {
|
|
138
|
+
const source = `
|
|
139
|
+
function greet(name: string = "world", mark: string = "!"): string {
|
|
140
|
+
return "hi " + name + mark;
|
|
141
|
+
}
|
|
142
|
+
function total(...nums: number[]): number {
|
|
143
|
+
let sum = 0;
|
|
144
|
+
for (const n of nums) sum += n;
|
|
145
|
+
return sum;
|
|
146
|
+
}
|
|
147
|
+
function countArgs(): number {
|
|
148
|
+
return arguments.length;
|
|
149
|
+
}
|
|
150
|
+
console.log(greet(), greet("ada"), total(1, 2, 3), countArgs(1, 2, 3, 4));
|
|
151
|
+
`;
|
|
152
|
+
expect(runProgram(source)).toBe("hi world! hi ada! 6 4");
|
|
153
|
+
});
|
|
154
|
+
it("supports Object helpers, spread, in and delete", () => {
|
|
155
|
+
const source = `
|
|
156
|
+
const base = { a: 1, b: 2 };
|
|
157
|
+
const merged = Object.assign({}, base, { c: 3 });
|
|
158
|
+
const copy = { ...base, a: 9 };
|
|
159
|
+
console.log(Object.keys(base).join(","), Object.values(base).join(","));
|
|
160
|
+
console.log(Object.entries(base).map((e) => e[0] + "=" + e[1]).join(","));
|
|
161
|
+
console.log(merged.a, merged.b, merged.c, copy.a, "a" in base, "z" in base);
|
|
162
|
+
delete base.a;
|
|
163
|
+
console.log("a" in base, Object.keys(base).join(","));
|
|
164
|
+
`;
|
|
165
|
+
expect(runProgram(source)).toBe("a,b 1,2\na=1,b=2\n1 2 3 9 true false\nfalse b");
|
|
166
|
+
});
|
|
167
|
+
it("iterates object keys with for...in", () => {
|
|
168
|
+
const source = `
|
|
169
|
+
const obj = { x: 1, y: 2 };
|
|
170
|
+
let out = "";
|
|
171
|
+
for (const key in obj) out += key + "=" + obj[key] + ";";
|
|
172
|
+
console.log(out);
|
|
173
|
+
`;
|
|
174
|
+
expect(runProgram(source)).toBe("x=1;y=2;");
|
|
175
|
+
});
|
|
176
|
+
it("supports try/catch/finally including returns and loop breaks", () => {
|
|
177
|
+
const source = `
|
|
178
|
+
function safe(n: number): number {
|
|
179
|
+
try {
|
|
180
|
+
if (n < 0) throw "negative";
|
|
181
|
+
return n * 2;
|
|
182
|
+
} catch (err) {
|
|
183
|
+
return -1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function cleanup(): string {
|
|
187
|
+
let log = "";
|
|
188
|
+
try {
|
|
189
|
+
log += "try;";
|
|
190
|
+
throw "boom";
|
|
191
|
+
} catch (e) {
|
|
192
|
+
log += "catch:" + e + ";";
|
|
193
|
+
} finally {
|
|
194
|
+
log += "finally";
|
|
195
|
+
}
|
|
196
|
+
return log;
|
|
197
|
+
}
|
|
198
|
+
console.log(safe(5), safe(-2), cleanup());
|
|
199
|
+
`;
|
|
200
|
+
expect(runProgram(source)).toBe("10 -1 try;catch:boom;finally");
|
|
201
|
+
});
|
|
202
|
+
it("supports optional chaining", () => {
|
|
203
|
+
const source = `
|
|
204
|
+
const obj = { a: { b: 5 }, m: (x: number) => x + 1 };
|
|
205
|
+
const empty = null;
|
|
206
|
+
console.log(obj?.a?.b, empty?.a?.b, obj?.m?.(10), empty?.m?.(10));
|
|
207
|
+
const arr = [1, 2, 3];
|
|
208
|
+
console.log(arr?.length, arr?.map((x) => x * 2).join(","), empty?.length);
|
|
209
|
+
`;
|
|
210
|
+
expect(runProgram(source)).toBe("5 undefined 11 undefined\n3 2,4,6 undefined");
|
|
211
|
+
});
|
|
92
212
|
});
|
|
93
213
|
//# sourceMappingURL=compile.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,QAAgB,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,MAAc,EAAE,UAAmD,EAAE;QACvF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;YAC1B,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YAC5B,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,
|
|
1
|
+
{"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../../tests/e2e/compile.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEhE,iBAAiB,CAAC,wBAAwB,EAAE,GAAG,EAAE;IAC/C,IAAI,OAAe,CAAC;IACpB,IAAI,QAAgB,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,MAAc,EAAE,UAAmD,EAAE;QACvF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,SAAS,cAAc,CACrB,MAAc,EACd,UAAmD,EAAE;QAErD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE;YAC1B,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YAC5B,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACvF,CAAC;IAED,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG;;;;;;KAMd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG;;;;;;;KAOd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG;;;;;;;;;;KAUd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG;;;KAGd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;QACzE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG;;;;;;;;;;;;;KAad,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG;;;;;;;;KAQd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG;;;;;KAKd,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG;;;;;;;;;;;;;KAad,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG;;;;;;;;;KASd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG;;;;;KAKd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;KAsBd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG;;;;;;KAMd,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { parse } from "../helpers.js";
|
|
3
|
-
import { SyntaxKind } from "../../src/ast/nodes.js";
|
|
3
|
+
import { SyntaxKind, ModifierKind } from "../../src/ast/nodes.js";
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
5
|
function first(text) {
|
|
6
6
|
const { file, diagnostics } = parse(text);
|
|
@@ -133,5 +133,13 @@ describe("parser", () => {
|
|
|
133
133
|
const { diagnostics } = parse("const f = (x: unknown) => (x as number) + 1;");
|
|
134
134
|
expect(diagnostics.filter((d) => d.category === "error")).toHaveLength(0);
|
|
135
135
|
});
|
|
136
|
+
it("parses exported variable declarations", () => {
|
|
137
|
+
expect(kindsOf("export const a = 1;")).toEqual([SyntaxKind.VariableStatement]);
|
|
138
|
+
expect(kindsOf("export let b = 2;")).toEqual([SyntaxKind.VariableStatement]);
|
|
139
|
+
expect(kindsOf("export var c = 3;")).toEqual([SyntaxKind.VariableStatement]);
|
|
140
|
+
const statement = first("export const a = 1;");
|
|
141
|
+
expect(statement.modifiers).toHaveLength(1);
|
|
142
|
+
expect(statement.modifiers[0].modifierKind).toBe(ModifierKind.Export);
|
|
143
|
+
});
|
|
136
144
|
});
|
|
137
145
|
//# sourceMappingURL=parser.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../tests/parser/parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAa,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../tests/parser/parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,wBAAwB,CAAC;AAE7E,uDAAuD;AACvD,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAe,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACrF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,SAAS,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,8BAA8B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACjG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,2BAA2B;SACvC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,UAAU,CAAC,cAAc;YACzB,UAAU,CAAC,cAAc;YACzB,UAAU,CAAC,aAAa;SACzB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC,UAAU,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACvE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACxG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/E,UAAU,CAAC,gBAAgB;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvF,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,EAAE,GAAG,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjG,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
package/runtime/rt.h
CHANGED
|
@@ -141,6 +141,31 @@ xt_value xt_object_get_cstr(xt_value obj, const char *key);
|
|
|
141
141
|
xt_value xt_object_set(xt_value obj, xt_value key, xt_value value);
|
|
142
142
|
xt_value xt_object_has(xt_value obj, xt_value key);
|
|
143
143
|
xt_value xt_object_keys(xt_value obj);
|
|
144
|
+
xt_value xt_object_values(xt_value obj);
|
|
145
|
+
xt_value xt_object_entries(xt_value obj);
|
|
146
|
+
xt_value xt_object_assign(int32_t argc, xt_value *argv);
|
|
147
|
+
xt_value xt_object_spread(xt_value target, xt_value source);
|
|
148
|
+
|
|
149
|
+
/* -- standard library dispatch -------------------------------------------- */
|
|
150
|
+
/** Call `target[name](...)`, falling back to built-in Array/String methods. */
|
|
151
|
+
xt_value xt_call_method(xt_value target, xt_value name, int32_t argc, xt_value *argv);
|
|
152
|
+
/** Implements `Math.<name>(...)`; the name is interned by the compiler. */
|
|
153
|
+
xt_value xt_math_call(xt_value name, int32_t argc, xt_value *argv);
|
|
154
|
+
|
|
155
|
+
/* -- global functions ------------------------------------------------------ */
|
|
156
|
+
xt_value xt_parse_int(int32_t argc, xt_value *argv);
|
|
157
|
+
xt_value xt_parse_float(int32_t argc, xt_value *argv);
|
|
158
|
+
xt_value xt_is_nan(int32_t argc, xt_value *argv);
|
|
159
|
+
xt_value xt_is_finite(int32_t argc, xt_value *argv);
|
|
160
|
+
xt_value xt_number_ctor(int32_t argc, xt_value *argv);
|
|
161
|
+
xt_value xt_string_ctor(int32_t argc, xt_value *argv);
|
|
162
|
+
xt_value xt_boolean_ctor(int32_t argc, xt_value *argv);
|
|
163
|
+
/** `key in obj` (the key is the left operand). */
|
|
164
|
+
xt_value xt_in(xt_value key, xt_value obj);
|
|
165
|
+
/** `delete obj[key]`; removes object properties, clears array elements. */
|
|
166
|
+
xt_value xt_delete(xt_value obj, xt_value key);
|
|
167
|
+
/** Collect `argv[start..argc)` into a new array (rest parameters). */
|
|
168
|
+
xt_value xt_rest_args(int32_t argc, xt_value *argv, int32_t start);
|
|
144
169
|
|
|
145
170
|
/* -- arrays --------------------------------------------------------------- */
|
|
146
171
|
xt_value xt_array_new(int32_t count, xt_value *items);
|
|
@@ -162,7 +187,14 @@ xt_value xt_is_nullish(xt_value value);
|
|
|
162
187
|
|
|
163
188
|
/* -- exceptions / output -------------------------------------------------- */
|
|
164
189
|
void xt_throw(xt_value v);
|
|
190
|
+
/** Allocate and push a `try` frame; the returned pointer is the `setjmp` buffer. */
|
|
191
|
+
void *xt_try_enter(void);
|
|
192
|
+
xt_value xt_try_exception(void *frame);
|
|
193
|
+
void xt_try_leave(void *frame);
|
|
165
194
|
void xt_console_log(int32_t argc, xt_value *argv);
|
|
195
|
+
void xt_console_info(int32_t argc, xt_value *argv);
|
|
196
|
+
void xt_console_warn(int32_t argc, xt_value *argv);
|
|
197
|
+
void xt_console_error(int32_t argc, xt_value *argv);
|
|
166
198
|
void xt_print(xt_value v);
|
|
167
199
|
void xt_println(xt_value v);
|
|
168
200
|
|