@elaraai/east 1.0.97 → 1.0.99

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 (154) hide show
  1. package/README.md +0 -1
  2. package/dist/src/builtins.d.ts +1 -1
  3. package/dist/src/builtins.d.ts.map +1 -1
  4. package/dist/src/builtins.js +14 -0
  5. package/dist/src/builtins.js.map +1 -1
  6. package/dist/src/codegen/spellings.d.ts.map +1 -1
  7. package/dist/src/codegen/spellings.js +2 -0
  8. package/dist/src/codegen/spellings.js.map +1 -1
  9. package/dist/src/comparison.d.ts +6 -5
  10. package/dist/src/comparison.d.ts.map +1 -1
  11. package/dist/src/comparison.js +6 -5
  12. package/dist/src/comparison.js.map +1 -1
  13. package/dist/src/compile/builtins/array.d.ts +4 -0
  14. package/dist/src/compile/builtins/array.d.ts.map +1 -1
  15. package/dist/src/compile/builtins/array.js +15 -1
  16. package/dist/src/compile/builtins/array.js.map +1 -1
  17. package/dist/src/compile/builtins/dict.d.ts +4 -0
  18. package/dist/src/compile/builtins/dict.d.ts.map +1 -1
  19. package/dist/src/compile/builtins/dict.js +14 -1
  20. package/dist/src/compile/builtins/dict.js.map +1 -1
  21. package/dist/src/compile/builtins/tree.d.ts +13 -0
  22. package/dist/src/compile/builtins/tree.d.ts.map +1 -1
  23. package/dist/src/compile/builtins/tree.js +27 -1
  24. package/dist/src/compile/builtins/tree.js.map +1 -1
  25. package/dist/src/compile/builtins/vector.d.ts +2 -2
  26. package/dist/src/compile/constructors.d.ts +6 -1
  27. package/dist/src/compile/constructors.d.ts.map +1 -1
  28. package/dist/src/compile/constructors.js +21 -11
  29. package/dist/src/compile/constructors.js.map +1 -1
  30. package/dist/src/compile/control.d.ts +7 -1
  31. package/dist/src/compile/control.d.ts.map +1 -1
  32. package/dist/src/compile/control.js +228 -146
  33. package/dist/src/compile/control.js.map +1 -1
  34. package/dist/src/compile/flow.d.ts +138 -0
  35. package/dist/src/compile/flow.d.ts.map +1 -0
  36. package/dist/src/compile/flow.js +358 -0
  37. package/dist/src/compile/flow.js.map +1 -0
  38. package/dist/src/compile/functions.d.ts +9 -1
  39. package/dist/src/compile/functions.d.ts.map +1 -1
  40. package/dist/src/compile/functions.js +62 -69
  41. package/dist/src/compile/functions.js.map +1 -1
  42. package/dist/src/compile/ir.d.ts +12 -0
  43. package/dist/src/compile/ir.d.ts.map +1 -1
  44. package/dist/src/compile/ir.js +164 -40
  45. package/dist/src/compile/ir.js.map +1 -1
  46. package/dist/src/compile/runtime.d.ts +2 -16
  47. package/dist/src/compile/runtime.d.ts.map +1 -1
  48. package/dist/src/compile/runtime.js +5 -40
  49. package/dist/src/compile/runtime.js.map +1 -1
  50. package/dist/src/compile.control_flow.spec.d.ts +6 -0
  51. package/dist/src/compile.control_flow.spec.d.ts.map +1 -0
  52. package/dist/src/compile.control_flow.spec.js +219 -0
  53. package/dist/src/compile.control_flow.spec.js.map +1 -0
  54. package/dist/src/compile.d.ts +1 -1
  55. package/dist/src/compile.d.ts.map +1 -1
  56. package/dist/src/compile.js +1 -1
  57. package/dist/src/compile.js.map +1 -1
  58. package/dist/src/eastir.d.ts.map +1 -1
  59. package/dist/src/eastir.js +8 -30
  60. package/dist/src/eastir.js.map +1 -1
  61. package/dist/src/expr/array.d.ts +39 -0
  62. package/dist/src/expr/array.d.ts.map +1 -1
  63. package/dist/src/expr/array.js +47 -0
  64. package/dist/src/expr/array.js.map +1 -1
  65. package/dist/src/expr/dict.d.ts +44 -1
  66. package/dist/src/expr/dict.d.ts.map +1 -1
  67. package/dist/src/expr/dict.js +54 -2
  68. package/dist/src/expr/dict.js.map +1 -1
  69. package/dist/src/expr/index.d.ts +130 -0
  70. package/dist/src/expr/index.d.ts.map +1 -1
  71. package/dist/src/expr/index.js +133 -0
  72. package/dist/src/expr/index.js.map +1 -1
  73. package/dist/src/expr/named.d.ts +100 -0
  74. package/dist/src/expr/named.d.ts.map +1 -0
  75. package/dist/src/expr/named.js +182 -0
  76. package/dist/src/expr/named.js.map +1 -0
  77. package/dist/src/functions.d.ts +21 -0
  78. package/dist/src/functions.d.ts.map +1 -1
  79. package/dist/src/functions.js +22 -41
  80. package/dist/src/functions.js.map +1 -1
  81. package/dist/src/internal.d.ts +1 -0
  82. package/dist/src/internal.d.ts.map +1 -1
  83. package/dist/src/internal.js +4 -0
  84. package/dist/src/internal.js.map +1 -1
  85. package/dist/src/ir_locations.d.ts +24 -0
  86. package/dist/src/ir_locations.d.ts.map +1 -0
  87. package/dist/src/ir_locations.js +58 -0
  88. package/dist/src/ir_locations.js.map +1 -0
  89. package/dist/src/location.d.ts +10 -0
  90. package/dist/src/location.d.ts.map +1 -1
  91. package/dist/src/location.js +19 -1
  92. package/dist/src/location.js.map +1 -1
  93. package/dist/src/query/jq/catalog.js +1 -1
  94. package/dist/src/query/jq/catalog.js.map +1 -1
  95. package/dist/src/query/jq/translate-builtins.d.ts.map +1 -1
  96. package/dist/src/query/jq/translate-builtins.js +11 -2
  97. package/dist/src/query/jq/translate-builtins.js.map +1 -1
  98. package/dist/src/query/jq/translate.d.ts +12 -0
  99. package/dist/src/query/jq/translate.d.ts.map +1 -1
  100. package/dist/src/query/jq/translate.js +40 -0
  101. package/dist/src/query/jq/translate.js.map +1 -1
  102. package/dist/src/runner_exec.d.ts +4 -1
  103. package/dist/src/runner_exec.d.ts.map +1 -1
  104. package/dist/src/runner_exec.js +24 -12
  105. package/dist/src/runner_exec.js.map +1 -1
  106. package/dist/src/runner_merge.d.ts +18 -0
  107. package/dist/src/runner_merge.d.ts.map +1 -1
  108. package/dist/src/runner_merge.js +36 -2
  109. package/dist/src/runner_merge.js.map +1 -1
  110. package/dist/src/serialization/beast2/decoded-function.spec.js +7 -4
  111. package/dist/src/serialization/beast2/decoded-function.spec.js.map +1 -1
  112. package/dist/src/serialization/beast2/shared.d.ts.map +1 -1
  113. package/dist/src/serialization/beast2/shared.js +6 -21
  114. package/dist/src/serialization/beast2/shared.js.map +1 -1
  115. package/dist/src/serialization/beast2/v4/container.d.ts.map +1 -1
  116. package/dist/src/serialization/beast2/v4/container.js +3 -4
  117. package/dist/src/serialization/beast2/v4/container.js.map +1 -1
  118. package/dist/src/serialization/beast2/v4/type-table.d.ts +42 -14
  119. package/dist/src/serialization/beast2/v4/type-table.d.ts.map +1 -1
  120. package/dist/src/serialization/beast2/v4/type-table.js +139 -53
  121. package/dist/src/serialization/beast2/v4/type-table.js.map +1 -1
  122. package/dist/src/serialization/beast2/v5/codec.d.ts +29 -2
  123. package/dist/src/serialization/beast2/v5/codec.d.ts.map +1 -1
  124. package/dist/src/serialization/beast2/v5/codec.js +153 -27
  125. package/dist/src/serialization/beast2/v5/codec.js.map +1 -1
  126. package/dist/src/serialization/beast2/v5/manifest.d.ts +3 -3
  127. package/dist/src/serialization/beast2/v5/manifest.js +3 -3
  128. package/dist/src/serialization/beast2/v5/runs.d.ts.map +1 -1
  129. package/dist/src/serialization/beast2/v5/runs.js +16 -4
  130. package/dist/src/serialization/beast2/v5/runs.js.map +1 -1
  131. package/dist/src/serialization/beast2/v5/source-maps.spec.d.ts +6 -0
  132. package/dist/src/serialization/beast2/v5/source-maps.spec.d.ts.map +1 -0
  133. package/dist/src/serialization/beast2/v5/source-maps.spec.js +81 -0
  134. package/dist/src/serialization/beast2/v5/source-maps.spec.js.map +1 -0
  135. package/dist/src/serialization/beast2/v5/type-section.js +1 -1
  136. package/dist/src/serialization/beast2/v5/type-section.js.map +1 -1
  137. package/dist/src/type_of_type.d.ts +12 -33
  138. package/dist/src/type_of_type.d.ts.map +1 -1
  139. package/dist/src/type_of_type.js +46 -174
  140. package/dist/src/type_of_type.js.map +1 -1
  141. package/dist/src/type_of_type.recursive_id.spec.d.ts +6 -0
  142. package/dist/src/type_of_type.recursive_id.spec.d.ts.map +1 -0
  143. package/dist/src/type_of_type.recursive_id.spec.js +86 -0
  144. package/dist/src/type_of_type.recursive_id.spec.js.map +1 -0
  145. package/dist/src/type_of_type.to_etv.spec.js +9 -9
  146. package/dist/src/type_of_type.to_etv.spec.js.map +1 -1
  147. package/dist/src/type_value_equal.d.ts +31 -0
  148. package/dist/src/type_value_equal.d.ts.map +1 -0
  149. package/dist/src/type_value_equal.js +170 -0
  150. package/dist/src/type_value_equal.js.map +1 -0
  151. package/dist/src/types.d.ts.map +1 -1
  152. package/dist/src/types.js +3 -1
  153. package/dist/src/types.js.map +1 -1
  154. package/package.json +1 -1
