@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.
- package/LICENSE +202 -0
- package/ambient/package.json +3 -0
- package/ambient/scriptc-node-fallback.d.ts +3001 -0
- package/ambient/scriptc-overrides.d.ts +95 -0
- package/ambient/scriptc.d.ts +74 -0
- package/dist/backend/cc.d.ts +169 -0
- package/dist/backend/cc.js +897 -0
- package/dist/backend/cc.js.map +1 -0
- package/dist/backend/emission/emit-async.d.ts +145 -0
- package/dist/backend/emission/emit-async.js +996 -0
- package/dist/backend/emission/emit-async.js.map +1 -0
- package/dist/backend/emission/emit-exprs.d.ts +3 -0
- package/dist/backend/emission/emit-exprs.js +5947 -0
- package/dist/backend/emission/emit-exprs.js.map +1 -0
- package/dist/backend/emission/emit-island.d.ts +45 -0
- package/dist/backend/emission/emit-island.js +271 -0
- package/dist/backend/emission/emit-island.js.map +1 -0
- package/dist/backend/emission/emit-shapes.d.ts +142 -0
- package/dist/backend/emission/emit-shapes.js +575 -0
- package/dist/backend/emission/emit-shapes.js.map +1 -0
- package/dist/backend/emission/emit-stmts.d.ts +78 -0
- package/dist/backend/emission/emit-stmts.js +960 -0
- package/dist/backend/emission/emit-stmts.js.map +1 -0
- package/dist/backend/emission/emit-types.d.ts +65 -0
- package/dist/backend/emission/emit-types.js +652 -0
- package/dist/backend/emission/emit-types.js.map +1 -0
- package/dist/backend/emission/emit-walkers.d.ts +154 -0
- package/dist/backend/emission/emit-walkers.js +1587 -0
- package/dist/backend/emission/emit-walkers.js.map +1 -0
- package/dist/backend/emission/emitter.d.ts +452 -0
- package/dist/backend/emission/emitter.js +1249 -0
- package/dist/backend/emission/emitter.js.map +1 -0
- package/dist/backend/emission/may-throw.d.ts +15 -0
- package/dist/backend/emission/may-throw.js +250 -0
- package/dist/backend/emission/may-throw.js.map +1 -0
- package/dist/backend/llvm/blocks.d.ts +21 -0
- package/dist/backend/llvm/blocks.js +68 -0
- package/dist/backend/llvm/blocks.js.map +1 -0
- package/dist/backend/llvm/classes.d.ts +84 -0
- package/dist/backend/llvm/classes.js +438 -0
- package/dist/backend/llvm/classes.js.map +1 -0
- package/dist/backend/llvm/dyn.d.ts +123 -0
- package/dist/backend/llvm/dyn.js +2624 -0
- package/dist/backend/llvm/dyn.js.map +1 -0
- package/dist/backend/llvm/emitter.d.ts +3 -0
- package/dist/backend/llvm/emitter.js +10087 -0
- package/dist/backend/llvm/emitter.js.map +1 -0
- package/dist/backend/llvm/shapes.d.ts +78 -0
- package/dist/backend/llvm/shapes.js +754 -0
- package/dist/backend/llvm/shapes.js.map +1 -0
- package/dist/backend/llvm/unsupported.d.ts +6 -0
- package/dist/backend/llvm/unsupported.js +12 -0
- package/dist/backend/llvm/unsupported.js.map +1 -0
- package/dist/backend/llvm/walkers.d.ts +58 -0
- package/dist/backend/llvm/walkers.js +793 -0
- package/dist/backend/llvm/walkers.js.map +1 -0
- package/dist/backend/mangle.d.ts +124 -0
- package/dist/backend/mangle.js +232 -0
- package/dist/backend/mangle.js.map +1 -0
- package/dist/coverage/report.d.ts +64 -0
- package/dist/coverage/report.js +226 -0
- package/dist/coverage/report.js.map +1 -0
- package/dist/diagnostics/diagnostic.d.ts +140 -0
- package/dist/diagnostics/diagnostic.js +458 -0
- package/dist/diagnostics/diagnostic.js.map +1 -0
- package/dist/diagnostics/render.d.ts +11 -0
- package/dist/diagnostics/render.js +58 -0
- package/dist/diagnostics/render.js.map +1 -0
- package/dist/frontend/cjs-lexer.d.ts +20 -0
- package/dist/frontend/cjs-lexer.js +813 -0
- package/dist/frontend/cjs-lexer.js.map +1 -0
- package/dist/frontend/lowering/http2-constants.d.ts +1 -0
- package/dist/frontend/lowering/http2-constants.js +251 -0
- package/dist/frontend/lowering/http2-constants.js.map +1 -0
- package/dist/frontend/lowering/lib-boundary.d.ts +6 -0
- package/dist/frontend/lowering/lib-boundary.js +143 -0
- package/dist/frontend/lowering/lib-boundary.js.map +1 -0
- package/dist/frontend/lowering/lower-assert.d.ts +18 -0
- package/dist/frontend/lowering/lower-assert.js +1269 -0
- package/dist/frontend/lowering/lower-assert.js.map +1 -0
- package/dist/frontend/lowering/lower-builtins.d.ts +511 -0
- package/dist/frontend/lowering/lower-builtins.js +5249 -0
- package/dist/frontend/lowering/lower-builtins.js.map +1 -0
- package/dist/frontend/lowering/lower-calls.d.ts +581 -0
- package/dist/frontend/lowering/lower-calls.js +6281 -0
- package/dist/frontend/lowering/lower-calls.js.map +1 -0
- package/dist/frontend/lowering/lower-classes.d.ts +727 -0
- package/dist/frontend/lowering/lower-classes.js +4701 -0
- package/dist/frontend/lowering/lower-classes.js.map +1 -0
- package/dist/frontend/lowering/lower-comptime.d.ts +53 -0
- package/dist/frontend/lowering/lower-comptime.js +244 -0
- package/dist/frontend/lowering/lower-comptime.js.map +1 -0
- package/dist/frontend/lowering/lower-containers.d.ts +483 -0
- package/dist/frontend/lowering/lower-containers.js +6281 -0
- package/dist/frontend/lowering/lower-containers.js.map +1 -0
- package/dist/frontend/lowering/lower-dgram.d.ts +20 -0
- package/dist/frontend/lowering/lower-dgram.js +319 -0
- package/dist/frontend/lowering/lower-dgram.js.map +1 -0
- package/dist/frontend/lowering/lower-emitter.d.ts +10 -0
- package/dist/frontend/lowering/lower-emitter.js +688 -0
- package/dist/frontend/lowering/lower-emitter.js.map +1 -0
- package/dist/frontend/lowering/lower-enums.d.ts +22 -0
- package/dist/frontend/lowering/lower-enums.js +235 -0
- package/dist/frontend/lowering/lower-enums.js.map +1 -0
- package/dist/frontend/lowering/lower-expando.d.ts +35 -0
- package/dist/frontend/lowering/lower-expando.js +276 -0
- package/dist/frontend/lowering/lower-expando.js.map +1 -0
- package/dist/frontend/lowering/lower-exprs.d.ts +524 -0
- package/dist/frontend/lowering/lower-exprs.js +8099 -0
- package/dist/frontend/lowering/lower-exprs.js.map +1 -0
- package/dist/frontend/lowering/lower-generators.d.ts +50 -0
- package/dist/frontend/lowering/lower-generators.js +421 -0
- package/dist/frontend/lowering/lower-generators.js.map +1 -0
- package/dist/frontend/lowering/lower-inspect.d.ts +20 -0
- package/dist/frontend/lowering/lower-inspect.js +1069 -0
- package/dist/frontend/lowering/lower-inspect.js.map +1 -0
- package/dist/frontend/lowering/lower-island.d.ts +108 -0
- package/dist/frontend/lowering/lower-island.js +650 -0
- package/dist/frontend/lowering/lower-island.js.map +1 -0
- package/dist/frontend/lowering/lower-mixins.d.ts +96 -0
- package/dist/frontend/lowering/lower-mixins.js +534 -0
- package/dist/frontend/lowering/lower-mixins.js.map +1 -0
- package/dist/frontend/lowering/lower-modules.d.ts +135 -0
- package/dist/frontend/lowering/lower-modules.js +1613 -0
- package/dist/frontend/lowering/lower-modules.js.map +1 -0
- package/dist/frontend/lowering/lower-namespaces.d.ts +168 -0
- package/dist/frontend/lowering/lower-namespaces.js +706 -0
- package/dist/frontend/lowering/lower-namespaces.js.map +1 -0
- package/dist/frontend/lowering/lower-server.d.ts +90 -0
- package/dist/frontend/lowering/lower-server.js +3471 -0
- package/dist/frontend/lowering/lower-server.js.map +1 -0
- package/dist/frontend/lowering/lower-stmts.d.ts +361 -0
- package/dist/frontend/lowering/lower-stmts.js +5341 -0
- package/dist/frontend/lowering/lower-stmts.js.map +1 -0
- package/dist/frontend/lowering/lower-stream.d.ts +88 -0
- package/dist/frontend/lowering/lower-stream.js +1533 -0
- package/dist/frontend/lowering/lower-stream.js.map +1 -0
- package/dist/frontend/lowering/lower-test.d.ts +27 -0
- package/dist/frontend/lowering/lower-test.js +353 -0
- package/dist/frontend/lowering/lower-test.js.map +1 -0
- package/dist/frontend/lowering/lowerer.d.ts +1748 -0
- package/dist/frontend/lowering/lowerer.js +6256 -0
- package/dist/frontend/lowering/lowerer.js.map +1 -0
- package/dist/frontend/lowering/surfaces.d.ts +272 -0
- package/dist/frontend/lowering/surfaces.js +1096 -0
- package/dist/frontend/lowering/surfaces.js.map +1 -0
- package/dist/frontend/npm-static.d.ts +55 -0
- package/dist/frontend/npm-static.js +300 -0
- package/dist/frontend/npm-static.js.map +1 -0
- package/dist/frontend/npm.d.ts +330 -0
- package/dist/frontend/npm.js +1259 -0
- package/dist/frontend/npm.js.map +1 -0
- package/dist/frontend/program.d.ts +186 -0
- package/dist/frontend/program.js +2172 -0
- package/dist/frontend/program.js.map +1 -0
- package/dist/frontend/provenance-registry.d.ts +48 -0
- package/dist/frontend/provenance-registry.js +87 -0
- package/dist/frontend/provenance-registry.js.map +1 -0
- package/dist/frontend/provenance.d.ts +6 -0
- package/dist/frontend/provenance.js +459 -0
- package/dist/frontend/provenance.js.map +1 -0
- package/dist/frontend/resolve.d.ts +56 -0
- package/dist/frontend/resolve.js +682 -0
- package/dist/frontend/resolve.js.map +1 -0
- package/dist/frontend/shared.d.ts +60 -0
- package/dist/frontend/shared.js +232 -0
- package/dist/frontend/shared.js.map +1 -0
- package/dist/frontend/ts7/adapter.d.ts +7 -0
- package/dist/frontend/ts7/adapter.js +54 -0
- package/dist/frontend/ts7/adapter.js.map +1 -0
- package/dist/frontend/ts7/ast.d.ts +50 -0
- package/dist/frontend/ts7/ast.js +211 -0
- package/dist/frontend/ts7/ast.js.map +1 -0
- package/dist/frontend/ts7/census-check.d.ts +1 -0
- package/dist/frontend/ts7/census-check.js +12 -0
- package/dist/frontend/ts7/census-check.js.map +1 -0
- package/dist/frontend/ts7/checker.d.ts +140 -0
- package/dist/frontend/ts7/checker.js +544 -0
- package/dist/frontend/ts7/checker.js.map +1 -0
- package/dist/frontend/ts7/enums.d.ts +18 -0
- package/dist/frontend/ts7/enums.js +43 -0
- package/dist/frontend/ts7/enums.js.map +1 -0
- package/dist/frontend/ts7/program.d.ts +99 -0
- package/dist/frontend/ts7/program.js +278 -0
- package/dist/frontend/ts7/program.js.map +1 -0
- package/dist/frontend/ts7/world-check.d.ts +3 -0
- package/dist/frontend/ts7/world-check.js +34 -0
- package/dist/frontend/ts7/world-check.js.map +1 -0
- package/dist/frontend/types.d.ts +205 -0
- package/dist/frontend/types.js +2485 -0
- package/dist/frontend/types.js.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +424 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/nodes.d.ts +4334 -0
- package/dist/ir/nodes.js +1906 -0
- package/dist/ir/nodes.js.map +1 -0
- package/dist/ir/serialize.d.ts +4 -0
- package/dist/ir/serialize.js +34 -0
- package/dist/ir/serialize.js.map +1 -0
- package/dist/ir/validate.d.ts +36 -0
- package/dist/ir/validate.js +4884 -0
- package/dist/ir/validate.js.map +1 -0
- package/package.json +30 -6
- package/README.md +0 -3
- 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
|