xbintsc 0.1.6 → 0.1.9

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 (152) hide show
  1. package/README.md +7 -4
  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/binder/binder.d.ts +35 -1
  30. package/dist/src/binder/binder.js +138 -0
  31. package/dist/src/binder/binder.js.map +1 -1
  32. package/dist/src/codegen/generator/calls.d.ts +26 -0
  33. package/dist/src/codegen/generator/calls.js +373 -0
  34. package/dist/src/codegen/generator/calls.js.map +1 -0
  35. package/dist/src/codegen/generator/context.d.ts +47 -0
  36. package/dist/src/codegen/generator/context.js +164 -0
  37. package/dist/src/codegen/generator/context.js.map +1 -0
  38. package/dist/src/codegen/generator/expressions.d.ts +25 -0
  39. package/dist/src/codegen/generator/expressions.js +454 -0
  40. package/dist/src/codegen/generator/expressions.js.map +1 -0
  41. package/dist/src/codegen/generator/generator.d.ts +22 -0
  42. package/dist/src/codegen/generator/generator.js +21 -0
  43. package/dist/src/codegen/generator/generator.js.map +1 -0
  44. package/dist/src/codegen/generator/module.d.ts +19 -0
  45. package/dist/src/codegen/generator/module.js +214 -0
  46. package/dist/src/codegen/generator/module.js.map +1 -0
  47. package/dist/src/codegen/generator/state.d.ts +42 -0
  48. package/dist/src/codegen/generator/state.js +125 -0
  49. package/dist/src/codegen/generator/state.js.map +1 -0
  50. package/dist/src/codegen/generator/statements.d.ts +22 -0
  51. package/dist/src/codegen/generator/statements.js +433 -0
  52. package/dist/src/codegen/generator/statements.js.map +1 -0
  53. package/dist/src/codegen/generator/tables.d.ts +23 -0
  54. package/dist/src/codegen/generator/tables.js +186 -0
  55. package/dist/src/codegen/generator/tables.js.map +1 -0
  56. package/dist/src/codegen/llvm.d.ts +4 -13
  57. package/dist/src/codegen/llvm.js +4 -1537
  58. package/dist/src/codegen/llvm.js.map +1 -1
  59. package/dist/src/driver/compiler.js +36 -11
  60. package/dist/src/driver/compiler.js.map +1 -1
  61. package/dist/src/driver/modules.d.ts +24 -0
  62. package/dist/src/driver/modules.js +347 -0
  63. package/dist/src/driver/modules.js.map +1 -0
  64. package/dist/src/lexer/char.d.ts +78 -0
  65. package/dist/src/lexer/char.js +106 -0
  66. package/dist/src/lexer/char.js.map +1 -0
  67. package/dist/src/lexer/scanner.js +1 -98
  68. package/dist/src/lexer/scanner.js.map +1 -1
  69. package/dist/src/parser/context.d.ts +58 -0
  70. package/dist/src/parser/context.js +174 -0
  71. package/dist/src/parser/context.js.map +1 -0
  72. package/dist/src/parser/declarations.d.ts +26 -0
  73. package/dist/src/parser/declarations.js +461 -0
  74. package/dist/src/parser/declarations.js.map +1 -0
  75. package/dist/src/parser/expressions.d.ts +27 -0
  76. package/dist/src/parser/expressions.js +440 -0
  77. package/dist/src/parser/expressions.js.map +1 -0
  78. package/dist/src/parser/helpers.d.ts +7 -0
  79. package/dist/src/parser/helpers.js +36 -0
  80. package/dist/src/parser/helpers.js.map +1 -0
  81. package/dist/src/parser/literals.d.ts +16 -0
  82. package/dist/src/parser/literals.js +193 -0
  83. package/dist/src/parser/literals.js.map +1 -0
  84. package/dist/src/parser/modules.d.ts +12 -0
  85. package/dist/src/parser/modules.js +175 -0
  86. package/dist/src/parser/modules.js.map +1 -0
  87. package/dist/src/parser/operators.d.ts +12 -0
  88. package/dist/src/parser/operators.js +172 -0
  89. package/dist/src/parser/operators.js.map +1 -0
  90. package/dist/src/parser/parser.d.ts +17 -122
  91. package/dist/src/parser/parser.js +18 -2311
  92. package/dist/src/parser/parser.js.map +1 -1
  93. package/dist/src/parser/speculation.d.ts +6 -0
  94. package/dist/src/parser/speculation.js +10 -0
  95. package/dist/src/parser/speculation.js.map +1 -0
  96. package/dist/src/parser/statements.d.ts +28 -0
  97. package/dist/src/parser/statements.js +402 -0
  98. package/dist/src/parser/statements.js.map +1 -0
  99. package/dist/src/parser/types.d.ts +21 -0
  100. package/dist/src/parser/types.js +338 -0
  101. package/dist/src/parser/types.js.map +1 -0
  102. package/dist/tests/codegen/llvm.test.js +1 -1
  103. package/dist/tests/codegen/llvm.test.js.map +1 -1
  104. package/dist/tests/e2e/compile.test.js +86 -0
  105. package/dist/tests/e2e/compile.test.js.map +1 -1
  106. package/package.json +1 -1
  107. package/runtime/rt.h +55 -4
  108. package/runtime/rt_internal.h +169 -0
  109. package/runtime/xt_alloc.c +38 -0
  110. package/runtime/xt_builtins.c +238 -0
  111. package/runtime/xt_containers.c +312 -0
  112. package/runtime/xt_io.c +246 -0
  113. package/runtime/xt_promise.c +292 -0
  114. package/runtime/xt_stdlib.c +556 -0
  115. package/runtime/xt_stdlib2.c +1043 -0
  116. package/runtime/xt_values.c +291 -0
  117. package/scripts/build-runtime.mjs +8 -1
  118. package/src/ast/common.ts +210 -0
  119. package/src/ast/declarations.ts +130 -0
  120. package/src/ast/expressions.ts +275 -0
  121. package/src/ast/kinds.ts +176 -0
  122. package/src/ast/modules.ts +73 -0
  123. package/src/ast/nodes.ts +11 -1101
  124. package/src/ast/operators.ts +76 -0
  125. package/src/ast/statements.ts +148 -0
  126. package/src/ast/types.ts +173 -0
  127. package/src/binder/binder.ts +196 -0
  128. package/src/codegen/generator/calls.ts +433 -0
  129. package/src/codegen/generator/context.ts +190 -0
  130. package/src/codegen/generator/expressions.ts +508 -0
  131. package/src/codegen/generator/generator.ts +35 -0
  132. package/src/codegen/generator/module.ts +244 -0
  133. package/src/codegen/generator/state.ts +169 -0
  134. package/src/codegen/generator/statements.ts +480 -0
  135. package/src/codegen/generator/tables.ts +206 -0
  136. package/src/codegen/llvm.ts +4 -1720
  137. package/src/driver/compiler.ts +45 -12
  138. package/src/driver/modules.ts +377 -0
  139. package/src/lexer/char.ts +116 -0
  140. package/src/lexer/scanner.ts +9 -109
  141. package/src/parser/context.ts +196 -0
  142. package/src/parser/declarations.ts +502 -0
  143. package/src/parser/expressions.ts +468 -0
  144. package/src/parser/helpers.ts +42 -0
  145. package/src/parser/literals.ts +207 -0
  146. package/src/parser/modules.ts +194 -0
  147. package/src/parser/operators.ts +181 -0
  148. package/src/parser/parser.ts +35 -2373
  149. package/src/parser/speculation.ts +9 -0
  150. package/src/parser/statements.ts +457 -0
  151. package/src/parser/types.ts +365 -0
  152. package/runtime/xt_runtime.c +0 -1372
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Module-level generation: emitting functions, the entry point and the overall
3
+ * IR text, plus default-parameter initialization.
4
+ */
5
+ import { SyntaxKind, } from "../../ast/nodes.js";
6
+ import { SymbolKind } from "../../binder/binder.js";
7
+ import { i64, XT_UNDEFINED } from "../values.js";
8
+ import { RUNTIME_DECLARATIONS } from "./state.js";
9
+ export const moduleMethods = {
10
+ run() {
11
+ for (const classInfo of this.binding.classes) {
12
+ const globalName = `@class.${classInfo.id}`;
13
+ this.classGlobals.set(classInfo.id, globalName);
14
+ this.globals.push(`${globalName} = internal global i64 0`);
15
+ }
16
+ // Module-level bindings captured by functions live in globals so that a
17
+ // top-level function can see them without a closure environment.
18
+ const moduleScope = this.binding.scopes.get(this.sourceFile);
19
+ if (moduleScope) {
20
+ for (const symbol of moduleScope.symbols.values()) {
21
+ const isVariable = symbol.kind === SymbolKind.Var || symbol.kind === SymbolKind.Let || symbol.kind === SymbolKind.Const;
22
+ if (!isVariable || !symbol.boxed || !symbol.fn.isModule)
23
+ continue;
24
+ const globalName = `@g.${symbol.id}`;
25
+ this.moduleGlobals.set(symbol.id, globalName);
26
+ this.globals.push(`${globalName} = internal global i64 ${i64(XT_UNDEFINED)}`);
27
+ }
28
+ }
29
+ for (const fn of this.binding.functions)
30
+ this.emitFunction(fn);
31
+ this.emitMain();
32
+ const header = ["; ModuleID = 'xbintsc'", "source_filename = \"" + this.sourceFile.fileName + "\"", ""];
33
+ return [...header, ...RUNTIME_DECLARATIONS, ...this.extraDeclarations, "", ...this.globals, "", ...this.functions, ""].join("\n");
34
+ },
35
+ // -- module level --------------------------------------------------------
36
+ emitFunction(fn) {
37
+ const name = this.functionName(fn);
38
+ const state = {
39
+ fn,
40
+ buffer: [],
41
+ allocas: [],
42
+ slots: new Map(),
43
+ reg: 0,
44
+ label: 0,
45
+ terminated: false,
46
+ loops: [],
47
+ tryFrames: [],
48
+ escapePointers: [],
49
+ usesTry: false,
50
+ };
51
+ this.current = state;
52
+ const header = `define i64 @${name}(i64 %this, i64 %env, i32 %argc, i64* %argv) {`;
53
+ this.emit(`%saved.env = alloca i64`);
54
+ this.emit(`store i64 %env, i64* %saved.env`);
55
+ this.emit(`%saved.this = alloca i64`);
56
+ this.emit(`store i64 %this, i64* %saved.this`);
57
+ state.thisPtr = "%saved.this";
58
+ this.emit(`%saved.argc = alloca i32`);
59
+ this.emit(`store i32 %argc, i32* %saved.argc`);
60
+ this.emit(`%saved.argv = alloca i64*`);
61
+ this.emit(`store i64* %argv, i64** %saved.argv`);
62
+ // Parameters.
63
+ const parameterNodes = fn.node.parameters ?? [];
64
+ for (let index = 0; index < fn.params.length; index++) {
65
+ const symbol = fn.params[index];
66
+ const parameter = parameterNodes[index];
67
+ if (parameter?.dotDotDotToken) {
68
+ const rest = this.reg();
69
+ this.emit(` ${rest} = call i64 @xt_rest_args(i32 %argc, i64* %argv, i32 ${index})`);
70
+ this.declareSlot(symbol, rest);
71
+ continue;
72
+ }
73
+ const value = this.reg();
74
+ this.emit(` ${value} = call i64 @xt_arg(i32 %argc, i64* %argv, i32 ${index})`);
75
+ this.declareSlot(symbol, value);
76
+ if (parameter?.initializer)
77
+ this.emitDefaultParameter(symbol, value, parameter.initializer);
78
+ }
79
+ // Captures threaded through the environment.
80
+ for (const symbol of fn.captures) {
81
+ if (this.moduleGlobals.has(symbol.id))
82
+ continue;
83
+ const index = fn.captureIndex.get(symbol.id);
84
+ const value = this.reg();
85
+ this.emit(` ${value} = call i64 @xt_closure_env(i64 %env, i32 ${index})`);
86
+ this.defineCaptureSlot(symbol, value);
87
+ }
88
+ // Arrow functions inherit `this` lexically; it travels as an extra capture.
89
+ if (fn.isArrow && fn.capturesThis) {
90
+ const inherited = this.reg();
91
+ this.emit(` ${inherited} = call i64 @xt_closure_env(i64 %env, i32 ${fn.captures.length})`);
92
+ this.emit(` store i64 ${inherited}, i64* %saved.this`);
93
+ }
94
+ // Instance field initializers run before the constructor body.
95
+ if (fn.isConstructor && fn.classInfo) {
96
+ const thisValue = this.emitThis();
97
+ for (const field of fn.classInfo.fields) {
98
+ if (field.isStatic)
99
+ continue;
100
+ const key = this.stringValue(field.name);
101
+ const value = field.initializer ? this.emitExpression(field.initializer) : i64(XT_UNDEFINED);
102
+ this.emit(` call i64 @xt_set(i64 ${thisValue}, i64 ${key}, i64 ${value})`);
103
+ }
104
+ }
105
+ // Body.
106
+ if (fn.node.kind === SyntaxKind.SourceFile) {
107
+ this.emitStatements(this.sourceFile.statements);
108
+ }
109
+ else if (fn.node.kind === SyntaxKind.ArrowFunction && fn.node.body.kind !== SyntaxKind.Block) {
110
+ const value = this.emitExpression(fn.node.body);
111
+ this.terminate(`ret i64 ${fn.isAsync ? this.wrapAsync(value) : value}`);
112
+ }
113
+ else {
114
+ const body = fn.node.body;
115
+ if (body)
116
+ this.emitStatements(body.statements);
117
+ }
118
+ if (!this.current.terminated) {
119
+ const fallback = fn.isAsync ? this.wrapAsync(i64(XT_UNDEFINED)) : i64(XT_UNDEFINED);
120
+ this.terminate(`ret i64 ${fallback}`);
121
+ }
122
+ const escapes = state.usesTry
123
+ ? state.escapePointers.map((ptr) => ` call void asm sideeffect "", "r"(i64* ${ptr})`)
124
+ : [];
125
+ const lines = [...state.allocas.map((a) => ` ${a}`), ...escapes, ...state.buffer];
126
+ this.functions.push([header, ...lines, "}", ""].join("\n"));
127
+ },
128
+ emitMain() {
129
+ const moduleName = this.functionName(this.binding.moduleFunction);
130
+ this.functions.push([
131
+ "define i32 @main(i32 %argc, i8** %argv) {",
132
+ ` %result = call i64 @${moduleName}(i64 ${i64(XT_UNDEFINED)}, i64 ${i64(XT_UNDEFINED)}, i32 0, i64* null)`,
133
+ " call void @xt_drain_microtasks()",
134
+ " ret i32 0",
135
+ "}",
136
+ "",
137
+ ].join("\n"));
138
+ },
139
+ functionName(fn) {
140
+ return fn.isModule ? "xt_module" : `xt_fn_${fn.id}`;
141
+ },
142
+ /** Wrap a returned value in a resolved promise (for `async` functions). */
143
+ wrapAsync(value) {
144
+ const result = this.reg();
145
+ this.emit(` ${result} = call i64 @xt_promise_resolve(i64 ${value})`);
146
+ return result;
147
+ },
148
+ classGlobal(classInfo) {
149
+ const existing = this.classGlobals.get(classInfo.id);
150
+ if (existing)
151
+ return existing;
152
+ const name = `@class.${classInfo.id}`;
153
+ this.classGlobals.set(classInfo.id, name);
154
+ this.globals.push(`${name} = internal global i64 0`);
155
+ return name;
156
+ },
157
+ emitClassReference(classInfo) {
158
+ const globalName = this.classGlobal(classInfo);
159
+ const value = this.reg();
160
+ this.emit(` ${value} = load i64, i64* ${globalName}`);
161
+ return value;
162
+ },
163
+ /** Build a class value (constructor closure + prototype) and store it in its global. */
164
+ emitClassSetup(classInfo) {
165
+ const globalName = this.classGlobal(classInfo);
166
+ const proto = this.reg();
167
+ this.emit(` ${proto} = call i64 @xt_object_new()`);
168
+ if (classInfo.parentExpression) {
169
+ const parent = this.emitExpression(classInfo.parentExpression);
170
+ const parentProto = this.reg();
171
+ this.emit(` ${parentProto} = call i64 @xt_function_get_prototype(i64 ${parent})`);
172
+ this.emit(` call i64 @xt_object_set_prototype(i64 ${proto}, i64 ${parentProto})`);
173
+ }
174
+ for (const method of classInfo.methods) {
175
+ const fnValue = this.emitClosureValue(method);
176
+ const key = this.stringValue(method.name);
177
+ this.emit(` call i64 @xt_set(i64 ${proto}, i64 ${key}, i64 ${fnValue})`);
178
+ }
179
+ const ctor = this.emitClosureValue(classInfo.ctor);
180
+ this.emit(` call i64 @xt_function_set_prototype(i64 ${ctor}, i64 ${proto})`);
181
+ const ctorKey = this.stringValue("__ctor");
182
+ this.emit(` call i64 @xt_set(i64 ${proto}, i64 ${ctorKey}, i64 ${ctor})`);
183
+ for (const method of classInfo.statics) {
184
+ const fnValue = this.emitClosureValue(method);
185
+ const key = this.stringValue(method.name);
186
+ this.emit(` call i64 @xt_set(i64 ${ctor}, i64 ${key}, i64 ${fnValue})`);
187
+ }
188
+ for (const field of classInfo.fields) {
189
+ if (!field.isStatic)
190
+ continue;
191
+ const key = this.stringValue(field.name);
192
+ const value = field.initializer ? this.emitExpression(field.initializer) : i64(XT_UNDEFINED);
193
+ this.emit(` call i64 @xt_set(i64 ${ctor}, i64 ${key}, i64 ${value})`);
194
+ }
195
+ this.emit(` store i64 ${ctor}, i64* ${globalName}`);
196
+ },
197
+ emitDefaultParameter(symbol, value, initializer) {
198
+ const isUndefined = this.reg();
199
+ this.emit(` ${isUndefined} = call i64 @xt_seq(i64 ${value}, i64 ${i64(XT_UNDEFINED)})`);
200
+ const truthy = this.reg();
201
+ this.emit(` ${truthy} = call i32 @xt_truthy(i64 ${isUndefined})`);
202
+ const condition = this.reg();
203
+ this.emit(` ${condition} = icmp ne i32 ${truthy}, 0`);
204
+ const applyLabel = this.label("param.default");
205
+ const endLabel = this.label("param.end");
206
+ this.terminate(`br i1 ${condition}, label %${applyLabel}, label %${endLabel}`);
207
+ this.startBlock(applyLabel);
208
+ const fallback = this.emitExpression(initializer);
209
+ this.writeSlot(symbol, fallback);
210
+ this.terminate(`br label %${endLabel}`);
211
+ this.startBlock(endLabel);
212
+ },
213
+ };
214
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/codegen/generator/module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared state types and the runtime declaration list for the LLVM generator.
3
+ */
4
+ import type { FunctionInfo } from "../../binder/binder.js";
5
+ import type { BindResult } from "../../binder/binder.js";
6
+ import type { BuiltinFunction } from "../../extensions/registry.js";
7
+ export interface Slot {
8
+ /** Register holding the `i64*` to the storage. */
9
+ readonly ptr: string;
10
+ readonly boxed: boolean;
11
+ }
12
+ export interface LoopLabels {
13
+ readonly breakLabel: string;
14
+ readonly continueLabel: string;
15
+ /** Number of enclosing `try` frames when the loop was entered. */
16
+ readonly tryDepth?: number;
17
+ }
18
+ export interface FunctionState {
19
+ readonly fn: FunctionInfo;
20
+ readonly buffer: string[];
21
+ readonly allocas: string[];
22
+ readonly slots: Map<number, Slot>;
23
+ reg: number;
24
+ label: number;
25
+ terminated: boolean;
26
+ readonly loops: LoopLabels[];
27
+ readonly tryFrames: string[];
28
+ readonly escapePointers: string[];
29
+ /** Alloca holding the `this` binding for the current function. */
30
+ thisPtr?: string;
31
+ /** Set when the function contains a `try`, forcing locals to live in memory. */
32
+ usesTry: boolean;
33
+ }
34
+ export interface CodegenResult {
35
+ readonly ir: string;
36
+ readonly binding: BindResult;
37
+ }
38
+ export interface CodegenOptions {
39
+ /** Global names supplied by registered extensions. */
40
+ readonly builtins?: Readonly<Record<string, BuiltinFunction>>;
41
+ }
42
+ export declare const RUNTIME_DECLARATIONS: readonly string[];
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Shared state types and the runtime declaration list for the LLVM generator.
3
+ */
4
+ export const RUNTIME_DECLARATIONS = [
5
+ "declare i64 @xt_undefined()",
6
+ "declare i64 @xt_null()",
7
+ "declare i64 @xt_bool(i32)",
8
+ "declare i64 @xt_number(double)",
9
+ "declare i64 @xt_string_new(i8*, i64)",
10
+ "declare i64 @xt_string_from_cstr(i8*)",
11
+ "declare i64 @xt_arg(i32, i64*, i32)",
12
+ "declare i64 @xt_closure_new(i8*, i32, i64*)",
13
+ "declare i64 @xt_closure_call(i64, i32, i64*)",
14
+ "declare i64 @xt_closure_env(i64, i32)",
15
+ "declare i64 @xt_call_with_this(i64, i64, i32, i64*)",
16
+ "declare i64 @xt_this()",
17
+ "declare i64 @xt_new(i64, i32, i64*)",
18
+ "declare i64 @xt_instance_of(i64, i64)",
19
+ "declare i64 @xt_function_set_prototype(i64, i64)",
20
+ "declare i64 @xt_function_get_prototype(i64)",
21
+ "declare i64 @xt_object_new_with_proto(i64)",
22
+ "declare i64 @xt_object_get_prototype(i64)",
23
+ "declare i64 @xt_object_set_prototype(i64, i64)",
24
+ "declare i64 @xt_await(i64)",
25
+ "declare void @xt_drain_microtasks()",
26
+ "declare i64 @xt_promise_resolve(i64)",
27
+ "declare i64 @xt_promise_reject(i64)",
28
+ "declare i64 @xt_promise_ctor(i32, i64*)",
29
+ "declare i64 @xt_promise_static(i64, i32, i64*)",
30
+ "declare i64 @xt_array_static(i64, i32, i64*)",
31
+ "declare i64 @xt_object_static(i64, i32, i64*)",
32
+ "declare i64 @xt_number_static(i64, i32, i64*)",
33
+ "declare i64 @xt_string_static(i64, i32, i64*)",
34
+ "declare i64 @xt_date_static(i64, i32, i64*)",
35
+ "declare i64 @xt_map_ctor(i32, i64*)",
36
+ "declare i64 @xt_set_ctor(i32, i64*)",
37
+ "declare i64 @xt_date_ctor(i32, i64*)",
38
+ "declare i64 @xt_regexp_ctor(i32, i64*)",
39
+ "declare i64 @xt_json_parse(i32, i64*)",
40
+ "declare i64 @xt_json_stringify(i32, i64*)",
41
+ "declare i64 @xt_object_from_entries(i64)",
42
+ "declare i64 @xt_object_freeze(i64)",
43
+ "declare i32 @xt_object_is_frozen(i64)",
44
+ "declare i64 @xt_object_has_own(i64, i64)",
45
+ "declare i64 @xt_console_dir(i32, i64*)",
46
+ "declare i64 @xt_console_trace(i32, i64*)",
47
+ "declare i64 @xt_console_assert(i32, i64*)",
48
+ "declare i64 @xt_console_count(i32, i64*)",
49
+ "declare i64 @xt_console_count_reset(i32, i64*)",
50
+ "declare i64 @xt_console_group(i32, i64*)",
51
+ "declare i64 @xt_console_group_end(i32, i64*)",
52
+ "declare i64 @xt_console_table(i32, i64*)",
53
+ "declare i64 @xt_console_time(i32, i64*)",
54
+ "declare i64 @xt_console_time_end(i32, i64*)",
55
+ "declare i64 @xt_console_time_log(i32, i64*)",
56
+ "declare i32 @xt_truthy(i64)",
57
+ "declare double @xt_to_number(i64)",
58
+ "declare i64 @xt_to_string(i64)",
59
+ "declare i64 @xt_typeof(i64)",
60
+ "declare i64 @xt_add(i64, i64)",
61
+ "declare i64 @xt_sub(i64, i64)",
62
+ "declare i64 @xt_mul(i64, i64)",
63
+ "declare i64 @xt_div(i64, i64)",
64
+ "declare i64 @xt_mod(i64, i64)",
65
+ "declare i64 @xt_pow(i64, i64)",
66
+ "declare i64 @xt_neg(i64)",
67
+ "declare i64 @xt_pos(i64)",
68
+ "declare i64 @xt_bit_and(i64, i64)",
69
+ "declare i64 @xt_bit_or(i64, i64)",
70
+ "declare i64 @xt_bit_xor(i64, i64)",
71
+ "declare i64 @xt_bit_not(i64)",
72
+ "declare i64 @xt_shl(i64, i64)",
73
+ "declare i64 @xt_shr(i64, i64)",
74
+ "declare i64 @xt_ushr(i64, i64)",
75
+ "declare i64 @xt_lt(i64, i64)",
76
+ "declare i64 @xt_le(i64, i64)",
77
+ "declare i64 @xt_gt(i64, i64)",
78
+ "declare i64 @xt_ge(i64, i64)",
79
+ "declare i64 @xt_eq(i64, i64)",
80
+ "declare i64 @xt_ne(i64, i64)",
81
+ "declare i64 @xt_seq(i64, i64)",
82
+ "declare i64 @xt_sne(i64, i64)",
83
+ "declare i64 @xt_not(i64)",
84
+ "declare i64 @xt_object_new()",
85
+ "declare i64 @xt_object_get_cstr(i64, i8*)",
86
+ "declare i64 @xt_object_set(i64, i64, i64)",
87
+ "declare i64 @xt_object_has(i64, i64)",
88
+ "declare i64 @xt_object_keys(i64)",
89
+ "declare i64 @xt_object_values(i64)",
90
+ "declare i64 @xt_object_entries(i64)",
91
+ "declare i64 @xt_object_assign(i32, i64*)",
92
+ "declare i64 @xt_object_spread(i64, i64)",
93
+ "declare i64 @xt_call_method(i64, i64, i32, i64*)",
94
+ "declare i64 @xt_math_call(i64, i32, i64*)",
95
+ "declare i64 @xt_parse_int(i32, i64*)",
96
+ "declare i64 @xt_parse_float(i32, i64*)",
97
+ "declare i64 @xt_is_nan(i32, i64*)",
98
+ "declare i64 @xt_is_finite(i32, i64*)",
99
+ "declare i64 @xt_number_ctor(i32, i64*)",
100
+ "declare i64 @xt_string_ctor(i32, i64*)",
101
+ "declare i64 @xt_boolean_ctor(i32, i64*)",
102
+ "declare i64 @xt_in(i64, i64)",
103
+ "declare i64 @xt_delete(i64, i64)",
104
+ "declare i64 @xt_rest_args(i32, i64*, i32)",
105
+ "declare i64 @xt_array_new(i32, i64*)",
106
+ "declare i64 @xt_array_push(i64, i64)",
107
+ "declare i64 @xt_array_length(i64)",
108
+ "declare i64 @xt_array_spread(i64, i64)",
109
+ "declare i64 @xt_get(i64, i64)",
110
+ "declare i64 @xt_set(i64, i64, i64)",
111
+ "declare i64 @xt_box_new(i64)",
112
+ "declare i64 @xt_box_get(i64)",
113
+ "declare i64 @xt_box_set(i64, i64)",
114
+ "declare i64 @xt_is_nullish(i64)",
115
+ "declare void @xt_throw(i64)",
116
+ "declare i32 @_setjmp(i8*) returns_twice",
117
+ "declare i8* @xt_try_enter()",
118
+ "declare i64 @xt_try_exception(i8*)",
119
+ "declare void @xt_try_leave(i8*)",
120
+ "declare void @xt_console_log(i32, i64*)",
121
+ "declare void @xt_console_info(i32, i64*)",
122
+ "declare void @xt_console_warn(i32, i64*)",
123
+ "declare void @xt_console_error(i32, i64*)",
124
+ ];
125
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/codegen/generator/state.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8CH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,6BAA6B;IAC7B,wBAAwB;IACxB,2BAA2B;IAC3B,gCAAgC;IAChC,sCAAsC;IACtC,uCAAuC;IACvC,qCAAqC;IACrC,6CAA6C;IAC7C,8CAA8C;IAC9C,uCAAuC;IACvC,qDAAqD;IACrD,wBAAwB;IACxB,qCAAqC;IACrC,uCAAuC;IACvC,kDAAkD;IAClD,6CAA6C;IAC7C,4CAA4C;IAC5C,2CAA2C;IAC3C,gDAAgD;IAChD,4BAA4B;IAC5B,qCAAqC;IACrC,sCAAsC;IACtC,qCAAqC;IACrC,yCAAyC;IACzC,gDAAgD;IAChD,8CAA8C;IAC9C,+CAA+C;IAC/C,+CAA+C;IAC/C,+CAA+C;IAC/C,6CAA6C;IAC7C,qCAAqC;IACrC,qCAAqC;IACrC,sCAAsC;IACtC,wCAAwC;IACxC,uCAAuC;IACvC,2CAA2C;IAC3C,0CAA0C;IAC1C,oCAAoC;IACpC,uCAAuC;IACvC,0CAA0C;IAC1C,wCAAwC;IACxC,0CAA0C;IAC1C,2CAA2C;IAC3C,0CAA0C;IAC1C,gDAAgD;IAChD,0CAA0C;IAC1C,8CAA8C;IAC9C,0CAA0C;IAC1C,yCAAyC;IACzC,6CAA6C;IAC7C,6CAA6C;IAC7C,6BAA6B;IAC7B,mCAAmC;IACnC,gCAAgC;IAChC,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,0BAA0B;IAC1B,0BAA0B;IAC1B,mCAAmC;IACnC,kCAAkC;IAClC,mCAAmC;IACnC,8BAA8B;IAC9B,+BAA+B;IAC/B,+BAA+B;IAC/B,gCAAgC;IAChC,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;IAC9B,8BAA8B;IAC9B,+BAA+B;IAC/B,+BAA+B;IAC/B,0BAA0B;IAC1B,8BAA8B;IAC9B,2CAA2C;IAC3C,2CAA2C;IAC3C,sCAAsC;IACtC,kCAAkC;IAClC,oCAAoC;IACpC,qCAAqC;IACrC,0CAA0C;IAC1C,yCAAyC;IACzC,kDAAkD;IAClD,2CAA2C;IAC3C,sCAAsC;IACtC,wCAAwC;IACxC,mCAAmC;IACnC,sCAAsC;IACtC,wCAAwC;IACxC,wCAAwC;IACxC,yCAAyC;IACzC,8BAA8B;IAC9B,kCAAkC;IAClC,2CAA2C;IAC3C,sCAAsC;IACtC,sCAAsC;IACtC,mCAAmC;IACnC,wCAAwC;IACxC,+BAA+B;IAC/B,oCAAoC;IACpC,8BAA8B;IAC9B,8BAA8B;IAC9B,mCAAmC;IACnC,iCAAiC;IACjC,6BAA6B;IAC7B,yCAAyC;IACzC,6BAA6B;IAC7B,oCAAoC;IACpC,iCAAiC;IACjC,yCAAyC;IACzC,0CAA0C;IAC1C,0CAA0C;IAC1C,2CAA2C;CAC5C,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Statement lowering: control flow, loops, switch and try/catch/finally.
3
+ */
4
+ import { type DoStatement, type Expression, type ForInStatement, type ForOfStatement, type ForStatement, type Identifier, type IfStatement, type ReturnStatement, type Statement, type SwitchStatement, type TryStatement, type VariableDeclarationList, type VariableStatement, type WhileStatement } from "../../ast/nodes.js";
5
+ import type { Generator } from "./generator.js";
6
+ export interface StatementMethods {
7
+ emitStatements(this: Generator, statements: readonly Statement[]): void;
8
+ emitStatement(this: Generator, statement: Statement): void;
9
+ emitVariableStatement(this: Generator, statement: VariableStatement): void;
10
+ emitIf(this: Generator, statement: IfStatement): void;
11
+ emitWhile(this: Generator, statement: WhileStatement): void;
12
+ emitDo(this: Generator, statement: DoStatement): void;
13
+ emitFor(this: Generator, statement: ForStatement): void;
14
+ emitForOf(this: Generator, statement: ForOfStatement | ForInStatement): void;
15
+ bindLoopVariable(this: Generator, initializer: VariableDeclarationList | Expression, value: string): void;
16
+ emitSwitch(this: Generator, statement: SwitchStatement): void;
17
+ emitTry(this: Generator, statement: TryStatement): void;
18
+ bindCatchVariable(this: Generator, variable: Identifier | undefined, value: string): void;
19
+ emitReturn(this: Generator, statement: ReturnStatement): void;
20
+ popTryFramesTo(this: Generator, depth: number): void;
21
+ }
22
+ export declare const statementMethods: StatementMethods;