@scriptc/compiler 0.0.0 → 0.0.1

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 (206) hide show
  1. package/LICENSE +202 -0
  2. package/ambient/package.json +3 -0
  3. package/ambient/scriptc-node-fallback.d.ts +3001 -0
  4. package/ambient/scriptc-overrides.d.ts +95 -0
  5. package/ambient/scriptc.d.ts +74 -0
  6. package/dist/backend/cc.d.ts +169 -0
  7. package/dist/backend/cc.js +897 -0
  8. package/dist/backend/cc.js.map +1 -0
  9. package/dist/backend/emission/emit-async.d.ts +145 -0
  10. package/dist/backend/emission/emit-async.js +996 -0
  11. package/dist/backend/emission/emit-async.js.map +1 -0
  12. package/dist/backend/emission/emit-exprs.d.ts +3 -0
  13. package/dist/backend/emission/emit-exprs.js +5947 -0
  14. package/dist/backend/emission/emit-exprs.js.map +1 -0
  15. package/dist/backend/emission/emit-island.d.ts +45 -0
  16. package/dist/backend/emission/emit-island.js +271 -0
  17. package/dist/backend/emission/emit-island.js.map +1 -0
  18. package/dist/backend/emission/emit-shapes.d.ts +142 -0
  19. package/dist/backend/emission/emit-shapes.js +575 -0
  20. package/dist/backend/emission/emit-shapes.js.map +1 -0
  21. package/dist/backend/emission/emit-stmts.d.ts +78 -0
  22. package/dist/backend/emission/emit-stmts.js +960 -0
  23. package/dist/backend/emission/emit-stmts.js.map +1 -0
  24. package/dist/backend/emission/emit-types.d.ts +65 -0
  25. package/dist/backend/emission/emit-types.js +652 -0
  26. package/dist/backend/emission/emit-types.js.map +1 -0
  27. package/dist/backend/emission/emit-walkers.d.ts +154 -0
  28. package/dist/backend/emission/emit-walkers.js +1587 -0
  29. package/dist/backend/emission/emit-walkers.js.map +1 -0
  30. package/dist/backend/emission/emitter.d.ts +452 -0
  31. package/dist/backend/emission/emitter.js +1249 -0
  32. package/dist/backend/emission/emitter.js.map +1 -0
  33. package/dist/backend/emission/may-throw.d.ts +15 -0
  34. package/dist/backend/emission/may-throw.js +250 -0
  35. package/dist/backend/emission/may-throw.js.map +1 -0
  36. package/dist/backend/llvm/blocks.d.ts +21 -0
  37. package/dist/backend/llvm/blocks.js +68 -0
  38. package/dist/backend/llvm/blocks.js.map +1 -0
  39. package/dist/backend/llvm/classes.d.ts +84 -0
  40. package/dist/backend/llvm/classes.js +438 -0
  41. package/dist/backend/llvm/classes.js.map +1 -0
  42. package/dist/backend/llvm/dyn.d.ts +123 -0
  43. package/dist/backend/llvm/dyn.js +2624 -0
  44. package/dist/backend/llvm/dyn.js.map +1 -0
  45. package/dist/backend/llvm/emitter.d.ts +3 -0
  46. package/dist/backend/llvm/emitter.js +10087 -0
  47. package/dist/backend/llvm/emitter.js.map +1 -0
  48. package/dist/backend/llvm/shapes.d.ts +78 -0
  49. package/dist/backend/llvm/shapes.js +754 -0
  50. package/dist/backend/llvm/shapes.js.map +1 -0
  51. package/dist/backend/llvm/unsupported.d.ts +6 -0
  52. package/dist/backend/llvm/unsupported.js +12 -0
  53. package/dist/backend/llvm/unsupported.js.map +1 -0
  54. package/dist/backend/llvm/walkers.d.ts +58 -0
  55. package/dist/backend/llvm/walkers.js +793 -0
  56. package/dist/backend/llvm/walkers.js.map +1 -0
  57. package/dist/backend/mangle.d.ts +124 -0
  58. package/dist/backend/mangle.js +232 -0
  59. package/dist/backend/mangle.js.map +1 -0
  60. package/dist/coverage/report.d.ts +64 -0
  61. package/dist/coverage/report.js +226 -0
  62. package/dist/coverage/report.js.map +1 -0
  63. package/dist/diagnostics/diagnostic.d.ts +140 -0
  64. package/dist/diagnostics/diagnostic.js +458 -0
  65. package/dist/diagnostics/diagnostic.js.map +1 -0
  66. package/dist/diagnostics/render.d.ts +11 -0
  67. package/dist/diagnostics/render.js +58 -0
  68. package/dist/diagnostics/render.js.map +1 -0
  69. package/dist/frontend/cjs-lexer.d.ts +20 -0
  70. package/dist/frontend/cjs-lexer.js +813 -0
  71. package/dist/frontend/cjs-lexer.js.map +1 -0
  72. package/dist/frontend/lowering/http2-constants.d.ts +1 -0
  73. package/dist/frontend/lowering/http2-constants.js +251 -0
  74. package/dist/frontend/lowering/http2-constants.js.map +1 -0
  75. package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
  76. package/dist/frontend/lowering/lib-boundary.js +143 -0
  77. package/dist/frontend/lowering/lib-boundary.js.map +1 -0
  78. package/dist/frontend/lowering/lower-assert.d.ts +18 -0
  79. package/dist/frontend/lowering/lower-assert.js +1269 -0
  80. package/dist/frontend/lowering/lower-assert.js.map +1 -0
  81. package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
  82. package/dist/frontend/lowering/lower-builtins.js +5249 -0
  83. package/dist/frontend/lowering/lower-builtins.js.map +1 -0
  84. package/dist/frontend/lowering/lower-calls.d.ts +581 -0
  85. package/dist/frontend/lowering/lower-calls.js +6281 -0
  86. package/dist/frontend/lowering/lower-calls.js.map +1 -0
  87. package/dist/frontend/lowering/lower-classes.d.ts +727 -0
  88. package/dist/frontend/lowering/lower-classes.js +4701 -0
  89. package/dist/frontend/lowering/lower-classes.js.map +1 -0
  90. package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
  91. package/dist/frontend/lowering/lower-comptime.js +244 -0
  92. package/dist/frontend/lowering/lower-comptime.js.map +1 -0
  93. package/dist/frontend/lowering/lower-containers.d.ts +483 -0
  94. package/dist/frontend/lowering/lower-containers.js +6281 -0
  95. package/dist/frontend/lowering/lower-containers.js.map +1 -0
  96. package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
  97. package/dist/frontend/lowering/lower-dgram.js +319 -0
  98. package/dist/frontend/lowering/lower-dgram.js.map +1 -0
  99. package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
  100. package/dist/frontend/lowering/lower-emitter.js +688 -0
  101. package/dist/frontend/lowering/lower-emitter.js.map +1 -0
  102. package/dist/frontend/lowering/lower-enums.d.ts +22 -0
  103. package/dist/frontend/lowering/lower-enums.js +235 -0
  104. package/dist/frontend/lowering/lower-enums.js.map +1 -0
  105. package/dist/frontend/lowering/lower-expando.d.ts +35 -0
  106. package/dist/frontend/lowering/lower-expando.js +276 -0
  107. package/dist/frontend/lowering/lower-expando.js.map +1 -0
  108. package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
  109. package/dist/frontend/lowering/lower-exprs.js +8099 -0
  110. package/dist/frontend/lowering/lower-exprs.js.map +1 -0
  111. package/dist/frontend/lowering/lower-generators.d.ts +50 -0
  112. package/dist/frontend/lowering/lower-generators.js +421 -0
  113. package/dist/frontend/lowering/lower-generators.js.map +1 -0
  114. package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
  115. package/dist/frontend/lowering/lower-inspect.js +1069 -0
  116. package/dist/frontend/lowering/lower-inspect.js.map +1 -0
  117. package/dist/frontend/lowering/lower-island.d.ts +108 -0
  118. package/dist/frontend/lowering/lower-island.js +650 -0
  119. package/dist/frontend/lowering/lower-island.js.map +1 -0
  120. package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
  121. package/dist/frontend/lowering/lower-mixins.js +534 -0
  122. package/dist/frontend/lowering/lower-mixins.js.map +1 -0
  123. package/dist/frontend/lowering/lower-modules.d.ts +135 -0
  124. package/dist/frontend/lowering/lower-modules.js +1613 -0
  125. package/dist/frontend/lowering/lower-modules.js.map +1 -0
  126. package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
  127. package/dist/frontend/lowering/lower-namespaces.js +706 -0
  128. package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
  129. package/dist/frontend/lowering/lower-server.d.ts +90 -0
  130. package/dist/frontend/lowering/lower-server.js +3471 -0
  131. package/dist/frontend/lowering/lower-server.js.map +1 -0
  132. package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
  133. package/dist/frontend/lowering/lower-stmts.js +5341 -0
  134. package/dist/frontend/lowering/lower-stmts.js.map +1 -0
  135. package/dist/frontend/lowering/lower-stream.d.ts +88 -0
  136. package/dist/frontend/lowering/lower-stream.js +1533 -0
  137. package/dist/frontend/lowering/lower-stream.js.map +1 -0
  138. package/dist/frontend/lowering/lower-test.d.ts +27 -0
  139. package/dist/frontend/lowering/lower-test.js +353 -0
  140. package/dist/frontend/lowering/lower-test.js.map +1 -0
  141. package/dist/frontend/lowering/lowerer.d.ts +1748 -0
  142. package/dist/frontend/lowering/lowerer.js +6256 -0
  143. package/dist/frontend/lowering/lowerer.js.map +1 -0
  144. package/dist/frontend/lowering/surfaces.d.ts +272 -0
  145. package/dist/frontend/lowering/surfaces.js +1096 -0
  146. package/dist/frontend/lowering/surfaces.js.map +1 -0
  147. package/dist/frontend/npm-static.d.ts +55 -0
  148. package/dist/frontend/npm-static.js +300 -0
  149. package/dist/frontend/npm-static.js.map +1 -0
  150. package/dist/frontend/npm.d.ts +330 -0
  151. package/dist/frontend/npm.js +1259 -0
  152. package/dist/frontend/npm.js.map +1 -0
  153. package/dist/frontend/program.d.ts +186 -0
  154. package/dist/frontend/program.js +2172 -0
  155. package/dist/frontend/program.js.map +1 -0
  156. package/dist/frontend/provenance-registry.d.ts +48 -0
  157. package/dist/frontend/provenance-registry.js +87 -0
  158. package/dist/frontend/provenance-registry.js.map +1 -0
  159. package/dist/frontend/provenance.d.ts +6 -0
  160. package/dist/frontend/provenance.js +459 -0
  161. package/dist/frontend/provenance.js.map +1 -0
  162. package/dist/frontend/resolve.d.ts +56 -0
  163. package/dist/frontend/resolve.js +682 -0
  164. package/dist/frontend/resolve.js.map +1 -0
  165. package/dist/frontend/shared.d.ts +60 -0
  166. package/dist/frontend/shared.js +232 -0
  167. package/dist/frontend/shared.js.map +1 -0
  168. package/dist/frontend/ts7/adapter.d.ts +7 -0
  169. package/dist/frontend/ts7/adapter.js +54 -0
  170. package/dist/frontend/ts7/adapter.js.map +1 -0
  171. package/dist/frontend/ts7/ast.d.ts +50 -0
  172. package/dist/frontend/ts7/ast.js +211 -0
  173. package/dist/frontend/ts7/ast.js.map +1 -0
  174. package/dist/frontend/ts7/census-check.d.ts +1 -0
  175. package/dist/frontend/ts7/census-check.js +12 -0
  176. package/dist/frontend/ts7/census-check.js.map +1 -0
  177. package/dist/frontend/ts7/checker.d.ts +140 -0
  178. package/dist/frontend/ts7/checker.js +544 -0
  179. package/dist/frontend/ts7/checker.js.map +1 -0
  180. package/dist/frontend/ts7/enums.d.ts +18 -0
  181. package/dist/frontend/ts7/enums.js +43 -0
  182. package/dist/frontend/ts7/enums.js.map +1 -0
  183. package/dist/frontend/ts7/program.d.ts +99 -0
  184. package/dist/frontend/ts7/program.js +278 -0
  185. package/dist/frontend/ts7/program.js.map +1 -0
  186. package/dist/frontend/ts7/world-check.d.ts +3 -0
  187. package/dist/frontend/ts7/world-check.js +34 -0
  188. package/dist/frontend/ts7/world-check.js.map +1 -0
  189. package/dist/frontend/types.d.ts +205 -0
  190. package/dist/frontend/types.js +2485 -0
  191. package/dist/frontend/types.js.map +1 -0
  192. package/dist/index.d.ts +85 -0
  193. package/dist/index.js +424 -0
  194. package/dist/index.js.map +1 -0
  195. package/dist/ir/nodes.d.ts +4334 -0
  196. package/dist/ir/nodes.js +1906 -0
  197. package/dist/ir/nodes.js.map +1 -0
  198. package/dist/ir/serialize.d.ts +4 -0
  199. package/dist/ir/serialize.js +34 -0
  200. package/dist/ir/serialize.js.map +1 -0
  201. package/dist/ir/validate.d.ts +36 -0
  202. package/dist/ir/validate.js +4884 -0
  203. package/dist/ir/validate.js.map +1 -0
  204. package/package.json +30 -6
  205. package/README.md +0 -3
  206. package/index.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower-emitter.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ import { IrExpr } from "../../ir/nodes.js";
