@jalvin/compiler 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ast.d.ts +720 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +58 -0
- package/dist/ast.js.map +1 -0
- package/dist/codegen.d.ts +106 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +1624 -0
- package/dist/codegen.js.map +1 -0
- package/dist/diagnostics.d.ts +61 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +104 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer.d.ts +157 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +677 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser.d.ts +114 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +2180 -0
- package/dist/parser.js.map +1 -0
- package/dist/typechecker.d.ts +205 -0
- package/dist/typechecker.d.ts.map +1 -0
- package/dist/typechecker.js +2196 -0
- package/dist/typechecker.js.map +1 -0
- package/package.json +35 -0
package/dist/ast.d.ts
ADDED
|
@@ -0,0 +1,720 @@
|
|
|
1
|
+
export interface Span {
|
|
2
|
+
readonly file: string;
|
|
3
|
+
readonly startLine: number;
|
|
4
|
+
readonly startCol: number;
|
|
5
|
+
readonly endLine: number;
|
|
6
|
+
readonly endCol: number;
|
|
7
|
+
readonly startOffset: number;
|
|
8
|
+
readonly endOffset: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const BUILTIN_SPAN: Span;
|
|
11
|
+
export type Visibility = "public" | "private" | "protected" | "internal";
|
|
12
|
+
export type Modifier = "open" | "abstract" | "override" | "inline" | "operator" | "infix" | "external" | "tailrec" | "suspend" | "reified" | "const" | "lateinit" | "final";
|
|
13
|
+
export interface Annotation {
|
|
14
|
+
readonly span: Span;
|
|
15
|
+
/** e.g. "Nuked", "JvmStatic", "Suppress" */
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** Raw argument string (everything between the parens), or null if no parens */
|
|
18
|
+
readonly args: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface Modifiers {
|
|
21
|
+
readonly visibility: Visibility;
|
|
22
|
+
readonly modifiers: ReadonlyArray<Modifier>;
|
|
23
|
+
readonly annotations: ReadonlyArray<Annotation>;
|
|
24
|
+
}
|
|
25
|
+
export declare const DEFAULT_MODIFIERS: Modifiers;
|
|
26
|
+
export declare function isSuspend(m: Modifiers): boolean;
|
|
27
|
+
export interface Program {
|
|
28
|
+
readonly kind: "Program";
|
|
29
|
+
readonly span: Span;
|
|
30
|
+
readonly packageDecl: PackageDecl | null;
|
|
31
|
+
readonly imports: ReadonlyArray<ImportDecl>;
|
|
32
|
+
readonly declarations: ReadonlyArray<TopLevelDecl>;
|
|
33
|
+
}
|
|
34
|
+
export interface PackageDecl {
|
|
35
|
+
readonly kind: "PackageDecl";
|
|
36
|
+
readonly span: Span;
|
|
37
|
+
readonly path: ReadonlyArray<string>;
|
|
38
|
+
}
|
|
39
|
+
export interface ImportDecl {
|
|
40
|
+
readonly kind: "ImportDecl";
|
|
41
|
+
readonly span: Span;
|
|
42
|
+
readonly path: ReadonlyArray<string>;
|
|
43
|
+
/** `import foo.bar.*` */
|
|
44
|
+
readonly star: boolean;
|
|
45
|
+
/** `import foo.bar as Baz` */
|
|
46
|
+
readonly alias: string | null;
|
|
47
|
+
}
|
|
48
|
+
export type TypeRef = SimpleTypeRef | NullableTypeRef | FunctionTypeRef | GenericTypeRef | StarProjection;
|
|
49
|
+
export interface SimpleTypeRef {
|
|
50
|
+
readonly kind: "SimpleTypeRef";
|
|
51
|
+
readonly span: Span;
|
|
52
|
+
/** Dotted name: `foo.bar.Baz` */
|
|
53
|
+
readonly name: ReadonlyArray<string>;
|
|
54
|
+
}
|
|
55
|
+
export interface NullableTypeRef {
|
|
56
|
+
readonly kind: "NullableTypeRef";
|
|
57
|
+
readonly span: Span;
|
|
58
|
+
readonly base: TypeRef;
|
|
59
|
+
}
|
|
60
|
+
export interface FunctionTypeRef {
|
|
61
|
+
readonly kind: "FunctionTypeRef";
|
|
62
|
+
readonly span: Span;
|
|
63
|
+
readonly receiver: TypeRef | null;
|
|
64
|
+
readonly params: ReadonlyArray<TypeRef>;
|
|
65
|
+
readonly returnType: TypeRef;
|
|
66
|
+
}
|
|
67
|
+
export interface GenericTypeRef {
|
|
68
|
+
readonly kind: "GenericTypeRef";
|
|
69
|
+
readonly span: Span;
|
|
70
|
+
readonly base: SimpleTypeRef;
|
|
71
|
+
readonly args: ReadonlyArray<TypeArg>;
|
|
72
|
+
}
|
|
73
|
+
export interface TypeArg {
|
|
74
|
+
readonly span: Span;
|
|
75
|
+
readonly variance: "in" | "out" | null;
|
|
76
|
+
/** `*` projection */
|
|
77
|
+
readonly star: boolean;
|
|
78
|
+
readonly type: TypeRef | null;
|
|
79
|
+
}
|
|
80
|
+
export interface StarProjection {
|
|
81
|
+
readonly kind: "StarProjection";
|
|
82
|
+
readonly span: Span;
|
|
83
|
+
}
|
|
84
|
+
export interface TypeParam {
|
|
85
|
+
readonly span: Span;
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly variance: "in" | "out" | null;
|
|
88
|
+
readonly reified: boolean;
|
|
89
|
+
readonly upperBound: TypeRef | null;
|
|
90
|
+
}
|
|
91
|
+
export type TopLevelDecl = FunDecl | ComponentDecl | ClassDecl | DataClassDecl | SealedClassDecl | EnumClassDecl | InterfaceDecl | ObjectDecl | TypeAliasDecl | PropertyDecl | ExtensionFunDecl | DestructuringDecl;
|
|
92
|
+
export interface FunDecl {
|
|
93
|
+
readonly kind: "FunDecl";
|
|
94
|
+
readonly span: Span;
|
|
95
|
+
readonly modifiers: Modifiers;
|
|
96
|
+
readonly name: string;
|
|
97
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
98
|
+
readonly receiver: TypeRef | null;
|
|
99
|
+
readonly params: ReadonlyArray<Param>;
|
|
100
|
+
readonly returnType: TypeRef | null;
|
|
101
|
+
/** Expression body (`fun x() = expr`) or block body */
|
|
102
|
+
readonly body: Block | Expr | null;
|
|
103
|
+
}
|
|
104
|
+
/** Extension function — sugar that compiles to a TypeParam-scoped function */
|
|
105
|
+
export interface ExtensionFunDecl {
|
|
106
|
+
readonly kind: "ExtensionFunDecl";
|
|
107
|
+
readonly span: Span;
|
|
108
|
+
readonly modifiers: Modifiers;
|
|
109
|
+
readonly name: string;
|
|
110
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
111
|
+
readonly receiver: TypeRef;
|
|
112
|
+
readonly params: ReadonlyArray<Param>;
|
|
113
|
+
readonly returnType: TypeRef | null;
|
|
114
|
+
readonly body: Block | Expr;
|
|
115
|
+
}
|
|
116
|
+
export interface ComponentDecl {
|
|
117
|
+
readonly kind: "ComponentDecl";
|
|
118
|
+
readonly span: Span;
|
|
119
|
+
readonly modifiers: Modifiers;
|
|
120
|
+
readonly name: string;
|
|
121
|
+
readonly params: ReadonlyArray<Param>;
|
|
122
|
+
readonly body: Block;
|
|
123
|
+
}
|
|
124
|
+
export interface Param {
|
|
125
|
+
readonly span: Span;
|
|
126
|
+
/** `val` / `var` for primary constructor params that become properties */
|
|
127
|
+
readonly propertyKind: "val" | "var" | null;
|
|
128
|
+
readonly name: string;
|
|
129
|
+
readonly type: TypeRef;
|
|
130
|
+
readonly defaultValue: Expr | null;
|
|
131
|
+
readonly vararg: boolean;
|
|
132
|
+
}
|
|
133
|
+
export interface ClassDecl {
|
|
134
|
+
readonly kind: "ClassDecl";
|
|
135
|
+
readonly span: Span;
|
|
136
|
+
readonly modifiers: Modifiers;
|
|
137
|
+
readonly name: string;
|
|
138
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
139
|
+
readonly primaryConstructor: PrimaryConstructor | null;
|
|
140
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
141
|
+
readonly body: ClassBody | null;
|
|
142
|
+
}
|
|
143
|
+
export interface DataClassDecl {
|
|
144
|
+
readonly kind: "DataClassDecl";
|
|
145
|
+
readonly span: Span;
|
|
146
|
+
readonly modifiers: Modifiers;
|
|
147
|
+
readonly name: string;
|
|
148
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
149
|
+
readonly primaryConstructor: PrimaryConstructor;
|
|
150
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
151
|
+
readonly body: ClassBody | null;
|
|
152
|
+
}
|
|
153
|
+
export interface SealedClassDecl {
|
|
154
|
+
readonly kind: "SealedClassDecl";
|
|
155
|
+
readonly span: Span;
|
|
156
|
+
readonly modifiers: Modifiers;
|
|
157
|
+
readonly name: string;
|
|
158
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
159
|
+
readonly primaryConstructor: PrimaryConstructor | null;
|
|
160
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
161
|
+
readonly body: ClassBody | null;
|
|
162
|
+
}
|
|
163
|
+
export interface InterfaceDecl {
|
|
164
|
+
readonly kind: "InterfaceDecl";
|
|
165
|
+
readonly span: Span;
|
|
166
|
+
readonly modifiers: Modifiers;
|
|
167
|
+
readonly name: string;
|
|
168
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
169
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
170
|
+
readonly body: ClassBody | null;
|
|
171
|
+
}
|
|
172
|
+
export interface ObjectDecl {
|
|
173
|
+
readonly kind: "ObjectDecl";
|
|
174
|
+
readonly span: Span;
|
|
175
|
+
readonly modifiers: Modifiers;
|
|
176
|
+
/** null for anonymous `object : SomeSuperType { ... }` */
|
|
177
|
+
readonly name: string | null;
|
|
178
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
179
|
+
readonly body: ClassBody;
|
|
180
|
+
}
|
|
181
|
+
export interface TypeAliasDecl {
|
|
182
|
+
readonly kind: "TypeAliasDecl";
|
|
183
|
+
readonly span: Span;
|
|
184
|
+
readonly modifiers: Modifiers;
|
|
185
|
+
readonly name: string;
|
|
186
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
187
|
+
readonly type: TypeRef;
|
|
188
|
+
}
|
|
189
|
+
export interface EnumClassDecl {
|
|
190
|
+
readonly kind: "EnumClassDecl";
|
|
191
|
+
readonly span: Span;
|
|
192
|
+
readonly modifiers: Modifiers;
|
|
193
|
+
readonly name: string;
|
|
194
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
195
|
+
/** Optional constructor params shared by all entries */
|
|
196
|
+
readonly primaryConstructor: PrimaryConstructor | null;
|
|
197
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
198
|
+
readonly entries: ReadonlyArray<EnumEntry>;
|
|
199
|
+
/** Additional non-entry members (methods, properties) */
|
|
200
|
+
readonly body: ClassBody | null;
|
|
201
|
+
}
|
|
202
|
+
export interface EnumEntry {
|
|
203
|
+
readonly span: Span;
|
|
204
|
+
readonly name: string;
|
|
205
|
+
/** Arguments to the enum constructor */
|
|
206
|
+
readonly args: ReadonlyArray<CallArg>;
|
|
207
|
+
/** Optional entry-specific body (overriding methods) */
|
|
208
|
+
readonly body: ClassBody | null;
|
|
209
|
+
}
|
|
210
|
+
export interface DestructuringDecl {
|
|
211
|
+
readonly kind: "DestructuringDecl";
|
|
212
|
+
readonly span: Span;
|
|
213
|
+
readonly modifiers: Modifiers;
|
|
214
|
+
readonly mutable: boolean;
|
|
215
|
+
/** Names of the binding slots; null slots are placeholders (`_`) */
|
|
216
|
+
readonly names: ReadonlyArray<string | null>;
|
|
217
|
+
readonly types: ReadonlyArray<TypeRef | null>;
|
|
218
|
+
readonly initializer: Expr;
|
|
219
|
+
}
|
|
220
|
+
export interface PrimaryConstructor {
|
|
221
|
+
readonly span: Span;
|
|
222
|
+
readonly modifiers: Modifiers;
|
|
223
|
+
readonly params: ReadonlyArray<Param>;
|
|
224
|
+
}
|
|
225
|
+
export interface SuperTypeEntry {
|
|
226
|
+
readonly span: Span;
|
|
227
|
+
readonly type: TypeRef;
|
|
228
|
+
/** Arguments to `super()` call */
|
|
229
|
+
readonly delegateArgs: ReadonlyArray<CallArg> | null;
|
|
230
|
+
}
|
|
231
|
+
export interface ClassBody {
|
|
232
|
+
readonly span: Span;
|
|
233
|
+
readonly members: ReadonlyArray<ClassMember>;
|
|
234
|
+
}
|
|
235
|
+
export type ClassMember = FunDecl | ExtensionFunDecl | ComponentDecl | PropertyDecl | ClassDecl | DataClassDecl | SealedClassDecl | EnumClassDecl | ObjectDecl | CompanionObject | InitBlock | SecondaryConstructor;
|
|
236
|
+
export interface PropertyDecl {
|
|
237
|
+
readonly kind: "PropertyDecl";
|
|
238
|
+
readonly span: Span;
|
|
239
|
+
readonly modifiers: Modifiers;
|
|
240
|
+
readonly mutable: boolean;
|
|
241
|
+
readonly name: string;
|
|
242
|
+
readonly typeParams: ReadonlyArray<TypeParam>;
|
|
243
|
+
readonly type: TypeRef | null;
|
|
244
|
+
readonly initializer: Expr | null;
|
|
245
|
+
readonly delegate: Expr | null;
|
|
246
|
+
readonly getter: PropertyAccessor | null;
|
|
247
|
+
readonly setter: PropertyAccessor | null;
|
|
248
|
+
}
|
|
249
|
+
export interface PropertyAccessor {
|
|
250
|
+
readonly span: Span;
|
|
251
|
+
readonly modifiers: Modifiers;
|
|
252
|
+
readonly params: ReadonlyArray<Param>;
|
|
253
|
+
readonly body: Block | Expr | null;
|
|
254
|
+
}
|
|
255
|
+
export interface CompanionObject {
|
|
256
|
+
readonly kind: "CompanionObject";
|
|
257
|
+
readonly span: Span;
|
|
258
|
+
readonly name: string | null;
|
|
259
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
260
|
+
readonly body: ClassBody;
|
|
261
|
+
}
|
|
262
|
+
export interface InitBlock {
|
|
263
|
+
readonly kind: "InitBlock";
|
|
264
|
+
readonly span: Span;
|
|
265
|
+
readonly body: Block;
|
|
266
|
+
}
|
|
267
|
+
export interface SecondaryConstructor {
|
|
268
|
+
readonly kind: "SecondaryConstructor";
|
|
269
|
+
readonly span: Span;
|
|
270
|
+
readonly modifiers: Modifiers;
|
|
271
|
+
readonly params: ReadonlyArray<Param>;
|
|
272
|
+
/** `this(...)` or `super(...)` delegation */
|
|
273
|
+
readonly delegation: "this" | "super" | null;
|
|
274
|
+
readonly delegateArgs: ReadonlyArray<CallArg>;
|
|
275
|
+
readonly body: Block;
|
|
276
|
+
}
|
|
277
|
+
export type Stmt = Block | PropertyDecl | DestructuringDecl | ExprStmt | ReturnStmt | ThrowStmt | BreakStmt | ContinueStmt | IfStmt | WhenStmt | ForStmt | WhileStmt | DoWhileStmt | TryCatchStmt | LabeledStmt;
|
|
278
|
+
export interface Block {
|
|
279
|
+
readonly kind: "Block";
|
|
280
|
+
readonly span: Span;
|
|
281
|
+
readonly statements: ReadonlyArray<Stmt>;
|
|
282
|
+
}
|
|
283
|
+
export interface ExprStmt {
|
|
284
|
+
readonly kind: "ExprStmt";
|
|
285
|
+
readonly span: Span;
|
|
286
|
+
readonly expr: Expr;
|
|
287
|
+
}
|
|
288
|
+
export interface ReturnStmt {
|
|
289
|
+
readonly kind: "ReturnStmt";
|
|
290
|
+
readonly span: Span;
|
|
291
|
+
readonly label: string | null;
|
|
292
|
+
readonly value: Expr | null;
|
|
293
|
+
}
|
|
294
|
+
export interface ThrowStmt {
|
|
295
|
+
readonly kind: "ThrowStmt";
|
|
296
|
+
readonly span: Span;
|
|
297
|
+
readonly value: Expr;
|
|
298
|
+
}
|
|
299
|
+
export interface BreakStmt {
|
|
300
|
+
readonly kind: "BreakStmt";
|
|
301
|
+
readonly span: Span;
|
|
302
|
+
readonly label: string | null;
|
|
303
|
+
}
|
|
304
|
+
export interface ContinueStmt {
|
|
305
|
+
readonly kind: "ContinueStmt";
|
|
306
|
+
readonly span: Span;
|
|
307
|
+
readonly label: string | null;
|
|
308
|
+
}
|
|
309
|
+
export interface IfStmt {
|
|
310
|
+
readonly kind: "IfStmt";
|
|
311
|
+
readonly span: Span;
|
|
312
|
+
readonly condition: Expr;
|
|
313
|
+
readonly then: Block;
|
|
314
|
+
readonly else: Block | IfStmt | null;
|
|
315
|
+
}
|
|
316
|
+
export interface WhenStmt {
|
|
317
|
+
readonly kind: "WhenStmt";
|
|
318
|
+
readonly span: Span;
|
|
319
|
+
/** `when (subject)` — null means `when { }` (no subject) */
|
|
320
|
+
readonly subject: WhenSubject | null;
|
|
321
|
+
readonly branches: ReadonlyArray<WhenBranch>;
|
|
322
|
+
}
|
|
323
|
+
export interface WhenSubject {
|
|
324
|
+
readonly span: Span;
|
|
325
|
+
/** `when (val x = expr)` */
|
|
326
|
+
readonly binding: string | null;
|
|
327
|
+
readonly expr: Expr;
|
|
328
|
+
}
|
|
329
|
+
export interface WhenBranch {
|
|
330
|
+
readonly span: Span;
|
|
331
|
+
readonly conditions: ReadonlyArray<WhenCondition>;
|
|
332
|
+
readonly isElse: boolean;
|
|
333
|
+
/** Block or single-expression body */
|
|
334
|
+
readonly body: Block | Expr;
|
|
335
|
+
}
|
|
336
|
+
export type WhenCondition = WhenIsCondition | WhenInCondition | WhenExprCondition;
|
|
337
|
+
export interface WhenIsCondition {
|
|
338
|
+
readonly kind: "WhenIsCondition";
|
|
339
|
+
readonly span: Span;
|
|
340
|
+
readonly negated: boolean;
|
|
341
|
+
readonly type: TypeRef;
|
|
342
|
+
}
|
|
343
|
+
export interface WhenInCondition {
|
|
344
|
+
readonly kind: "WhenInCondition";
|
|
345
|
+
readonly span: Span;
|
|
346
|
+
readonly negated: boolean;
|
|
347
|
+
readonly expr: Expr;
|
|
348
|
+
}
|
|
349
|
+
export interface WhenExprCondition {
|
|
350
|
+
readonly kind: "WhenExprCondition";
|
|
351
|
+
readonly span: Span;
|
|
352
|
+
readonly expr: Expr;
|
|
353
|
+
}
|
|
354
|
+
export interface ForStmt {
|
|
355
|
+
readonly kind: "ForStmt";
|
|
356
|
+
readonly span: Span;
|
|
357
|
+
readonly binding: DestructureBinding | string;
|
|
358
|
+
readonly iterable: Expr;
|
|
359
|
+
readonly body: Block;
|
|
360
|
+
}
|
|
361
|
+
export type DestructureBinding = {
|
|
362
|
+
readonly kind: "TupleDestructure";
|
|
363
|
+
readonly names: ReadonlyArray<string | null>;
|
|
364
|
+
} | {
|
|
365
|
+
readonly kind: "MapDestructure";
|
|
366
|
+
readonly key: string;
|
|
367
|
+
readonly value: string;
|
|
368
|
+
};
|
|
369
|
+
export interface WhileStmt {
|
|
370
|
+
readonly kind: "WhileStmt";
|
|
371
|
+
readonly span: Span;
|
|
372
|
+
readonly condition: Expr;
|
|
373
|
+
readonly body: Block;
|
|
374
|
+
}
|
|
375
|
+
export interface DoWhileStmt {
|
|
376
|
+
readonly kind: "DoWhileStmt";
|
|
377
|
+
readonly span: Span;
|
|
378
|
+
readonly body: Block;
|
|
379
|
+
readonly condition: Expr;
|
|
380
|
+
}
|
|
381
|
+
export interface TryCatchStmt {
|
|
382
|
+
readonly kind: "TryCatchStmt";
|
|
383
|
+
readonly span: Span;
|
|
384
|
+
readonly body: Block;
|
|
385
|
+
readonly catches: ReadonlyArray<CatchClause>;
|
|
386
|
+
readonly finally: Block | null;
|
|
387
|
+
}
|
|
388
|
+
export interface CatchClause {
|
|
389
|
+
readonly span: Span;
|
|
390
|
+
readonly name: string;
|
|
391
|
+
readonly type: TypeRef;
|
|
392
|
+
readonly body: Block;
|
|
393
|
+
}
|
|
394
|
+
export interface LabeledStmt {
|
|
395
|
+
readonly kind: "LabeledStmt";
|
|
396
|
+
readonly span: Span;
|
|
397
|
+
readonly label: string;
|
|
398
|
+
readonly body: Stmt;
|
|
399
|
+
}
|
|
400
|
+
export type Expr = IntLiteralExpr | LongLiteralExpr | FloatLiteralExpr | DoubleLiteralExpr | BooleanLiteralExpr | NullLiteralExpr | StringLiteralExpr | StringTemplateExpr | NameExpr | ThisExpr | SuperExpr | CallExpr | IndexExpr | MemberExpr | SafeMemberExpr | UnaryExpr | BinaryExpr | AssignExpr | CompoundAssignExpr | IncrDecrExpr | LambdaExpr | IfExpr | WhenExpr | TryCatchExpr | TypeCheckExpr | TypeCastExpr | SafeCastExpr | NotNullExpr | ElvisExpr | RangeExpr | LaunchExpr | AsyncExpr | CollectionLiteralExpr | ObjectExpr | ParenExpr | BreakExpr | ContinueExpr | ReturnExpr | JsxElement;
|
|
401
|
+
export interface JsxAttr {
|
|
402
|
+
readonly span: Span;
|
|
403
|
+
readonly name: string;
|
|
404
|
+
/** null = boolean attr (e.g. disabled); string = literal value; Expr = {expr} */
|
|
405
|
+
readonly value: Expr | string | null;
|
|
406
|
+
}
|
|
407
|
+
export interface JsxExprChild {
|
|
408
|
+
readonly kind: "JsxExprChild";
|
|
409
|
+
readonly span: Span;
|
|
410
|
+
readonly expr: Expr;
|
|
411
|
+
}
|
|
412
|
+
export interface JsxTextChild {
|
|
413
|
+
readonly kind: "JsxTextChild";
|
|
414
|
+
readonly span: Span;
|
|
415
|
+
readonly text: string;
|
|
416
|
+
}
|
|
417
|
+
export type JsxChild = JsxElement | JsxExprChild | JsxTextChild;
|
|
418
|
+
export interface JsxElement {
|
|
419
|
+
readonly kind: "JsxElement";
|
|
420
|
+
readonly span: Span;
|
|
421
|
+
readonly tag: string;
|
|
422
|
+
readonly attrs: ReadonlyArray<JsxAttr>;
|
|
423
|
+
readonly children: ReadonlyArray<JsxChild>;
|
|
424
|
+
}
|
|
425
|
+
export interface IntLiteralExpr {
|
|
426
|
+
readonly kind: "IntLiteralExpr";
|
|
427
|
+
readonly span: Span;
|
|
428
|
+
readonly value: number;
|
|
429
|
+
}
|
|
430
|
+
export interface LongLiteralExpr {
|
|
431
|
+
readonly kind: "LongLiteralExpr";
|
|
432
|
+
readonly span: Span;
|
|
433
|
+
readonly value: bigint;
|
|
434
|
+
}
|
|
435
|
+
export interface FloatLiteralExpr {
|
|
436
|
+
readonly kind: "FloatLiteralExpr";
|
|
437
|
+
readonly span: Span;
|
|
438
|
+
readonly value: number;
|
|
439
|
+
}
|
|
440
|
+
export interface DoubleLiteralExpr {
|
|
441
|
+
readonly kind: "DoubleLiteralExpr";
|
|
442
|
+
readonly span: Span;
|
|
443
|
+
readonly value: number;
|
|
444
|
+
}
|
|
445
|
+
export interface BooleanLiteralExpr {
|
|
446
|
+
readonly kind: "BooleanLiteralExpr";
|
|
447
|
+
readonly span: Span;
|
|
448
|
+
readonly value: boolean;
|
|
449
|
+
}
|
|
450
|
+
export interface NullLiteralExpr {
|
|
451
|
+
readonly kind: "NullLiteralExpr";
|
|
452
|
+
readonly span: Span;
|
|
453
|
+
}
|
|
454
|
+
export interface StringLiteralExpr {
|
|
455
|
+
readonly kind: "StringLiteralExpr";
|
|
456
|
+
readonly span: Span;
|
|
457
|
+
readonly value: string;
|
|
458
|
+
readonly raw: boolean;
|
|
459
|
+
}
|
|
460
|
+
export interface StringTemplateExpr {
|
|
461
|
+
readonly kind: "StringTemplateExpr";
|
|
462
|
+
readonly span: Span;
|
|
463
|
+
readonly parts: ReadonlyArray<StringTemplatePart>;
|
|
464
|
+
}
|
|
465
|
+
export type StringTemplatePart = {
|
|
466
|
+
readonly kind: "LiteralPart";
|
|
467
|
+
readonly value: string;
|
|
468
|
+
} | {
|
|
469
|
+
readonly kind: "ExprPart";
|
|
470
|
+
readonly expr: Expr;
|
|
471
|
+
};
|
|
472
|
+
export interface NameExpr {
|
|
473
|
+
readonly kind: "NameExpr";
|
|
474
|
+
readonly span: Span;
|
|
475
|
+
readonly name: string;
|
|
476
|
+
}
|
|
477
|
+
export interface ThisExpr {
|
|
478
|
+
readonly kind: "ThisExpr";
|
|
479
|
+
readonly span: Span;
|
|
480
|
+
readonly label: string | null;
|
|
481
|
+
}
|
|
482
|
+
export interface SuperExpr {
|
|
483
|
+
readonly kind: "SuperExpr";
|
|
484
|
+
readonly span: Span;
|
|
485
|
+
readonly label: string | null;
|
|
486
|
+
}
|
|
487
|
+
export interface CallExpr {
|
|
488
|
+
readonly kind: "CallExpr";
|
|
489
|
+
readonly span: Span;
|
|
490
|
+
readonly callee: Expr;
|
|
491
|
+
readonly typeArgs: ReadonlyArray<TypeArg>;
|
|
492
|
+
readonly args: ReadonlyArray<CallArg>;
|
|
493
|
+
/** Trailing lambda `foo { ... }` */
|
|
494
|
+
readonly trailingLambda: LambdaExpr | null;
|
|
495
|
+
}
|
|
496
|
+
export interface CallArg {
|
|
497
|
+
readonly span: Span;
|
|
498
|
+
readonly name: string | null;
|
|
499
|
+
readonly spread: boolean;
|
|
500
|
+
readonly value: Expr;
|
|
501
|
+
}
|
|
502
|
+
export interface IndexExpr {
|
|
503
|
+
readonly kind: "IndexExpr";
|
|
504
|
+
readonly span: Span;
|
|
505
|
+
readonly target: Expr;
|
|
506
|
+
readonly index: Expr;
|
|
507
|
+
}
|
|
508
|
+
export interface MemberExpr {
|
|
509
|
+
readonly kind: "MemberExpr";
|
|
510
|
+
readonly span: Span;
|
|
511
|
+
readonly target: Expr;
|
|
512
|
+
readonly member: string;
|
|
513
|
+
}
|
|
514
|
+
export interface SafeMemberExpr {
|
|
515
|
+
readonly kind: "SafeMemberExpr";
|
|
516
|
+
readonly span: Span;
|
|
517
|
+
readonly target: Expr;
|
|
518
|
+
readonly member: string;
|
|
519
|
+
}
|
|
520
|
+
export type UnaryOp = "+" | "-" | "!" | "not";
|
|
521
|
+
export interface UnaryExpr {
|
|
522
|
+
readonly kind: "UnaryExpr";
|
|
523
|
+
readonly span: Span;
|
|
524
|
+
readonly op: UnaryOp;
|
|
525
|
+
readonly operand: Expr;
|
|
526
|
+
readonly prefix: boolean;
|
|
527
|
+
}
|
|
528
|
+
export type BinaryOp = "+" | "-" | "*" | "/" | "%" | "==" | "!=" | "===" | "!==" | "<" | ">" | "<=" | ">=" | "&&" | "||" | "and" | "or" | "xor" | "shl" | "shr" | "ushr" | ".." | "..<" | "in" | "!in";
|
|
529
|
+
export interface BinaryExpr {
|
|
530
|
+
readonly kind: "BinaryExpr";
|
|
531
|
+
readonly span: Span;
|
|
532
|
+
readonly op: BinaryOp;
|
|
533
|
+
readonly left: Expr;
|
|
534
|
+
readonly right: Expr;
|
|
535
|
+
}
|
|
536
|
+
export type AssignTarget = NameExpr | IndexExpr | MemberExpr | SafeMemberExpr;
|
|
537
|
+
export interface AssignExpr {
|
|
538
|
+
readonly kind: "AssignExpr";
|
|
539
|
+
readonly span: Span;
|
|
540
|
+
readonly target: AssignTarget;
|
|
541
|
+
readonly value: Expr;
|
|
542
|
+
}
|
|
543
|
+
export type CompoundOp = "+=" | "-=" | "*=" | "/=" | "%=";
|
|
544
|
+
export interface CompoundAssignExpr {
|
|
545
|
+
readonly kind: "CompoundAssignExpr";
|
|
546
|
+
readonly span: Span;
|
|
547
|
+
readonly op: CompoundOp;
|
|
548
|
+
readonly target: AssignTarget;
|
|
549
|
+
readonly value: Expr;
|
|
550
|
+
}
|
|
551
|
+
export interface IncrDecrExpr {
|
|
552
|
+
readonly kind: "IncrDecrExpr";
|
|
553
|
+
readonly span: Span;
|
|
554
|
+
readonly op: "++" | "--";
|
|
555
|
+
readonly target: AssignTarget;
|
|
556
|
+
readonly prefix: boolean;
|
|
557
|
+
}
|
|
558
|
+
export interface LambdaExpr {
|
|
559
|
+
readonly kind: "LambdaExpr";
|
|
560
|
+
readonly span: Span;
|
|
561
|
+
readonly params: ReadonlyArray<LambdaParam>;
|
|
562
|
+
readonly returnType: TypeRef | null;
|
|
563
|
+
readonly body: ReadonlyArray<Stmt>;
|
|
564
|
+
}
|
|
565
|
+
export interface LambdaParam {
|
|
566
|
+
readonly span: Span;
|
|
567
|
+
readonly name: string | null;
|
|
568
|
+
readonly type: TypeRef | null;
|
|
569
|
+
}
|
|
570
|
+
export interface IfExpr {
|
|
571
|
+
readonly kind: "IfExpr";
|
|
572
|
+
readonly span: Span;
|
|
573
|
+
readonly condition: Expr;
|
|
574
|
+
readonly then: Block | Expr;
|
|
575
|
+
readonly else: Block | IfExpr | Expr;
|
|
576
|
+
}
|
|
577
|
+
export interface WhenExpr {
|
|
578
|
+
readonly kind: "WhenExpr";
|
|
579
|
+
readonly span: Span;
|
|
580
|
+
readonly subject: WhenSubject | null;
|
|
581
|
+
readonly branches: ReadonlyArray<WhenBranch>;
|
|
582
|
+
}
|
|
583
|
+
export interface TryCatchExpr {
|
|
584
|
+
readonly kind: "TryCatchExpr";
|
|
585
|
+
readonly span: Span;
|
|
586
|
+
readonly body: Block;
|
|
587
|
+
readonly catches: ReadonlyArray<CatchClause>;
|
|
588
|
+
readonly finally: Block | null;
|
|
589
|
+
}
|
|
590
|
+
export interface TypeCheckExpr {
|
|
591
|
+
readonly kind: "TypeCheckExpr";
|
|
592
|
+
readonly span: Span;
|
|
593
|
+
readonly negated: boolean;
|
|
594
|
+
readonly expr: Expr;
|
|
595
|
+
readonly type: TypeRef;
|
|
596
|
+
}
|
|
597
|
+
export interface TypeCastExpr {
|
|
598
|
+
readonly kind: "TypeCastExpr";
|
|
599
|
+
readonly span: Span;
|
|
600
|
+
readonly expr: Expr;
|
|
601
|
+
readonly type: TypeRef;
|
|
602
|
+
}
|
|
603
|
+
export interface SafeCastExpr {
|
|
604
|
+
readonly kind: "SafeCastExpr";
|
|
605
|
+
readonly span: Span;
|
|
606
|
+
readonly expr: Expr;
|
|
607
|
+
readonly type: TypeRef;
|
|
608
|
+
}
|
|
609
|
+
export interface NotNullExpr {
|
|
610
|
+
readonly kind: "NotNullExpr";
|
|
611
|
+
readonly span: Span;
|
|
612
|
+
readonly expr: Expr;
|
|
613
|
+
}
|
|
614
|
+
export interface ElvisExpr {
|
|
615
|
+
readonly kind: "ElvisExpr";
|
|
616
|
+
readonly span: Span;
|
|
617
|
+
readonly left: Expr;
|
|
618
|
+
readonly right: Expr;
|
|
619
|
+
}
|
|
620
|
+
export interface RangeExpr {
|
|
621
|
+
readonly kind: "RangeExpr";
|
|
622
|
+
readonly span: Span;
|
|
623
|
+
readonly from: Expr;
|
|
624
|
+
readonly to: Expr;
|
|
625
|
+
readonly inclusive: boolean;
|
|
626
|
+
}
|
|
627
|
+
/** `launch { ... }` — fire-and-forget coroutine */
|
|
628
|
+
export interface LaunchExpr {
|
|
629
|
+
readonly kind: "LaunchExpr";
|
|
630
|
+
readonly span: Span;
|
|
631
|
+
readonly context: Expr | null;
|
|
632
|
+
readonly body: Block;
|
|
633
|
+
}
|
|
634
|
+
/** `async { ... }` — returns a Deferred<T> */
|
|
635
|
+
export interface AsyncExpr {
|
|
636
|
+
readonly kind: "AsyncExpr";
|
|
637
|
+
readonly span: Span;
|
|
638
|
+
readonly context: Expr | null;
|
|
639
|
+
readonly body: Block;
|
|
640
|
+
}
|
|
641
|
+
export interface CollectionLiteralExpr {
|
|
642
|
+
readonly kind: "CollectionLiteralExpr";
|
|
643
|
+
readonly span: Span;
|
|
644
|
+
readonly collectionKind: "list" | "set" | "map";
|
|
645
|
+
readonly elements: ReadonlyArray<Expr | MapEntry>;
|
|
646
|
+
}
|
|
647
|
+
export interface MapEntry {
|
|
648
|
+
readonly kind: "MapEntry";
|
|
649
|
+
readonly span: Span;
|
|
650
|
+
readonly key: Expr;
|
|
651
|
+
readonly value: Expr;
|
|
652
|
+
}
|
|
653
|
+
export interface ObjectExpr {
|
|
654
|
+
readonly kind: "ObjectExpr";
|
|
655
|
+
readonly span: Span;
|
|
656
|
+
readonly superTypes: ReadonlyArray<SuperTypeEntry>;
|
|
657
|
+
readonly body: ClassBody;
|
|
658
|
+
}
|
|
659
|
+
export interface ParenExpr {
|
|
660
|
+
readonly kind: "ParenExpr";
|
|
661
|
+
readonly span: Span;
|
|
662
|
+
readonly expr: Expr;
|
|
663
|
+
}
|
|
664
|
+
export interface BreakExpr {
|
|
665
|
+
readonly kind: "BreakExpr";
|
|
666
|
+
readonly span: Span;
|
|
667
|
+
readonly label: string | null;
|
|
668
|
+
}
|
|
669
|
+
export interface ContinueExpr {
|
|
670
|
+
readonly kind: "ContinueExpr";
|
|
671
|
+
readonly span: Span;
|
|
672
|
+
readonly label: string | null;
|
|
673
|
+
}
|
|
674
|
+
export interface ReturnExpr {
|
|
675
|
+
readonly kind: "ReturnExpr";
|
|
676
|
+
readonly span: Span;
|
|
677
|
+
readonly label: string | null;
|
|
678
|
+
readonly value: Expr | null;
|
|
679
|
+
}
|
|
680
|
+
export type ResolvedType = PrimitiveType | ClassType | NullableResolvedType | FunctionResolvedType | TypeParamType | UnionType | ErrorType | NeverType | UnknownType;
|
|
681
|
+
export type PrimitiveKind = "Int" | "Long" | "Float" | "Double" | "Boolean" | "String" | "Char" | "Byte" | "Short" | "Unit" | "Any";
|
|
682
|
+
export interface PrimitiveType {
|
|
683
|
+
readonly kind: "PrimitiveType";
|
|
684
|
+
readonly primitive: PrimitiveKind;
|
|
685
|
+
}
|
|
686
|
+
export interface ClassType {
|
|
687
|
+
readonly kind: "ClassType";
|
|
688
|
+
readonly name: string;
|
|
689
|
+
readonly typeArgs: ReadonlyArray<ResolvedType>;
|
|
690
|
+
}
|
|
691
|
+
export interface NullableResolvedType {
|
|
692
|
+
readonly kind: "NullableResolvedType";
|
|
693
|
+
readonly base: ResolvedType;
|
|
694
|
+
}
|
|
695
|
+
export interface FunctionResolvedType {
|
|
696
|
+
readonly kind: "FunctionResolvedType";
|
|
697
|
+
readonly params: ReadonlyArray<ResolvedType>;
|
|
698
|
+
readonly returnType: ResolvedType;
|
|
699
|
+
}
|
|
700
|
+
export interface TypeParamType {
|
|
701
|
+
readonly kind: "TypeParamType";
|
|
702
|
+
readonly name: string;
|
|
703
|
+
}
|
|
704
|
+
export interface UnionType {
|
|
705
|
+
readonly kind: "UnionType";
|
|
706
|
+
readonly members: ReadonlyArray<ResolvedType>;
|
|
707
|
+
}
|
|
708
|
+
export interface ErrorType {
|
|
709
|
+
readonly kind: "ErrorType";
|
|
710
|
+
readonly message: string;
|
|
711
|
+
}
|
|
712
|
+
export interface NeverType {
|
|
713
|
+
readonly kind: "NeverType";
|
|
714
|
+
}
|
|
715
|
+
export interface UnknownType {
|
|
716
|
+
readonly kind: "UnknownType";
|
|
717
|
+
}
|
|
718
|
+
export declare function spanFrom(start: Span, end: Span): Span;
|
|
719
|
+
export declare function isExpr(node: Stmt | Expr): node is Expr;
|
|
720
|
+
//# sourceMappingURL=ast.d.ts.map
|