@@ -1,9 +1,22 @@
1
1
  import { builtin_evaluators } from "./builtins/index.js";
2
- import { compile_internal } from "./ir.js";
3
- import { BreakException, callDepthErrorAt, ContinueException, EAST_CAPTURES_SYMBOL, EAST_IR_SYMBOL, EAST_SOURCE_MAP_SYMBOL, getContextValue, lazyReadErrorAt, ReturnException } from "./runtime.js";
2
+ import { compile_ir } from "./ir.js";
3
+ import { asStatement, asValue, functionExit } from "./flow.js";
4
+ import { callDepthErrorAt, EAST_CAPTURES_SYMBOL, EAST_IR_SYMBOL, EAST_SOURCE_MAP_SYMBOL, getContextValue, lazyReadErrorAt } from "./runtime.js";
4
5
  import { variant } from "../containers/variant.js";
5
6
  import { EastError } from "../error.js";
6
- /** Compiles the function definitions, calls, and builtin and platform calls. */
7
+ /** An argument, or the function called, compiled: a signal it gives is thrown. */
8
+ function argument(child, ctx, platform, asyncPlatformFns, platformDef, compilingNodes) {
9
+ return asValue(child, compile_ir(child, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
10
+ }
11
+ /**
12
+ * Compiles the function definitions, calls, and builtin and platform calls.
13
+ *
14
+ * A function gives its value, never a control signal: what its body gives
15
+ * for a `return` is the function's value (`functionExit`), so a call, East's
16
+ * or a builtin's or a platform's, gets the value alone. A call, a builtin or
17
+ * a platform function computes a value from its arguments, so a control
18
+ * statement an argument leaves is thrown (`asValue`, `flow.ts`).
19
+ */
7
20
  export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformDef, compilingNodes, source_map) {
8
21
  if (ir.type === "Function") {
9
22
  // Compile-time type context for body compilation
@@ -14,7 +27,9 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
14
27
  for (const parameter of ir.value.parameters) {
15
28
  typeCtx[parameter.value.name] = parameter.value.type;
16
29
  }
17
- const compiled_body = compile_internal(ir.value.body, typeCtx, platform, asyncPlatformFns, platformDef, true, compilingNodes);
30
+ const compiled_body = asStatement(ir.value.body, compile_ir(ir.value.body, typeCtx, platform, asyncPlatformFns, platformDef, true, compilingNodes));
31
+ // A `return`'s signal the body gives is the function's value; undefined when the body can give none.
32
+ const exit = functionExit(ir.value.body, ir.value.loc_id);
18
33
  const capture_names = ir.value.captures.map(v => v.value.name);
19
34
  const parameter_names = ir.value.parameters.map(v => v.value.name);
20
35
  // Store original IR for potential serialization
@@ -25,11 +40,17 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
25
40
  for (const name of capture_names) {
26
41
  captureCtx[name] = getContextValue(ctx, name);
27
42
  }
28
- const fn = (...args) => {
29
- const fnCtx = { ...captureCtx };
30
- parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
31
- return compiled_body(fnCtx);
32
- };
43
+ const fn = exit === undefined
44
+ ? (...args) => {
45
+ const fnCtx = { ...captureCtx };
46
+ parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
47
+ return compiled_body(fnCtx);
48
+ }
49
+ : (...args) => {
50
+ const fnCtx = { ...captureCtx };
51
+ parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
52
+ return exit(compiled_body(fnCtx));
53
+ };
33
54
  // Attach IR to function for serialization support
34
55
  Object.defineProperty(fn, EAST_IR_SYMBOL, {
35
56
  value: originalIR,
@@ -65,7 +86,10 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
65
86
  for (const parameter of ir.value.parameters) {
66
87
  typeCtx[parameter.value.name] = parameter.value.type;
67
88
  }
68
- const compiled_body = compile_internal(ir.value.body, typeCtx, platform, asyncPlatformFns, platformDef, true, compilingNodes);
89
+ const compiled_body = asStatement(ir.value.body, compile_ir(ir.value.body, typeCtx, platform, asyncPlatformFns, platformDef, true, compilingNodes));
90
+ // A `return`'s signal the body gives is the function's value; undefined when the body can give none.
91
+ const exit = functionExit(ir.value.body, ir.value.loc_id);
92
+ const body_awaits = ir.value.body.value.isAsync;
69
93
  const capture_names = ir.value.captures.map(v => v.value.name);
70
94
  const parameter_names = ir.value.parameters.map(v => v.value.name);
71
95
  // Store original IR for potential serialization
@@ -76,11 +100,23 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
76
100
  for (const name of capture_names) {
77
101
  captureCtx[name] = getContextValue(ctx, name);
78
102
  }
79
- const fn = (...args) => {
80
- const fnCtx = { ...captureCtx };
81
- parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
82
- return compiled_body(fnCtx); // Promise can pass through in tail position
83
- };
103
+ const fn = exit === undefined
104
+ ? (...args) => {
105
+ const fnCtx = { ...captureCtx };
106
+ parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
107
+ return compiled_body(fnCtx); // Promise can pass through in tail position
108
+ }
109
+ : body_awaits
110
+ ? async (...args) => {
111
+ const fnCtx = { ...captureCtx };
112
+ parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
113
+ return exit(await compiled_body(fnCtx));
114
+ }
115
+ : (...args) => {
116
+ const fnCtx = { ...captureCtx };
117
+ parameter_names.forEach((name, i) => fnCtx[name] = variant("value", args[i]));
118
+ return exit(compiled_body(fnCtx));
119
+ };
84
120
  // Attach IR to function for serialization support
85
121
  Object.defineProperty(fn, EAST_IR_SYMBOL, {
86
122
  value: originalIR,
@@ -108,9 +144,11 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
108
144
  };
109
145
  }
110
146
  else if (ir.type === "Call") {
111
- const compiled_f = compile_internal(ir.value.function, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
112
- const compiled_args = ir.value.arguments.map(argument => compile_internal(argument, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
147
+ const compiled_f = argument(ir.value.function, ctx, platform, asyncPlatformFns, platformDef, compilingNodes);
148
+ const compiled_args = ir.value.arguments.map(a => argument(a, ctx, platform, asyncPlatformFns, platformDef, compilingNodes));
113
149
  const loc_id = ir.value.loc_id;
150
+ // A call nested too deeply is an East error at the call; the function
151
+ // gives its value, so nothing else is caught here.
114
152
  if (ir.value.isAsync) {
115
153
  // need to await the arguments
116
154
  return async (ctx) => {
@@ -122,22 +160,7 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
122
160
  return compiled_f(ctx)(...args);
123
161
  }
124
162
  catch (e) {
125
- if (e instanceof ReturnException) {
126
- return e.value;
127
- }
128
- else if (e instanceof EastError) {
129
- // TODO: push loc_id to EastError once SourceMap resolution is wired up
130
- throw (e);
131
- }
132
- else if (e instanceof ContinueException) {
133
- throw new Error(`continue failed to find label ${e.label} at loc_id ${loc_id}`);
134
- }
135
- else if (e instanceof BreakException) {
136
- throw new Error(`break failed to find label ${e.label} at loc_id ${loc_id}`);
137
- }
138
- else {
139
- throw callDepthErrorAt(e, loc_id, source_map);
140
- }
163
+ throw callDepthErrorAt(e, loc_id, source_map);
141
164
  }
142
165
  };
143
166
  }
@@ -147,29 +170,14 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
147
170
  return compiled_f(ctx)(...compiled_args.map(arg => arg(ctx)));
148
171
  }
149
172
  catch (e) {
150
- if (e instanceof ReturnException) {
151
- return e.value;
152
- }
153
- else if (e instanceof EastError) {
154
- // TODO: push loc_id to EastError once SourceMap resolution is wired up
155
- throw (e);
156
- }
157
- else if (e instanceof ContinueException) {
158
- throw new Error(`continue failed to find label ${e.label} at loc_id ${loc_id}`);
159
- }
160
- else if (e instanceof BreakException) {
161
- throw new Error(`break failed to find label ${e.label} at loc_id ${loc_id}`);
162
- }
163
- else {
164
- throw callDepthErrorAt(e, loc_id, source_map);
165
- }
173
+ throw callDepthErrorAt(e, loc_id, source_map);
166
174
  }
167
175
  };
168
176
  }
169
177
  }
170
178
  else if (ir.type === "CallAsync") {
171
- const compiled_f = compile_internal(ir.value.function, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
172
- const compiled_args = ir.value.arguments.map(argument => compile_internal(argument, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
179
+ const compiled_f = argument(ir.value.function, ctx, platform, asyncPlatformFns, platformDef, compilingNodes);
180
+ const compiled_args = ir.value.arguments.map(a => argument(a, ctx, platform, asyncPlatformFns, platformDef, compilingNodes));
173
181
  const loc_id = ir.value.loc_id;
174
182
  return async (ctx) => {
175
183
  try {
@@ -180,22 +188,7 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
180
188
  return await compiled_f(ctx)(...args);
181
189
  }
182
190
  catch (e) {
183
- if (e instanceof ReturnException) {
184
- return e.value;
185
- }
186
- else if (e instanceof EastError) {
187
- // TODO: push loc_id to EastError once SourceMap resolution is wired up
188
- throw (e);
189
- }
190
- else if (e instanceof ContinueException) {
191
- throw new Error(`continue failed to find label ${e.label} at loc_id ${loc_id}`);
192
- }
193
- else if (e instanceof BreakException) {
194
- throw new Error(`break failed to find label ${e.label} at loc_id ${loc_id}`);
195
- }
196
- else {
197
- throw callDepthErrorAt(e, loc_id, source_map);
198
- }
191
+ throw callDepthErrorAt(e, loc_id, source_map);
199
192
  }
200
193
  };
201
194
  }
@@ -205,7 +198,7 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
205
198
  if (a.value.isAsync) {
206
199
  argsAsync = true;
207
200
  }
208
- return compile_internal(a, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
201
+ return argument(a, ctx, platform, asyncPlatformFns, platformDef, compilingNodes);
209
202
  });
210
203
  // Special optimization for regex builtins with literal pattern/flags
211
204
  const loc_id = ir.value.loc_id;
@@ -417,7 +410,7 @@ export function compile_functions(ir, ctx, platform, asyncPlatformFns, platformD
417
410
  if (a.value.isAsync) {
418
411
  argsAsync = true;
419
412
  }
420
- return compile_internal(a, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
413
+ return argument(a, ctx, platform, asyncPlatformFns, platformDef, compilingNodes);
421
414
  });
422
415
  // Look up platform function definition to check if generic
423
416
  const platformFn = platformDef.find(p => p.name === ir.value.name);
@@ -1 +1 @@
1
- {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/compile/functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/compile/functions.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,19 @@ import type { EastTypeValue } from "../type_of_type.js";
13
13
  * A "context" of the current variables in scope is given. For toplevel function IR, provide `{}`.
14
14
  * A "platform" is provided with JavaScript functions to perform effects, like logging. If no effects are needed, simply provide `{}`.
15
15
  *
16
+ * A `return`, `continue` or `break` gives a signal in place of a value, which
17
+ * the statements around it give back to the function or loop it is for
18
+ * (`flow.ts`): a function compiled from the IR gives its value, never a signal.
19
+ * What can leave each node is worked out once, as the compile starts.
20
+ *
16
21
  * @internal
17
22
  */
18
23
  export declare function compile_internal(ir: AnalyzedIR, ctx: Record<string, EastTypeValue>, platform: Record<string, (...args: any[]) => any>, asyncPlatformFns: Set<string>, platformDef: PlatformFunction[], fresh_ctx?: boolean, compilingNodes?: Set<IR>): (ctx: RuntimeContext) => any;
24
+ /** Compiles one node of the IR a {@link compile_internal} call was given — its
25
+ * root, or a node under it — within that call's compile, which knows what
26
+ * control flow can leave each node.
27
+ *
28
+ * @internal
29
+ */
30
+ export declare function compile_ir(ir: AnalyzedIR, ctx: Record<string, EastTypeValue>, platform: Record<string, (...args: any[]) => any>, asyncPlatformFns: Set<string>, platformDef: PlatformFunction[], fresh_ctx?: boolean, compilingNodes?: Set<IR>): (ctx: RuntimeContext) => any;
19
31
  //# sourceMappingURL=ir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../src/compile/ir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD;;;;;;;EAOE;AACF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,SAAS,GAAE,OAAc,EAAE,cAAc,GAAE,GAAG,CAAC,EAAE,CAAa,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,CA0JpS"}
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../../src/compile/ir.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAKhD,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEpF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKxD;;;;;;;;;;;;EAYE;AACF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,SAAS,GAAE,OAAc,EAAE,cAAc,GAAE,GAAG,CAAC,EAAE,CAAa,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,CAEpS;AAED;;;;;EAKE;AACF,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,SAAS,GAAE,OAAc,EAAE,cAAc,GAAE,GAAG,CAAC,EAAE,CAAa,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,GAAG,CAsP9R"}
@@ -1,5 +1,6 @@
1
1
  import { compile_constructors } from "./constructors.js";
2
2
  import { compile_control } from "./control.js";
3
+ import { asStatement, asValue, ControlSignal, escapesOf, NO_ESCAPES, withControlFlow } from "./flow.js";
3
4
  import { compile_functions } from "./functions.js";
4
5
  import { getContextValue, requiresBoxing } from "./runtime.js";
5
6
  import { variant } from "../containers/variant.js";
@@ -12,9 +13,23 @@ let _compile_source_map = null;
12
13
  * A "context" of the current variables in scope is given. For toplevel function IR, provide `{}`.
13
14
  * A "platform" is provided with JavaScript functions to perform effects, like logging. If no effects are needed, simply provide `{}`.
14
15
  *
16
+ * A `return`, `continue` or `break` gives a signal in place of a value, which
17
+ * the statements around it give back to the function or loop it is for
18
+ * (`flow.ts`): a function compiled from the IR gives its value, never a signal.
19
+ * What can leave each node is worked out once, as the compile starts.
20
+ *
15
21
  * @internal
16
22
  */
17
23
  export function compile_internal(ir, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx = true, compilingNodes = new Set()) {
24
+ return withControlFlow(ir, () => compile_ir(ir, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx, compilingNodes));
25
+ }
26
+ /** Compiles one node of the IR a {@link compile_internal} call was given — its
27
+ * root, or a node under it — within that call's compile, which knows what
28
+ * control flow can leave each node.
29
+ *
30
+ * @internal
31
+ */
32
+ export function compile_ir(ir, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx = true, compilingNodes = new Set()) {
18
33
  // Capture source map from the active scope on first call
19
34
  if (fresh_ctx)
20
35
  _compile_source_map = get_current_source_map();
@@ -32,11 +47,32 @@ export function compile_internal(ir, ctx, platform, asyncPlatformFns, platformDe
32
47
  return (ctx) => getContextValue(ctx, name).value;
33
48
  }
34
49
  else if (ir.type === "Let") {
35
- const compiled_statement = compile_internal(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
50
+ const compiled_statement = asStatement(ir.value.value, compile_ir(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
36
51
  const name = ir.value.variable.value.name;
37
52
  ctx[name] = ir.value.variable.value.type;
38
53
  const boxed = requiresBoxing(ir.value.variable.value);
39
- if (ir.value.isAsync) {
54
+ if (escapesOf(ir.value.value) !== NO_ESCAPES) {
55
+ // A value a control statement leaves binds nothing: its signal is the statement's.
56
+ if (ir.value.isAsync) {
57
+ return async (ctx) => {
58
+ const value = await compiled_statement(ctx);
59
+ if (value instanceof ControlSignal)
60
+ return value;
61
+ ctx[name] = boxed ? variant("boxed", value) : variant("value", value);
62
+ return null;
63
+ };
64
+ }
65
+ else {
66
+ return (ctx) => {
67
+ const value = compiled_statement(ctx);
68
+ if (value instanceof ControlSignal)
69
+ return value;
70
+ ctx[name] = boxed ? variant("boxed", value) : variant("value", value);
71
+ return null;
72
+ };
73
+ }
74
+ }
75
+ else if (ir.value.isAsync) {
40
76
  return async (ctx) => {
41
77
  ctx[name] = boxed
42
78
  ? variant("boxed", await compiled_statement(ctx))
@@ -55,8 +91,35 @@ export function compile_internal(ir, ctx, platform, asyncPlatformFns, platformDe
55
91
  }
56
92
  else if (ir.type === "Assign") {
57
93
  const name = ir.value.variable.value.name;
58
- const compiled_statement = compile_internal(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
59
- if (requiresBoxing(ir.value.variable.value)) {
94
+ const compiled_statement = asStatement(ir.value.value, compile_ir(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
95
+ const boxed = requiresBoxing(ir.value.variable.value);
96
+ if (escapesOf(ir.value.value) !== NO_ESCAPES) {
97
+ // A value a control statement leaves assigns nothing: its signal is the statement's.
98
+ const assign = (ctx, value) => {
99
+ if (boxed) {
100
+ getContextValue(ctx, name).value = value;
101
+ }
102
+ else {
103
+ while (!Object.hasOwn(ctx, name))
104
+ ctx = Object.getPrototypeOf(ctx);
105
+ ctx[name] = variant("value", value);
106
+ }
107
+ return null;
108
+ };
109
+ if (ir.value.isAsync) {
110
+ return async (ctx) => {
111
+ const value = await compiled_statement(ctx);
112
+ return value instanceof ControlSignal ? value : assign(ctx, value);
113
+ };
114
+ }
115
+ else {
116
+ return (ctx) => {
117
+ const value = compiled_statement(ctx);
118
+ return value instanceof ControlSignal ? value : assign(ctx, value);
119
+ };
120
+ }
121
+ }
122
+ else if (boxed) {
60
123
  // Boxed variables: mutate in place via .value
61
124
  if (ir.value.isAsync) {
62
125
  return async (ctx) => {
@@ -98,77 +161,138 @@ export function compile_internal(ir, ctx, platform, asyncPlatformFns, platformDe
98
161
  else if (ir.type === "As") {
99
162
  // in dynamically typed runtimes like Javascript, this is a no-op
100
163
  // (for statically typed runtimes this assists in unifying types in branches)
101
- return compile_internal(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx, compilingNodes);
164
+ return compile_ir(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx, compilingNodes);
102
165
  }
103
166
  else if (ir.type === "UnwrapRecursive") {
104
167
  // in dynamically typed runtimes like Javascript, this is a no-op
105
168
  // (for statically typed runtimes this assists in e.g. typing a reference or pointer)
106
- return compile_internal(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx, compilingNodes);
169
+ return compile_ir(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, fresh_ctx, compilingNodes);
107
170
  }
108
171
  else if (ir.type === "WrapRecursive") {
109
172
  // in dynamically typed runtimes like Javascript, this is a no-op
110
173
  // (for statically typed runtimes this assists in e.g. typing a heap allocation)
111
- return compile_internal(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
174
+ return compile_ir(ir.value.value, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
112
175
  }
113
176
  else if (ir.type === "Block") {
177
+ // A statement before the last that a control statement leaves ends the
178
+ // block: its signal is the block's, as the last statement's is anyway.
179
+ let leaves = false;
180
+ for (let i = 0; i < ir.value.statements.length - 1; i++) {
181
+ if (escapesOf(ir.value.statements[i]) !== NO_ESCAPES)
182
+ leaves = true;
183
+ }
114
184
  // The pattern of creating a new context (e.g. a function) and then immediately invoking a block (e.g. as the function body) is very common.
115
185
  // Here we avoid creating a second context when possible, as an optimization.
116
186
  if (fresh_ctx) {
117
187
  const compiled_statements = [];
118
188
  for (const statement of ir.value.statements) {
119
- const compiled_statement = compile_internal(statement, ctx, platform, asyncPlatformFns, platformDef, true, compilingNodes);
189
+ const compiled_statement = asStatement(statement, compile_ir(statement, ctx, platform, asyncPlatformFns, platformDef, true, compilingNodes));
120
190
  compiled_statements.push(compiled_statement);
121
191
  }
122
192
  if (ir.value.isAsync) {
123
- return async (ctx) => {
124
- let ret = null;
125
- for (const statement of compiled_statements) {
126
- ret = await statement(ctx);
127
- }
128
- return ret;
129
- };
193
+ if (leaves) {
194
+ return async (ctx) => {
195
+ let ret = null;
196
+ for (const statement of compiled_statements) {
197
+ ret = await statement(ctx);
198
+ if (ret instanceof ControlSignal)
199
+ return ret;
200
+ }
201
+ return ret;
202
+ };
203
+ }
204
+ else {
205
+ return async (ctx) => {
206
+ let ret = null;
207
+ for (const statement of compiled_statements) {
208
+ ret = await statement(ctx);
209
+ }
210
+ return ret;
211
+ };
212
+ }
130
213
  }
131
214
  else {
132
- return (ctx) => {
133
- let ret = null;
134
- for (const statement of compiled_statements) {
135
- ret = statement(ctx);
136
- }
137
- return ret;
138
- };
215
+ if (leaves) {
216
+ return (ctx) => {
217
+ let ret = null;
218
+ for (const statement of compiled_statements) {
219
+ ret = statement(ctx);
220
+ if (ret instanceof ControlSignal)
221
+ return ret;
222
+ }
223
+ return ret;
224
+ };
225
+ }
226
+ else {
227
+ return (ctx) => {
228
+ let ret = null;
229
+ for (const statement of compiled_statements) {
230
+ ret = statement(ctx);
231
+ }
232
+ return ret;
233
+ };
234
+ }
139
235
  }
140
236
  }
141
237
  else {
142
238
  const ctx2 = Object.create(ctx);
143
239
  const compiled_statements = [];
144
240
  for (const statement of ir.value.statements) {
145
- const compiled_statement = compile_internal(statement, ctx2, platform, asyncPlatformFns, platformDef, true, compilingNodes);
241
+ const compiled_statement = asStatement(statement, compile_ir(statement, ctx2, platform, asyncPlatformFns, platformDef, true, compilingNodes));
146
242
  compiled_statements.push(compiled_statement);
147
243
  }
148
244
  if (ir.value.isAsync) {
149
- return async (ctx) => {
150
- const ctx2 = Object.create(ctx);
151
- let ret = null;
152
- for (const statement of compiled_statements) {
153
- ret = await statement(ctx2);
154
- }
155
- return ret;
156
- };
245
+ if (leaves) {
246
+ return async (ctx) => {
247
+ const ctx2 = Object.create(ctx);
248
+ let ret = null;
249
+ for (const statement of compiled_statements) {
250
+ ret = await statement(ctx2);
251
+ if (ret instanceof ControlSignal)
252
+ return ret;
253
+ }
254
+ return ret;
255
+ };
256
+ }
257
+ else {
258
+ return async (ctx) => {
259
+ const ctx2 = Object.create(ctx);
260
+ let ret = null;
261
+ for (const statement of compiled_statements) {
262
+ ret = await statement(ctx2);
263
+ }
264
+ return ret;
265
+ };
266
+ }
157
267
  }
158
268
  else {
159
- return (ctx) => {
160
- const ctx2 = Object.create(ctx);
161
- let ret = null;
162
- for (const statement of compiled_statements) {
163
- ret = statement(ctx2);
164
- }
165
- return ret;
166
- };
269
+ if (leaves) {
270
+ return (ctx) => {
271
+ const ctx2 = Object.create(ctx);
272
+ let ret = null;
273
+ for (const statement of compiled_statements) {
274
+ ret = statement(ctx2);
275
+ if (ret instanceof ControlSignal)
276
+ return ret;
277
+ }
278
+ return ret;
279
+ };
280
+ }
281
+ else {
282
+ return (ctx) => {
283
+ const ctx2 = Object.create(ctx);
284
+ let ret = null;
285
+ for (const statement of compiled_statements) {
286
+ ret = statement(ctx2);
287
+ }
288
+ return ret;
289
+ };
290
+ }
167
291
  }
168
292
  }
169
293
  }
170
294
  else if (ir.type === "GetField") {
171
- const struct = compile_internal(ir.value.struct, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes);
295
+ const struct = asValue(ir.value.struct, compile_ir(ir.value.struct, ctx, platform, asyncPlatformFns, platformDef, false, compilingNodes));
172
296
  const field = ir.value.field;
173
297
  if (ir.value.isAsync) {
174
298
  return async (ctx) => (await struct(ctx))[field];