@scriptc/compiler 0.2.9 → 0.2.10

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 (147) hide show
  1. package/dist/backend/cycle-analysis.d.ts +56 -0
  2. package/dist/backend/cycle-analysis.js +175 -14
  3. package/dist/backend/cycle-analysis.js.map +1 -1
  4. package/dist/backend/cycle-analysis.test.js +94 -1
  5. package/dist/backend/cycle-analysis.test.js.map +1 -1
  6. package/dist/backend/cycle-mutability.d.ts +2 -6
  7. package/dist/backend/cycle-mutability.js +3 -12
  8. package/dist/backend/cycle-mutability.js.map +1 -1
  9. package/dist/backend/immutability.d.ts +57 -0
  10. package/dist/backend/immutability.js +178 -0
  11. package/dist/backend/immutability.js.map +1 -0
  12. package/dist/backend/immutability.test.d.ts +1 -0
  13. package/dist/backend/immutability.test.js +131 -0
  14. package/dist/backend/immutability.test.js.map +1 -0
  15. package/dist/backend/llvm/borrowed-inputs.d.ts +9 -2
  16. package/dist/backend/llvm/borrowed-inputs.js +31 -3
  17. package/dist/backend/llvm/borrowed-inputs.js.map +1 -1
  18. package/dist/backend/llvm/classes.d.ts +28 -0
  19. package/dist/backend/llvm/classes.js +45 -5
  20. package/dist/backend/llvm/classes.js.map +1 -1
  21. package/dist/backend/llvm/classes.test.js +129 -1
  22. package/dist/backend/llvm/classes.test.js.map +1 -1
  23. package/dist/backend/llvm/common.d.ts +13 -0
  24. package/dist/backend/llvm/common.js +13 -0
  25. package/dist/backend/llvm/common.js.map +1 -1
  26. package/dist/backend/llvm/dense-array-access.js +5 -4
  27. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  28. package/dist/backend/llvm/dense-array-access.test.js +9 -1
  29. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  30. package/dist/backend/llvm/dyn.d.ts +2 -0
  31. package/dist/backend/llvm/dyn.js +3 -3
  32. package/dist/backend/llvm/dyn.js.map +1 -1
  33. package/dist/backend/llvm/emitter.d.ts +64 -2
  34. package/dist/backend/llvm/emitter.js +390 -45
  35. package/dist/backend/llvm/emitter.js.map +1 -1
  36. package/dist/backend/llvm/emitter.test.js +18 -0
  37. package/dist/backend/llvm/emitter.test.js.map +1 -1
  38. package/dist/backend/llvm/expr-calls.js +14 -6
  39. package/dist/backend/llvm/expr-calls.js.map +1 -1
  40. package/dist/backend/llvm/expr-containers.js +30 -7
  41. package/dist/backend/llvm/expr-containers.js.map +1 -1
  42. package/dist/backend/llvm/expr-primitives.js +30 -3
  43. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  44. package/dist/backend/llvm/expr-primitives.test.js +53 -0
  45. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  46. package/dist/backend/llvm/expr-stream-bridges.js +4 -4
  47. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  48. package/dist/backend/llvm/local-array-reads.js +3 -3
  49. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  50. package/dist/backend/llvm/loop-array-borrows.d.ts +5 -2
  51. package/dist/backend/llvm/loop-array-borrows.js +27 -8
  52. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  53. package/dist/backend/llvm/map-number-lookup.d.ts +7 -0
  54. package/dist/backend/llvm/map-number-lookup.js +18 -1
  55. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  56. package/dist/backend/llvm/map-read-lifetimes.d.ts +5 -0
  57. package/dist/backend/llvm/map-read-lifetimes.js +14 -4
  58. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  59. package/dist/backend/llvm/map-read-lifetimes.test.js +5 -0
  60. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  61. package/dist/backend/llvm/reference-writes.d.ts +124 -0
  62. package/dist/backend/llvm/reference-writes.js +1090 -0
  63. package/dist/backend/llvm/reference-writes.js.map +1 -0
  64. package/dist/backend/llvm/shapes.d.ts +8 -5
  65. package/dist/backend/llvm/shapes.js +36 -11
  66. package/dist/backend/llvm/shapes.js.map +1 -1
  67. package/dist/backend/llvm/string-lifetimes.test.js +39 -10
  68. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  69. package/dist/backend/llvm/string-reads.d.ts +3 -0
  70. package/dist/backend/llvm/string-reads.js +31 -0
  71. package/dist/backend/llvm/string-reads.js.map +1 -1
  72. package/dist/backend/llvm/switch-dispatch.d.ts +2 -2
  73. package/dist/backend/llvm/switch-dispatch.js +35 -22
  74. package/dist/backend/llvm/switch-dispatch.js.map +1 -1
  75. package/dist/backend/llvm/switch-dispatch.test.js +28 -10
  76. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -1
  77. package/dist/backend/llvm/walk-borrows.d.ts +8 -1
  78. package/dist/backend/llvm/walk-borrows.js +15 -4
  79. package/dist/backend/llvm/walk-borrows.js.map +1 -1
  80. package/dist/backend/may-throw.d.ts +36 -2
  81. package/dist/backend/may-throw.js +308 -12
  82. package/dist/backend/may-throw.js.map +1 -1
  83. package/dist/backend/may-throw.test.js +146 -1
  84. package/dist/backend/may-throw.test.js.map +1 -1
  85. package/dist/backend/publication.d.ts +5 -0
  86. package/dist/backend/publication.js +10 -0
  87. package/dist/backend/publication.js.map +1 -1
  88. package/dist/backend/runtime-abi.d.ts +2 -2
  89. package/dist/backend/runtime-abi.js +2 -2
  90. package/dist/backend/runtime-pack-targets.test.js +1 -1
  91. package/dist/backend/runtime-pack.test.js +1 -1
  92. package/dist/contracts/check.d.ts +8 -0
  93. package/dist/contracts/check.js +1577 -0
  94. package/dist/contracts/check.js.map +1 -0
  95. package/dist/executable/prepare.js +9 -0
  96. package/dist/executable/prepare.js.map +1 -1
  97. package/dist/frontend/contract-types.d.ts +50 -0
  98. package/dist/frontend/contract-types.js +232 -0
  99. package/dist/frontend/contract-types.js.map +1 -0
  100. package/dist/frontend/lowering/coercions/unions.d.ts +12 -0
  101. package/dist/frontend/lowering/coercions/unions.js +63 -0
  102. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  103. package/dist/frontend/lowering/expressions/optional-chains.js +4 -1
  104. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  105. package/dist/frontend/lowering/lower-calls.js +9 -2
  106. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  107. package/dist/frontend/lowering/lower-exprs.js +83 -1
  108. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  109. package/dist/frontend/lowering/lowerer.d.ts +9 -0
  110. package/dist/frontend/lowering/lowerer.js +47 -0
  111. package/dist/frontend/lowering/lowerer.js.map +1 -1
  112. package/dist/frontend/lowering/narrowing-stability.d.ts +100 -0
  113. package/dist/frontend/lowering/narrowing-stability.js +1174 -0
  114. package/dist/frontend/lowering/narrowing-stability.js.map +1 -0
  115. package/dist/frontend/lowering/narrowing-stability.test.d.ts +1 -0
  116. package/dist/frontend/lowering/narrowing-stability.test.js +150 -0
  117. package/dist/frontend/lowering/narrowing-stability.test.js.map +1 -0
  118. package/dist/frontend/program.js +1 -1
  119. package/dist/frontend/type-mapper.js +43 -0
  120. package/dist/frontend/type-mapper.js.map +1 -1
  121. package/dist/ir/int32-slots.d.ts +26 -0
  122. package/dist/ir/int32-slots.js +147 -47
  123. package/dist/ir/int32-slots.js.map +1 -1
  124. package/dist/ir/integer-loops.js +3 -0
  125. package/dist/ir/integer-loops.js.map +1 -1
  126. package/dist/ir/integer-loops.test.js +26 -1
  127. package/dist/ir/integer-loops.test.js.map +1 -1
  128. package/dist/ir/integer-ranges.d.ts +20 -0
  129. package/dist/ir/integer-ranges.js +178 -21
  130. package/dist/ir/integer-ranges.js.map +1 -1
  131. package/dist/ir/integer-ranges.test.js +148 -3
  132. package/dist/ir/integer-ranges.test.js.map +1 -1
  133. package/dist/ir/ir.d.ts +32 -0
  134. package/dist/ir/ir.js.map +1 -1
  135. package/dist/ir/serialize.d.ts +5 -1
  136. package/dist/ir/serialize.js +8 -0
  137. package/dist/ir/serialize.js.map +1 -1
  138. package/dist/ir/unshare.d.ts +14 -0
  139. package/dist/ir/unshare.js +60 -0
  140. package/dist/ir/unshare.js.map +1 -0
  141. package/dist/ir/unshare.test.d.ts +1 -0
  142. package/dist/ir/unshare.test.js +115 -0
  143. package/dist/ir/unshare.test.js.map +1 -0
  144. package/dist/library/prepare.js +9 -0
  145. package/dist/library/prepare.js.map +1 -1
  146. package/package.json +20 -20
  147. package/surface-manifest.json +1 -1