4
+ /** The access-site chokepoint, tried FIRST by both the property- and
5
+ * element-access lowerings: claims enum member reads (fold to the constant)
6
+ * and enum reverse-mapping reads. Null when the access is not enum-shaped
7
+ * at all — the caller's ordinary paths apply. */
8
+ export declare function lowerEnumAccess(L: Lowerer, expr: ts.PropertyAccessExpression | ts.ElementAccessExpression): IrExpr | null;
9
+ /** The declaration statement. Ambient declarations emit nothing (Node's
10
+ * type stripping drops them too). Runtime declarations whose members are
11
+ * ALL compile-time constants also emit nothing: constant initializers have
12
+ * no observable evaluation, member reads fold at their sites, and the
13
+ * object's creation is only observable through object-valued uses — which
14
+ * fence per site. A computed member's initializer is a runtime expression
15
+ * Node evaluates at the declaration — dropping it would be observable, so
16
+ * the declaration fences on that member. */
17
+ export declare function lowerEnumDeclaration(L: Lowerer, stmt: ts.EnumDeclaration): null;
18
+ /** The identifier chokepoint's enum arm: the enum OBJECT used as a VALUE
19
+ * (passed around, iterated, stored). Member reads never reach here (the
20
+ * access hook claims them); everything else is the object itself, which
21
+ * has no lowering. Returns false when the symbol is not an enum. */
22
+ export declare function fenceEnumObjectValue(L: Lowerer, expr: ts.Identifier, sym: ts.Symbol): void;
@@ -0,0 +1,235 @@
1
+ /* Enum lowering: TypeScript enums fold to their COMPILE-TIME CONSTANT
2
+ * member values — exactly the numbers/strings tsc's own emit stores on the
3
+ * enum object (and inlines for const enums), so every member read is a
4
+ * literal and no runtime object ever materializes. What lowers:
5
+ * - `E.A` / `E["A"]` member reads (auto-incremented, explicit, and
6
+ * const-foldable initializers per tsc's own constant computation —
7
+ * the checker's getConstantValue is the single source of truth);
8
+ * - `E[0]` REVERSE-mapping reads with a compile-time-constant index:
9
+ * numeric enums get reverse entries member-by-member in declaration
10
+ * order (later duplicates overwrite — JS assignment order), string
11
+ * members never do, and tsc types the read `string` — an index no
12
+ * member carries is Node's `undefined`, which that type cannot carry,
13
+ * so it fences instead of lying;
14
+ * - the DECLARATION itself, to nothing — constant initializers have no
15
+ * observable evaluation, and the object's creation is unobservable
16
+ * unless the object is USED as a value, which fences per use site
17
+ * (lower-exprs' identifier chokepoint);
18
+ * - ambient (`declare`) enums, const included: Node's transform emits
19
+ * nothing for the declaration (and does NOT inline ambient const
20
+ * members the way tsc's emit would — Node is the oracle, measured),
21
+ * so nothing defines the OBJECT — member reads compile to the
22
+ * catchable ReferenceError "<E> is not defined" at the access, the
23
+ * `declare const __VERSION__` stance exactly.
24
+ * What fences: computed members (their initializers are runtime
25
+ * expressions Node evaluates when the declaration executes), reverse
26
+ * lookups through runtime indices, and the enum object as a value.
27
+ * The TYPE side lives in types.ts (enum types map to their underlying
28
+ * primitives) — see mapType's EnumLike branch. */
29
+ import * as ts from "../ts7/adapter.js";
30
+ import { locOf } from "../program.js";
31
+ import { F64, STRING } from "../../ir/nodes.js";
32
+ /** The member's source-name text (identifiers and string-literal names —
33
+ * the only name forms tsc allows on enum members). */
34
+ function memberNameText(member) {
35
+ const n = member.name;
36
+ return ts.isIdentifier(n) || ts.isStringLiteralLike(n) ? n.text : n.getText();
37
+ }
38
+ /** Ambient: a `declare`d declaration, or one living in a .d.ts. */
39
+ function isAmbientEnumDecl(decl) {
40
+ return ((ts.getCombinedModifierFlags(decl) & ts.ModifierFlags.Ambient) !== 0 ||
41
+ decl.getSourceFile().isDeclarationFile);
42
+ }
43
+ /** True for receivers whose evaluation is effect-free — a bare identifier
44
+ * or a dotted identifier chain. Folding a member read DROPS the receiver
45
+ * expression, which is only sound when evaluating it could not have been
46
+ * observed. (Any other receiver shape falls through to the ordinary
47
+ * property paths and their fences.) */
48
+ function effectFreeReceiver(e) {
49
+ let cur = e;
50
+ while (ts.isParenthesizedExpression(cur) ||
51
+ (ts.isPropertyAccessExpression(cur) && !cur.questionDotToken)) {
52
+ cur = cur.expression;
53
+ }
54
+ return ts.isIdentifier(cur);
55
+ }
56
+ /** The access-site chokepoint, tried FIRST by both the property- and
57
+ * element-access lowerings: claims enum member reads (fold to the constant)
58
+ * and enum reverse-mapping reads. Null when the access is not enum-shaped
59
+ * at all — the caller's ordinary paths apply. */
60
+ export function lowerEnumAccess(L, expr) {
61
+ if (ts.isPropertyAccessExpression(expr)) {
62
+ const sym = L.checker.getSymbolAtLocation(expr.name);
63
+ if (sym && sym.flags & ts.SymbolFlags.EnumMember) {
64
+ const decl = L.checker.valueDeclarationOf(sym);
65
+ if (decl && ts.isEnumMember(decl) && effectFreeReceiver(expr.expression)) {
66
+ return lowerEnumMemberRead(L, expr, decl);
67
+ }
68
+ }
69
+ return null;
70
+ }
71
+ // Element access: tsgo answers no symbol at the access node itself, so
72
+ // both key forms resolve through the RECEIVER's enum symbol.
73
+ const recv = expr.expression;
74
+ if (!ts.isIdentifier(recv))
75
+ return null;
76
+ const recvSym = L.resolveValueSymbol(recv);
77
+ if (!recvSym || !(recvSym.flags & ts.SymbolFlags.Enum))
78
+ return null;
79
+ const decls = L.checker.declarationsOf(recvSym).filter((d) => ts.isEnumDeclaration(d));
80
+ if (decls.length === 0)
81
+ return null;
82
+ let key = expr.argumentExpression;
83
+ while (ts.isParenthesizedExpression(key))
84
+ key = key.expression;
85
+ // `E["A"]` — the FORWARD member read in element clothing: find the named
86
+ // member (merged declarations scan in declaration order).
87
+ if (ts.isStringLiteralLike(key)) {
88
+ for (const d of decls) {
89
+ for (const member of d.members) {
90
+ if (memberNameText(member) === key.text)
91
+ return lowerEnumMemberRead(L, expr, member);
92
+ }
93
+ }
94
+ // tsc resolved the name (or rejected the program); nothing to claim.
95
+ return null;
96
+ }
97
+ return lowerEnumReverseRead(L, expr, recvSym, decls, key);
98
+ }
99
+ /** One member read, folded to its constant — or the ambient/computed
100
+ * stories (see the module comment). `expr` is the access carrying the
101
+ * source span; `member` the resolved member declaration. */
102
+ function lowerEnumMemberRead(L, expr, member) {
103
+ const enumDecl = member.parent;
104
+ if (!ts.isEnumDeclaration(enumDecl))
105
+ return null;
106
+ const loc = locOf(expr);
107
+ if (isAmbientEnumDecl(enumDecl)) {
108
+ // An ambient enum's OBJECT is never defined — Node's transform emits
109
+ // nothing for `declare enum` AND `declare const enum` alike (it does
110
+ // NOT inline ambient const members the way tsc's emit would; Node is
111
+ // the oracle, measured). Two worlds where the object IS defined stand
112
+ // aside: stdlib/@types/node declarations describe real runtime values
113
+ // (the SC2020-family member fences own those), and npm-declared enums
114
+ // under --dynamic live in the embedded engine (the island paths own
115
+ // them). What remains is the user's own `declare enum` — the
116
+ // `declare const __VERSION__` stance: ReferenceError at the access.
117
+ const sf = enumDecl.getSourceFile();
118
+ if (L.isStdlibFile(sf) || (L.dynamic && L.isNpmFile(sf)))
119
+ return null;
120
+ const declared = L.mapTypeOf(L.typeOf(expr));
121
+ if (!declared || declared.kind === "void")
122
+ return null;
123
+ return {
124
+ kind: "libCall",
125
+ fn: "global.undefRead",
126
+ args: [{ kind: "strLit", value: enumDecl.name.text, type: STRING, loc }],
127
+ type: declared,
128
+ loc,
129
+ };
130
+ }
131
+ const value = L.checker.getConstantValue(member);
132
+ if (value === undefined || (typeof value === "number" && Number.isNaN(value))) {
133
+ L.unsupported("SC1090", expr, `the enum member '${enumDecl.name.text}.${memberNameText(member)}' (its value is not a compile-time constant — the initializer runs when the declaration executes)`);
134
+ }
135
+ return typeof value === "string"
136
+ ? { kind: "strLit", value, type: STRING, loc }
137
+ : { kind: "numLit", value, type: F64, loc };
138
+ }
139
+ /** `E[<number>]` — the reverse mapping. Numeric members write reverse
140
+ * entries in declaration order (merged declarations included), so the LAST
141
+ * member carrying the index's value answers, exactly the object JS builds.
142
+ * Only compile-time-constant indices lower; a matchless constant index is
143
+ * Node's undefined, which the read's `string` type cannot carry — both
144
+ * fence by name. */
145
+ function lowerEnumReverseRead(L, expr, recvSym, decls, key) {
146
+ const loc = locOf(expr);
147
+ const enumName = recvSym.name;
148
+ // Ambient: no object exists — the member-read stance.
149
+ if (decls.every((d) => isAmbientEnumDecl(d))) {
150
+ if (decls.some((d) => L.isStdlibFile(d.getSourceFile()) || (L.dynamic && L.isNpmFile(d.getSourceFile())))) {
151
+ return null;
152
+ }
153
+ return {
154
+ kind: "libCall",
155
+ fn: "global.undefRead",
156
+ args: [{ kind: "strLit", value: enumName, type: STRING, loc }],
157
+ type: STRING,
158
+ loc,
159
+ };
160
+ }
161
+ // A mix of ambient and runtime declarations would need per-member
162
+ // existence tracking; nothing needs it — fence through the generic path.
163
+ if (decls.some((d) => isAmbientEnumDecl(d)))
164
+ return null;
165
+ const idx = foldConstIndex(L, key);
166
+ if (idx === null) {
167
+ L.unsupported("SC1090", expr, `enum reverse lookups ('${enumName}[i]' where the index is a runtime value — only compile-time-constant indices lower)`);
168
+ }
169
+ let name = null;
170
+ for (const d of decls) {
171
+ for (const member of d.members) {
172
+ const v = L.checker.getConstantValue(member);
173
+ if (typeof v === "number" && v === idx)
174
+ name = memberNameText(member);
175
+ }
176
+ }
177
+ if (name === null) {
178
+ L.unsupported("SC1090", expr, `'${enumName}[${idx}]' (no member of '${enumName}' has this value — Node answers undefined, which the reverse mapping's 'string' type cannot carry)`);
179
+ }
180
+ return { kind: "strLit", value: name, type: STRING, loc };
181
+ }
182
+ /** A compile-time-constant NUMERIC index: a numeric literal, its negation,
183
+ * or an enum member read whose constant is a number. */
184
+ function foldConstIndex(L, e) {
185
+ let x = e;
186
+ while (ts.isParenthesizedExpression(x))
187
+ x = x.expression;
188
+ if (ts.isNumericLiteral(x))
189
+ return Number(x.text);
190
+ if (ts.isPrefixUnaryExpression(x) &&
191
+ x.operator === ts.SyntaxKind.MinusToken &&
192
+ ts.isNumericLiteral(x.operand)) {
193
+ return -Number(x.operand.text);
194
+ }
195
+ if (ts.isPropertyAccessExpression(x)) {
196
+ const sym = L.checker.getSymbolAtLocation(x.name);
197
+ if (sym && sym.flags & ts.SymbolFlags.EnumMember) {
198
+ const decl = L.checker.valueDeclarationOf(sym);
199
+ if (decl && ts.isEnumMember(decl)) {
200
+ const v = L.checker.getConstantValue(decl);
201
+ if (typeof v === "number")
202
+ return v;
203
+ }
204
+ }
205
+ }
206
+ return null;
207
+ }
208
+ /** The declaration statement. Ambient declarations emit nothing (Node's
209
+ * type stripping drops them too). Runtime declarations whose members are
210
+ * ALL compile-time constants also emit nothing: constant initializers have
211
+ * no observable evaluation, member reads fold at their sites, and the
212
+ * object's creation is only observable through object-valued uses — which
213
+ * fence per site. A computed member's initializer is a runtime expression
214
+ * Node evaluates at the declaration — dropping it would be observable, so
215
+ * the declaration fences on that member. */
216
+ export function lowerEnumDeclaration(L, stmt) {
217
+ if (isAmbientEnumDecl(stmt))
218
+ return null;
219
+ for (const member of stmt.members) {
220
+ if (L.checker.getConstantValue(member) === undefined) {
221
+ L.unsupported("SC1090", member, `enums with computed members ('${memberNameText(member)}' — the initializer is a runtime expression evaluated when the declaration executes; only compile-time-constant enum members lower)`);
222
+ }
223
+ }
224
+ return null;
225
+ }
226
+ /** The identifier chokepoint's enum arm: the enum OBJECT used as a VALUE
227
+ * (passed around, iterated, stored). Member reads never reach here (the
228
+ * access hook claims them); everything else is the object itself, which
229
+ * has no lowering. Returns false when the symbol is not an enum. */
230
+ export function fenceEnumObjectValue(L, expr, sym) {
231
+ if (!(sym.flags & ts.SymbolFlags.Enum))
232
+ return;
233
+ L.unsupported("SC1090", expr, `enum objects as values ('${expr.text}' — member reads like '${expr.text}.A' compile to constants; the object itself has no runtime representation)`);
234
+ }
235
+ //# sourceMappingURL=lower-enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower-enums.js","sourceRoot":"","sources":["../../../src/frontend/lowering/lower-enums.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import * as ts from "../ts7/adapter.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ import { IrExpr, IrGlobal, IrStmt, IrType } from "../../ir/nodes.js";
4
+ /** The registry entry for one expando member slot. */
5
+ export interface ExpandoMember {
6
+ global: IrGlobal;
7
+ /** Source start of the FIRST assignment in the declaring file — the
8
+ * init-position read guard's boundary. */
9
+ firstWriteStart: number;
10
+ /** The declaring file (guards apply to same-file init reads only —
11
+ * importers evaluate after the exporter's init, the module-globals
12
+ * stance). */
13
+ file: ts.SourceFile;
14
+ }
15
+ /** Collection: walk one file for expando member assignments and register
16
+ * a module global per (function symbol × member key). Runs with
17
+ * collectGlobals — before any statement lowers — so reads inside earlier
18
+ * function bodies resolve. Registration failures (unmappable member
19
+ * types) register nothing: the write statement's own lowering fences. */
20
+ export declare function collectExpandoMembers(L: Lowerer, sf: ts.SourceFile): void;
21
+ /** Assignment-target resolution for expando member writes: the member's
22
+ * module global. Fences read-only function members by name. Null when
23
+ * the access is not an expando member at all. */
24
+ export declare function expandoWritableTarget(L: Lowerer, access: ts.PropertyAccessExpression | ts.ElementAccessExpression): {
25
+ id: string;
26
+ type: IrType;
27
+ } | null;
28
+ /** Read resolution for expando member accesses: a varRef of the member's
29
+ * global, guarded against init-position reads above the first write
30
+ * (Node answers undefined there — the global would answer a later
31
+ * write's value). Null when not an expando member read. */
32
+ export declare function expandoMemberRead(L: Lowerer, access: ts.PropertyAccessExpression | ts.ElementAccessExpression): IrExpr | null;
33
+ /** The statement lowering for `<fn>.<key> = <value>`: an ordinary global
34
+ * assign with the usual RHS coercion. Null when not an expando write. */
35
+ export declare function lowerExpandoAssignStmt(L: Lowerer, expr: ts.BinaryExpression): IrStmt | null;
@@ -0,0 +1,276 @@
1
+ /* Expando function members (`function foo() {}; foo.bar = 12` — the
2
+ * namespace-object idiom tsc binds as members ON the function's own
3
+ * symbol/type) and property members of module-level CALLABLE consts
4
+ * (`const c: Combo = () => 1; c.p = {}` — an interface member written
5
+ * through the const's name).
6
+ *
7
+ * The lowering: each written member is a MODULE GLOBAL keyed by
8
+ * (function symbol × member key), registered during collection by
9
+ * scanning the file for member-assignment statements whose receiver is a
10
+ * direct reference to a module-level function declaration or a
11
+ * function-valued const. Reads and writes through the function's NAME
12
+ * route to that global — the checker's declared member type is the
13
+ * slot's type, and JS object identity holds because only references that
14
+ * RESOLVE to the declaring symbol route this way (a structurally-typed
15
+ * alias keeps its fences: a different function value could satisfy the
16
+ * same type, so symbol identity, not type identity, is the routing key).
17
+ *
18
+ * Honesty guards, mirroring the namespace-member stance:
19
+ * - reads in INIT-EXECUTING position textually above the member's FIRST
20
+ * assignment fence (JS would answer undefined; the global would answer
21
+ * a later write's value);
22
+ * - writes to the READ-ONLY function members (`length`, `name`,
23
+ * `caller`, `arguments`) fence: strict-mode JS (every module) throws
24
+ * TypeError there, and a global slot would silently succeed. WRITABLE
25
+ * Function.prototype members (`apply`, `call`, `bind`, `toString`)
26
+ * shadow through an own property in JS and lower like any other member
27
+ * — reads route to the registry, so the shadowed value is what reads
28
+ * and calls observe;
29
+ * - member keys are spelled names, folded computed keys
30
+ * (foldedStringKeyOf's contract), or statically-resolvable
31
+ * unique-symbol consts (uniqueSymbolKeyOf — the class symbol-field
32
+ * precedent); runtime-valued keys keep their fences. */
33
+ import * as ts from "../ts7/adapter.js";
34
+ import { isJsSourceFile, locOf } from "../program.js";
35
+ import { isUnitOnlyTsType, unitOnlyUnion } from "../types.js";
36
+ /** Function members JS refuses to assign in strict mode (every module is
37
+ * strict): non-writable own properties of functions plus the poisoned
38
+ * caller/arguments pair. A global slot would silently succeed where Node
39
+ * throws TypeError, so writes fence by name. */
40
+ const READONLY_FN_MEMBERS = new Set(["length", "name", "caller", "arguments", "prototype"]);
41
+ /** The member key of an assignment target / read site: a spelled or
42
+ * folded string name, a unique-symbol const's ts.Symbol, or null (not a
43
+ * routable key). */
44
+ function memberKeyOf(L, expr) {
45
+ if (ts.isPropertyAccessExpression(expr)) {
46
+ return ts.isIdentifier(expr.name) ? expr.name.text : null;
47
+ }
48
+ const sym = L.uniqueSymbolKeyOf(expr.argumentExpression);
49
+ if (sym)
50
+ return sym.sym;
51
+ return L.foldedStringKeyOf(expr.argumentExpression);
52
+ }
53
+ /** The module-level function-ish symbol a receiver expression resolves
54
+ * to, or null: a top-level FunctionDeclaration, or a top-level `const`
55
+ * variable whose checker type is callable (arrow/function-expression
56
+ * consts, interface-typed callable consts). Only direct identifier
57
+ * references qualify — routing is by symbol identity. */
58
+ function expandoFnSymbolOf(L, recv) {
59
+ if (!ts.isIdentifier(recv))
60
+ return null;
61
+ // Island and checked-dynamic receivers never qualify by construction:
62
+ // the declaration-shape checks below (a function DECLARATION, or a
63
+ // const whose initializer is a function/arrow LITERAL in a TS file)
64
+ // exclude import bindings, call results, and JS-file values — their
65
+ // member stories (engine property writes, dyn keyed writes) stay put.
66
+ const sym = L.resolveValueSymbol(recv);
67
+ if (!sym)
68
+ return null;
69
+ const decl = L.checker.valueDeclarationOf(sym);
70
+ if (!decl || decl.getSourceFile().isDeclarationFile)
71
+ return null;
72
+ if (isJsSourceFile(decl.getSourceFile()))
73
+ return null;
74
+ if (ts.isFunctionDeclaration(decl)) {
75
+ return ts.isSourceFile(decl.parent) ? sym : null;
76
+ }
77
+ if (ts.isVariableDeclaration(decl)) {
78
+ if (!ts.isVariableStatement(decl.parent.parent) || !ts.isSourceFile(decl.parent.parent.parent))
79
+ return null;
80
+ if ((ts.getCombinedNodeFlags(decl) & ts.NodeFlags.Const) === 0)
81
+ return null;
82
+ // The const's VALUE must be a function created here (arrow/function
83
+ // initializer) — a callable TYPE alone can be satisfied by island
84
+ // handles and other values whose members live elsewhere.
85
+ let init = decl.initializer;
86
+ while (init !== undefined && (ts.isParenthesizedExpression(init) || ts.isAsExpression(init) || ts.isTypeAssertion(init)))
87
+ init = init.expression;
88
+ if (init === undefined || (!ts.isArrowFunction(init) && !ts.isFunctionExpression(init)))
89
+ return null;
90
+ if (L.checker.getCallSignatures(L.checker.getTypeOfSymbol(sym)).length === 0)
91
+ return null;
92
+ return sym;
93
+ }
94
+ return null;
95
+ }
96
+ /** A member-assignment statement's pieces (`<fn>.<key> = <value>` /
97
+ * `<fn>[KEY] = <value>` under any assignment operator), or null. */
98
+ function expandoWriteOf(L, node) {
99
+ if (!ts.isBinaryExpression(node))
100
+ return null;
101
+ const op = node.operatorToken.kind;
102
+ if (op !== ts.SyntaxKind.EqualsToken && (op < ts.SyntaxKind.FirstCompoundAssignment || op > ts.SyntaxKind.LastCompoundAssignment)) {
103
+ return null;
104
+ }
105
+ const left = node.left;
106
+ if (!ts.isPropertyAccessExpression(left) && !ts.isElementAccessExpression(left))
107
+ return null;
108
+ if (ts.isPropertyAccessExpression(left) && left.questionDotToken)
109
+ return null;
110
+ const fnSym = expandoFnSymbolOf(L, left.expression);
111
+ if (!fnSym)
112
+ return null;
113
+ const key = memberKeyOf(L, left);
114
+ if (key === null)
115
+ return null;
116
+ return { fnSym, key, access: left };
117
+ }
118
+ /** Collection: walk one file for expando member assignments and register
119
+ * a module global per (function symbol × member key). Runs with
120
+ * collectGlobals — before any statement lowers — so reads inside earlier
121
+ * function bodies resolve. Registration failures (unmappable member
122
+ * types) register nothing: the write statement's own lowering fences. */
123
+ export function collectExpandoMembers(L, sf) {
124
+ const rawTag = L.fileTag.get(sf) ?? "";
125
+ const tag = rawTag === "" ? "e." : rawTag.replace(/^%/, "");
126
+ // Worklist walk, not recursion: pathologically deep expressions (the
127
+ // 7000-level nesting fixtures) must reach their own named fences, not
128
+ // blow the collection pass's stack.
129
+ const queue = [];
130
+ const process = (node) => {
131
+ const w = expandoWriteOf(L, node);
132
+ if (w) {
133
+ let members = L.expandoMembers.get(w.fnSym);
134
+ if (!members) {
135
+ members = new Map();
136
+ L.expandoMembers.set(w.fnSym, members);
137
+ }
138
+ const existing = members.get(w.key);
139
+ if (existing) {
140
+ existing.firstWriteStart = Math.min(existing.firstWriteStart, node.getStart());
141
+ }
142
+ else if (!(typeof w.key === "string" && READONLY_FN_MEMBERS.has(w.key)) && !nsOwnedMember(L, w.access)) {
143
+ // The member slot's type is the checker's DECLARED member type at
144
+ // the access (expando members widen across all assignments;
145
+ // interface members carry their declared type). Mapping failures
146
+ // register nothing and drop their collection-time diagnostics —
147
+ // the write statement's own lowering re-diagnoses in context.
148
+ const diagsBefore = L.diags.length;
149
+ const tsType = L.typeOf(w.access);
150
+ let type;
151
+ try {
152
+ type = L.mapTypeOf(tsType);
153
+ }
154
+ catch {
155
+ L.diags.splice(diagsBefore); // PoisonError — the statement re-diagnoses
156
+ type = null;
157
+ }
158
+ if (type?.kind === "void" && isUnitOnlyTsType(tsType))
159
+ type = unitOnlyUnion(L.unions);
160
+ if (type && type.kind !== "void") {
161
+ const fnName = w.fnSym.name;
162
+ const memberName = typeof w.key === "string" ? w.key : `sym%${w.key.name}%${L.checker.declarationsOf(w.key)[0]?.getStart() ?? 0}`;
163
+ const g = {
164
+ id: `%g.${tag}${fnName}%.${memberName}`,
165
+ name: `${fnName}.${memberName}`,
166
+ type,
167
+ mutable: true,
168
+ };
169
+ members.set(w.key, { global: g, firstWriteStart: node.getStart(), file: sf });
170
+ L.globalsList.push(g);
171
+ }
172
+ }
173
+ }
174
+ ts.forEachChild(node, (c) => {
175
+ queue.push(c);
176
+ });
177
+ };
178
+ ts.forEachChild(sf, (c) => {
179
+ queue.push(c);
180
+ });
181
+ while (queue.length > 0)
182
+ process(queue.pop());
183
+ }
184
+ /** A member the NAMESPACE machinery owns storage for: the member symbol
185
+ * declares as a variable inside a NON-AMBIENT namespace block (a real
186
+ * function+namespace merge — those members have namespace globals and
187
+ * nsWritableTarget routes them). Ambient (`declare namespace`) members
188
+ * have no storage anywhere and are exactly the declared-expando idiom
189
+ * this module lowers. */
190
+ function nsOwnedMember(L, access) {
191
+ const nameNode = ts.isPropertyAccessExpression(access) ? access.name : access.argumentExpression;
192
+ const sym = L.checker.getSymbolAtLocation(nameNode);
193
+ if (!sym)
194
+ return false;
195
+ for (const d of L.checker.declarationsOf(sym)) {
196
+ for (let p = d.parent; p !== undefined && !ts.isSourceFile(p); p = p.parent) {
197
+ if (ts.isModuleDeclaration(p)) {
198
+ return !(p.modifiers?.some((m) => m.kind === ts.SyntaxKind.DeclareKeyword) || p.getSourceFile().isDeclarationFile);
199
+ }
200
+ }
201
+ }
202
+ return false;
203
+ }
204
+ /** True when `node` executes during module INIT (top-level statement
205
+ * position, not inside any function-like body) — the read-guard test,
206
+ * mirroring the namespace stance. */
207
+ function initExecutingPosition(node) {
208
+ for (let p = node.parent; p !== undefined; p = p.parent) {
209
+ if (ts.isFunctionLike(p))
210
+ return false;
211
+ if (ts.isSourceFile(p))
212
+ break;
213
+ }
214
+ return true;
215
+ }
216
+ /** Assignment-target resolution for expando member writes: the member's
217
+ * module global. Fences read-only function members by name. Null when
218
+ * the access is not an expando member at all. */
219
+ export function expandoWritableTarget(L, access) {
220
+ if (ts.isPropertyAccessExpression(access) && access.questionDotToken)
221
+ return null;
222
+ const fnSym = expandoFnSymbolOf(L, access.expression);
223
+ if (!fnSym)
224
+ return null;
225
+ const key = memberKeyOf(L, access);
226
+ if (key === null)
227
+ return null;
228
+ if (typeof key === "string" && READONLY_FN_MEMBERS.has(key)) {
229
+ L.unsupported("SC1090", access, `assigning the read-only function member '${key}' (strict-mode JS — every module — throws TypeError here)`);
230
+ }
231
+ const member = L.expandoMembers.get(fnSym)?.get(key);
232
+ if (!member)
233
+ return null;
234
+ return { id: member.global.id, type: member.global.type };
235
+ }
236
+ /** Read resolution for expando member accesses: a varRef of the member's
237
+ * global, guarded against init-position reads above the first write
238
+ * (Node answers undefined there — the global would answer a later
239
+ * write's value). Null when not an expando member read. */
240
+ export function expandoMemberRead(L, access) {
241
+ if (ts.isPropertyAccessExpression(access) && access.questionDotToken)
242
+ return null;
243
+ if (ts.isElementAccessExpression(access) && access.questionDotToken)
244
+ return null;
245
+ const fnSym = expandoFnSymbolOf(L, access.expression);
246
+ if (!fnSym)
247
+ return null;
248
+ const key = memberKeyOf(L, access);
249
+ if (key === null)
250
+ return null;
251
+ const member = L.expandoMembers.get(fnSym)?.get(key);
252
+ if (!member)
253
+ return null;
254
+ if (access.getSourceFile() === member.file &&
255
+ initExecutingPosition(access) &&
256
+ access.getStart() < member.firstWriteStart) {
257
+ const name = typeof key === "string" ? key : key.name;
258
+ L.unsupported("SC1090", access, `reading the function member '${name}' above its first assignment (JS answers undefined there, which the member's type cannot hold — move the read below the assignment)`);
259
+ }
260
+ return { kind: "varRef", localId: member.global.id, type: member.global.type, loc: locOf(access) };
261
+ }
262
+ /** The statement lowering for `<fn>.<key> = <value>`: an ordinary global
263
+ * assign with the usual RHS coercion. Null when not an expando write. */
264
+ export function lowerExpandoAssignStmt(L, expr) {
265
+ if (expr.operatorToken.kind !== ts.SyntaxKind.EqualsToken)
266
+ return null;
267
+ const left = expr.left;
268
+ if (!ts.isPropertyAccessExpression(left) && !ts.isElementAccessExpression(left))
269
+ return null;
270
+ const target = expandoWritableTarget(L, left);
271
+ if (!target)
272
+ return null;
273
+ const value = L.lowerExprExpecting(expr.right, target.type);
274
+ return { kind: "assign", localId: target.id, value, loc: locOf(expr) };
275
+ }
276
+ //# sourceMappingURL=lower-expando.js.map