@scriptc/compiler 0.3.4 → 0.3.5
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/ambient/scriptc-node-fallback.d.ts +131 -10
- package/dist/backend/llvm/array-search.js +1 -1
- package/dist/backend/llvm/array-search.js.map +1 -1
- package/dist/backend/llvm/call-lifetimes.d.ts +6 -0
- package/dist/backend/llvm/call-lifetimes.js +19 -0
- package/dist/backend/llvm/call-lifetimes.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
- package/dist/backend/llvm/constant-callbacks.js +36 -219
- package/dist/backend/llvm/constant-callbacks.js.map +1 -1
- package/dist/backend/llvm/constant-callbacks.test.js +22 -0
- package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
- package/dist/backend/llvm/dense-array-access.d.ts +9 -0
- package/dist/backend/llvm/dense-array-access.js +27 -1
- package/dist/backend/llvm/dense-array-access.js.map +1 -1
- package/dist/backend/llvm/dyn.d.ts +6 -0
- package/dist/backend/llvm/dyn.js +40 -6
- package/dist/backend/llvm/dyn.js.map +1 -1
- package/dist/backend/llvm/emitter.d.ts +75 -1
- package/dist/backend/llvm/emitter.js +408 -38
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/backend/llvm/expr-async.js +17 -7
- package/dist/backend/llvm/expr-async.js.map +1 -1
- package/dist/backend/llvm/expr-bytes.js +1 -1
- package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
- package/dist/backend/llvm/expr-callbacks.js +53 -0
- package/dist/backend/llvm/expr-callbacks.js.map +1 -1
- package/dist/backend/llvm/expr-calls.js +88 -2
- package/dist/backend/llvm/expr-calls.js.map +1 -1
- package/dist/backend/llvm/expr-containers.js +50 -27
- package/dist/backend/llvm/expr-containers.js.map +1 -1
- package/dist/backend/llvm/expr-primitives.js +9 -1
- package/dist/backend/llvm/expr-primitives.js.map +1 -1
- package/dist/backend/llvm/expr-stream-bridges.js +4 -0
- package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
- package/dist/backend/llvm/integer-clones.d.ts +103 -0
- package/dist/backend/llvm/integer-clones.js +1336 -0
- package/dist/backend/llvm/integer-clones.js.map +1 -0
- package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
- package/dist/backend/llvm/integer-clones.test.js +219 -0
- package/dist/backend/llvm/integer-clones.test.js.map +1 -0
- package/dist/backend/llvm/lib-datagram.js +14 -0
- package/dist/backend/llvm/lib-datagram.js.map +1 -1
- package/dist/backend/llvm/lib-dispatch.js +4 -0
- package/dist/backend/llvm/lib-dispatch.js.map +1 -1
- package/dist/backend/llvm/lib-process.js +24 -0
- package/dist/backend/llvm/lib-process.js.map +1 -1
- package/dist/backend/llvm/lib-shared.js +34 -2
- package/dist/backend/llvm/lib-shared.js.map +1 -1
- package/dist/backend/llvm/lib-tls.js +6 -0
- package/dist/backend/llvm/lib-tls.js.map +1 -1
- package/dist/backend/llvm/local-array-reads.js +1 -1
- package/dist/backend/llvm/local-array-reads.js.map +1 -1
- package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
- package/dist/backend/llvm/map-entry-fusion.js +233 -0
- package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
- package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
- package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
- package/dist/backend/llvm/map-number-lookup.d.ts +2 -0
- package/dist/backend/llvm/map-number-lookup.js +1 -1
- package/dist/backend/llvm/map-number-lookup.js.map +1 -1
- package/dist/backend/llvm/map-number-lookup.test.js +10 -11
- package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.d.ts +2 -0
- package/dist/backend/llvm/map-read-lifetimes.js +3 -0
- package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
- package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
- package/dist/backend/llvm/publish.d.ts +16 -0
- package/dist/backend/llvm/publish.js +81 -10
- package/dist/backend/llvm/publish.js.map +1 -1
- package/dist/backend/llvm/publish.test.d.ts +1 -0
- package/dist/backend/llvm/publish.test.js +94 -0
- package/dist/backend/llvm/publish.test.js.map +1 -0
- package/dist/backend/llvm/record-results.js +76 -2
- package/dist/backend/llvm/record-results.js.map +1 -1
- package/dist/backend/llvm/record-sources.d.ts +7 -0
- package/dist/backend/llvm/record-sources.js +14 -0
- package/dist/backend/llvm/record-sources.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +9 -3
- package/dist/backend/llvm/shapes.js +18 -14
- package/dist/backend/llvm/shapes.js.map +1 -1
- package/dist/backend/llvm/shapes.test.js +5 -3
- package/dist/backend/llvm/shapes.test.js.map +1 -1
- package/dist/backend/llvm/string-lifetimes.test.js +75 -1
- package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
- package/dist/backend/llvm/walkers.d.ts +17 -0
- package/dist/backend/llvm/walkers.js +123 -0
- package/dist/backend/llvm/walkers.js.map +1 -1
- package/dist/backend/native/contracts.d.ts +2 -1
- package/dist/backend/native/executable.js +3 -1
- package/dist/backend/native/executable.js.map +1 -1
- package/dist/backend/runtime-abi.d.ts +2 -2
- package/dist/backend/runtime-abi.js +2 -2
- package/dist/backend/runtime-pack-targets.test.js +1 -1
- package/dist/backend/runtime-pack.test.js +1 -1
- package/dist/frontend/lowering/builtin-calls.js +3 -0
- package/dist/frontend/lowering/builtin-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/callable-aliases.js +54 -8
- package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
- package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
- package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
- package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +2 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js +5 -0
- package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
- package/dist/frontend/lowering/builtins/filesystem.js +60 -0
- package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
- package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
- package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
- package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
- package/dist/frontend/lowering/builtins/module-calls.js +5 -1
- package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
- package/dist/frontend/lowering/class-dynamic-dispatch.js +150 -8
- package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
- package/dist/frontend/lowering/containers/bytes.js +33 -12
- package/dist/frontend/lowering/containers/bytes.js.map +1 -1
- package/dist/frontend/lowering/devirtualize.js +20 -7
- package/dist/frontend/lowering/devirtualize.js.map +1 -1
- package/dist/frontend/lowering/lower-calls.js +58 -3
- package/dist/frontend/lowering/lower-calls.js.map +1 -1
- package/dist/frontend/lowering/lower-classes.js +7 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -1
- package/dist/frontend/lowering/lower-dgram.js +55 -15
- package/dist/frontend/lowering/lower-dgram.js.map +1 -1
- package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
- package/dist/frontend/lowering/lower-event-emitter.js +78 -0
- package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
- package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
- package/dist/frontend/lowering/lower-exprs.js +132 -58
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-inspect.js +26 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -1
- package/dist/frontend/lowering/lower-server.d.ts +2 -1
- package/dist/frontend/lowering/lower-server.js +73 -5
- package/dist/frontend/lowering/lower-server.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +12 -6
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/frontend/lowering/lower-stream.js +8 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -1
- package/dist/frontend/lowering/lowerer.d.ts +3 -1
- package/dist/frontend/lowering/lowerer.js +2 -2
- package/dist/frontend/lowering/lowerer.js.map +1 -1
- package/dist/frontend/lowering/record-sources.d.ts +15 -0
- package/dist/frontend/lowering/record-sources.js +46 -0
- package/dist/frontend/lowering/record-sources.js.map +1 -0
- package/dist/frontend/lowering/surfaces.js +33 -1
- package/dist/frontend/lowering/surfaces.js.map +1 -1
- package/dist/frontend/type-mapper.d.ts +3 -0
- package/dist/frontend/type-mapper.js +53 -0
- package/dist/frontend/type-mapper.js.map +1 -1
- package/dist/ir/analysis.d.ts +10 -0
- package/dist/ir/analysis.js +35 -0
- package/dist/ir/analysis.js.map +1 -1
- package/dist/ir/analysis.test.js +69 -1
- package/dist/ir/analysis.test.js.map +1 -1
- package/dist/ir/builtin-effects.js +36 -0
- package/dist/ir/builtin-effects.js.map +1 -1
- package/dist/ir/builtin-signatures.d.ts +1 -1
- package/dist/ir/builtin-signatures.js +91 -7
- package/dist/ir/builtin-signatures.js.map +1 -1
- package/dist/ir/capture-values.d.ts +107 -0
- package/dist/ir/capture-values.js +850 -0
- package/dist/ir/capture-values.js.map +1 -0
- package/dist/ir/capture-values.test.d.ts +1 -0
- package/dist/ir/capture-values.test.js +268 -0
- package/dist/ir/capture-values.test.js.map +1 -0
- package/dist/ir/field-values.d.ts +16 -0
- package/dist/ir/field-values.js +128 -0
- package/dist/ir/field-values.js.map +1 -0
- package/dist/ir/field-values.test.d.ts +1 -0
- package/dist/ir/field-values.test.js +160 -0
- package/dist/ir/field-values.test.js.map +1 -0
- package/dist/ir/final-fields.d.ts +4 -1
- package/dist/ir/final-fields.js +11 -3
- package/dist/ir/final-fields.js.map +1 -1
- package/dist/ir/function-references.test.js +1 -1
- package/dist/ir/function-references.test.js.map +1 -1
- package/dist/ir/init-only-globals.d.ts +16 -0
- package/dist/ir/init-only-globals.js +121 -0
- package/dist/ir/init-only-globals.js.map +1 -0
- package/dist/ir/init-only-globals.test.d.ts +1 -0
- package/dist/ir/init-only-globals.test.js +115 -0
- package/dist/ir/init-only-globals.test.js.map +1 -0
- package/dist/ir/initializer-bindings.d.ts +18 -1
- package/dist/ir/initializer-bindings.js +91 -1
- package/dist/ir/initializer-bindings.js.map +1 -1
- package/dist/ir/initializer-bindings.test.js +57 -2
- package/dist/ir/initializer-bindings.test.js.map +1 -1
- package/dist/ir/int32-slots.d.ts +22 -0
- package/dist/ir/int32-slots.js +376 -13
- package/dist/ir/int32-slots.js.map +1 -1
- package/dist/ir/int32-slots.test.js +91 -8
- package/dist/ir/int32-slots.test.js.map +1 -1
- package/dist/ir/integer-loop-facts.d.ts +19 -1
- package/dist/ir/integer-loop-facts.js +155 -7
- package/dist/ir/integer-loop-facts.js.map +1 -1
- package/dist/ir/integer-ranges.d.ts +8 -5
- package/dist/ir/integer-ranges.js +147 -55
- package/dist/ir/integer-ranges.js.map +1 -1
- package/dist/ir/integer-ranges.test.js +225 -7
- package/dist/ir/integer-ranges.test.js.map +1 -1
- package/dist/ir/ir.d.ts +9 -1
- package/dist/ir/ir.js.map +1 -1
- package/dist/ir/property-bags.d.ts +14 -0
- package/dist/ir/property-bags.js +121 -0
- package/dist/ir/property-bags.js.map +1 -0
- package/dist/ir/receiver-readers.d.ts +21 -0
- package/dist/ir/receiver-readers.js +217 -0
- package/dist/ir/receiver-readers.js.map +1 -0
- package/dist/ir/runtime-features.js +6 -1
- package/dist/ir/runtime-features.js.map +1 -1
- package/dist/ir/validate.js +26 -0
- package/dist/ir/validate.js.map +1 -1
- package/dist/ir/validate.test.js +21 -0
- package/dist/ir/validate.test.js.map +1 -1
- package/dist/library/int-infer.js +3 -0
- package/dist/library/int-infer.js.map +1 -1
- package/package.json +20 -20
- package/surface-manifest.json +28 -2
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type IrFunction, type IrModule } from "./ir.js";
|
|
2
|
+
/** Captured bindings that hold one value for their whole observable life
|
|
3
|
+
* read through plain immutable locals.
|
|
4
|
+
*
|
|
5
|
+
* A captured binding lives in a shared box: the declaring function and
|
|
6
|
+
* every closure environment that captures it address the same cell, so a
|
|
7
|
+
* write anywhere is visible everywhere. When nothing ever writes the cell
|
|
8
|
+
* after its declaration fills it, the box is only a carrier: every read
|
|
9
|
+
* observes the declaration's value. Analyses and code generation exclude
|
|
10
|
+
* boxed locals, though, so a boxed `const N` turns all integer index math
|
|
11
|
+
* that reads it into checked f64 arithmetic and every reference read into
|
|
12
|
+
* an out-of-line retained box load.
|
|
13
|
+
*
|
|
14
|
+
* This pass keeps the boxes (environments still capture and trace them
|
|
15
|
+
* exactly as before, so ownership and cycle collection are unchanged) and
|
|
16
|
+
* moves the reads onto plain locals:
|
|
17
|
+
*
|
|
18
|
+
* - In the declaring function, `varDecl x = init` becomes
|
|
19
|
+
* `varDecl x' = init; varDecl x = x'`, and every read of `x` reads `x'`.
|
|
20
|
+
* An unchanged captured number parameter `p` gets `varDecl p' = p` at
|
|
21
|
+
* entry in the same way.
|
|
22
|
+
* - In a closure body, an entry `varDecl c' = c` copies the environment's
|
|
23
|
+
* value once and every read of `c` reads `c'`. When every creation site
|
|
24
|
+
* captures a declaration of the same closed numeric constant, `c'`
|
|
25
|
+
* starts from that literal instead, so range analysis sees the constant.
|
|
26
|
+
*
|
|
27
|
+
* Nested environments still capture the original box. A call through such
|
|
28
|
+
* a binding whose only value is an environment-free function (a nested
|
|
29
|
+
* function declaration or arrow that captures nothing) becomes a direct
|
|
30
|
+
* call of a capture-free copy of that body, as a call of a top-level
|
|
31
|
+
* function is: the closure value itself still exists for every other use.
|
|
32
|
+
*
|
|
33
|
+
* Soundness. A binding qualifies when its box is filled exactly once
|
|
34
|
+
* before any environment can observe it and nothing rebinds it in any
|
|
35
|
+
* function that shares the box:
|
|
36
|
+
*
|
|
37
|
+
* - the declaration is the binding's only `varDecl` and has an
|
|
38
|
+
* initializer that does not itself create an environment over it; a
|
|
39
|
+
* temporal-dead-zone binding (an environment exists before its
|
|
40
|
+
* initializing `assign`) qualifies only when no code can run any such
|
|
41
|
+
* environment, or read the binding, before that assignment (orderedTdz),
|
|
42
|
+
* and otherwise keeps every checked read,
|
|
43
|
+
* - no `assign`, `assignExpr`, `incDec`, `forOf`, catch or rethrow binding
|
|
44
|
+
* targets it, here or in any closure body reached through capture edges,
|
|
45
|
+
* - local classes keep their boxes (method bodies are not followed).
|
|
46
|
+
*
|
|
47
|
+
* A closure capture qualifies when every creation site supplies such a
|
|
48
|
+
* binding, an unchanged parameter, or a qualifying capture of the creating
|
|
49
|
+
* closure. A closure can only run after its creation, so its entry copy
|
|
50
|
+
* reads the final value. Every execution of a declaration (for example
|
|
51
|
+
* per loop iteration) fills its own fresh box, so environments created in
|
|
52
|
+
* different iterations keep seeing their own value. */
|
|
53
|
+
export declare function copyStableCaptures(mod: IrModule): IrModule;
|
|
54
|
+
/** Capture-flow facts over the whole module. Capture chains follow lexical
|
|
55
|
+
* nesting and cannot cycle; provisional memo entries only bound work on
|
|
56
|
+
* malformed input. */
|
|
57
|
+
export declare class CaptureFlow {
|
|
58
|
+
private readonly functions;
|
|
59
|
+
private readonly facts;
|
|
60
|
+
private readonly unchangedMemo;
|
|
61
|
+
private readonly stableMemo;
|
|
62
|
+
private readonly sites;
|
|
63
|
+
private readonly receivers;
|
|
64
|
+
private readonly directMemo;
|
|
65
|
+
/** Environment-free bodies called directly, and their copies' names. */
|
|
66
|
+
private readonly clones;
|
|
67
|
+
constructor(functions: readonly IrFunction[]);
|
|
68
|
+
directClones(): ReadonlyMap<string, string>;
|
|
69
|
+
/** A lifted body that captures nothing and can be entered like a declared
|
|
70
|
+
* function: synchronous, never naming its own closure, and unable to
|
|
71
|
+
* observe the ambient receiver a closure call would bracket. */
|
|
72
|
+
private direct;
|
|
73
|
+
/** The environment-free function every execution binds to `id`, if any. */
|
|
74
|
+
private target;
|
|
75
|
+
private readonly statementIds;
|
|
76
|
+
/** The bindings a statement reads (with counts) and captures, at any depth. */
|
|
77
|
+
private idsIn;
|
|
78
|
+
/** Reads of `id` in the statements of `body` after index `after`. */
|
|
79
|
+
private readsAfter;
|
|
80
|
+
/** A temporal-dead-zone binding no read can reach before its
|
|
81
|
+
* initialization: every environment created before the initializing
|
|
82
|
+
* assignment is the direct value of an unshared local of this function
|
|
83
|
+
* whose every read follows that assignment, and so is every read of the
|
|
84
|
+
* binding itself. Its box is then filled before any code can observe it. */
|
|
85
|
+
private orderedTdz;
|
|
86
|
+
/** An unboxed binding (no environment shares it) of `fn` itself that
|
|
87
|
+
* holds its single definition from its first read on. */
|
|
88
|
+
private plainConstant;
|
|
89
|
+
/** `callValue` through a binding bound to one environment-free function,
|
|
90
|
+
* as a direct call of its capture-free copy. */
|
|
91
|
+
private directCall;
|
|
92
|
+
private factsOf;
|
|
93
|
+
private local;
|
|
94
|
+
/** Nothing rebinds `id` in `fnName` (declarations aside, and `ownWrites`
|
|
95
|
+
* writes of its own body) or in any body that shares its box through
|
|
96
|
+
* closure captures. */
|
|
97
|
+
unchanged(fnName: string, id: string, ownWrites?: number): boolean;
|
|
98
|
+
/** A boxed binding of `fn` itself (not a capture) whose box is filled
|
|
99
|
+
* once, before any environment observes it, and never written again. */
|
|
100
|
+
stableOrigin(fn: IrFunction, id: string): boolean;
|
|
101
|
+
/** A closure capture holding one value for the environment's life. */
|
|
102
|
+
stableCapture(fnName: string, id: string): boolean;
|
|
103
|
+
private computeStableCapture;
|
|
104
|
+
/** The numeric constant every execution binds to `id`, if any. */
|
|
105
|
+
private literal;
|
|
106
|
+
rewrite(fn: IrFunction): IrFunction;
|
|
107
|
+
}
|