@@ -0,0 +1,100 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import type { IrType } from "../../ir/ir.js";
3
+ import type { Lowerer } from "./lowerer.js";
4
+ /** Whether TypeScript's control-flow narrowing of a mutable reference still
5
+ * holds when the narrowed read executes.
6
+ *
7
+ * TypeScript narrows property references (`o.p`, `this.a.b`) and bindings
8
+ * after assignments and tests, and keeps that narrowing across calls: a
9
+ * callback, method or getter that clears or replaces the property (or a
10
+ * closure that reassigns the binding) leaves the reference typed by its old
11
+ * value. Lowering bridges a narrowed union read with an UNCHECKED payload
12
+ * extraction and folds `?.`, truthiness and `typeof` by the narrowed type,
13
+ * so such a read would interpret the wrong arm. This analysis decides when
14
+ * the narrowing is provably current:
15
+ *
16
+ * - every property in the reference is construction-only (no store to its
17
+ * name anywhere in the program except `this.name = ...` directly in a
18
+ * constructor body, no accessor of that name, no reflective or computed
19
+ * store into class instances) and the root binding is never assigned
20
+ * from another function; or
21
+ * - nothing between the earliest occurrence of the same reference in the
22
+ * use's function and the use can run other code or store the property
23
+ * through another reference: no call or construction (except standard
24
+ * library operations that cannot call back), tagged template, `await`,
25
+ * `yield`, user accessor, user iteration or user conversion hook, and no
26
+ * store to a property of the same name through a different reference.
27
+ * A loop around the use that starts inside that span contributes its
28
+ * whole body, since its back edge reaches the use again.
29
+ *
30
+ * TypeScript never carries a property narrowing into a nested function,
31
+ * and every narrowing (an assignment, test, predicate or assertion of the
32
+ * reference) is an occurrence of the reference, so a narrowed use always
33
+ * has one earlier in its own function. Spurious occurrences only move the
34
+ * span start earlier, which keeps the answer conservative. */
35
+ export declare class NarrowingStability {
36
+ private readonly lowerer;
37
+ private files;
38
+ private programFacts;
39
+ private readonly facts;
40
+ private readonly verdicts;
41
+ private readonly effects;
42
+ private readonly capturedMutable;
43
+ private readonly identifierWrites;
44
+ private readonly widened;
45
+ private readonly plainContainers;
46
+ constructor(lowerer: Lowerer);
47
+ setFiles(files: readonly ts.SourceFile[]): void;
48
+ /** The declared type a narrowed read in an absence or type test (or in a
49
+ * slot that accepts that declared type) must observe instead of the
50
+ * checker's stale narrowing, or null to keep the checker's type. */
51
+ widenedType(node: ts.Node): ts.Type | null;
52
+ /** The checker narrows this reference below its declared type, and the
53
+ * narrowing may be stale at runtime: its read must check the stored
54
+ * value instead of trusting the narrowed type. */
55
+ untrusted(node: ts.Node, narrowed: IrType): boolean;
56
+ private bindingOf;
57
+ private computeWidened;
58
+ /** A read in a call or construction argument (directly or inside a literal
59
+ * argument) reaches the callee's own lowering with the declared type. User
60
+ * callees coerce any value of their parameter type, and so do the
61
+ * standard library's generic slots: a parameter typed by a type parameter
62
+ * (`push(...items: T[])`, `Map.set(key: K, value: V)`) and the console
63
+ * methods, which format any value. Other standard-library lowerings are
64
+ * specialized to the argument types programs pass and can refuse the
65
+ * declared union (`JSON.stringify` of a possibly-undefined value,
66
+ * `clearInterval` of a nullable handle). Those arguments keep the checker's
67
+ * narrowing, and maybeNarrow reads them through the checked extraction. */
68
+ private argumentSlotIsGeneric;
69
+ private mentionsTypeParameter;
70
+ /** The type of the accessed property as declared on the receiver's
71
+ * (instantiated) type, before any flow narrowing of this reference. */
72
+ private declaredPropertyType;
73
+ private trusted;
74
+ private computeTrusted;
75
+ /** The root binding can change between the narrowing and the use, or
76
+ * names a namespace whose exported bindings are assigned as variables
77
+ * (invisible to the member-store census). */
78
+ private rootCapturedMutable;
79
+ /** No intervening code between the reference's earliest occurrence in
80
+ * the use's function and the use can change it. */
81
+ private currentSinceNarrowing;
82
+ private isPlainContainerWrite;
83
+ private constructionOnly;
84
+ /** A `let`/`var`/parameter binding assigned from a function other than
85
+ * the one that declares it: any call may change it. */
86
+ private isCapturedMutable;
87
+ private writesIn;
88
+ private program;
89
+ private functionFacts;
90
+ /** Whether evaluating this candidate can run code other than standard
91
+ * library operations that cannot call back into the program. */
92
+ private isEffect;
93
+ private computeEffect;
94
+ private isInertLibraryCall;
95
+ private isInertConstruction;
96
+ /** No argument is a function the callee could invoke. */
97
+ private inertArguments;
98
+ private isPrimitive;
99
+ private isBuiltinIterable;
100
+ }