@kernlang/core 4.0.0 → 4.0.1-canary.224.1.1a92ac0a
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/dist/assignment-operators-ts.d.ts +12 -0
- package/dist/assignment-operators-ts.js +39 -0
- package/dist/assignment-operators-ts.js.map +1 -0
- package/dist/assignment-operators.d.ts +0 -2
- package/dist/assignment-operators.js +0 -30
- package/dist/assignment-operators.js.map +1 -1
- package/dist/closure-classifier.d.ts +54 -0
- package/dist/closure-classifier.js +58 -0
- package/dist/closure-classifier.js.map +1 -0
- package/dist/closure-eligibility.d.ts +116 -0
- package/dist/closure-eligibility.js +498 -4
- package/dist/closure-eligibility.js.map +1 -1
- package/dist/closure-python-lowering.d.ts +23 -0
- package/dist/closure-python-lowering.js +44 -8
- package/dist/closure-python-lowering.js.map +1 -1
- package/dist/codegen/body-ts.js +332 -73
- package/dist/codegen/body-ts.js.map +1 -1
- package/dist/codegen/functions.d.ts +2 -1
- package/dist/codegen/functions.js +7 -3
- package/dist/codegen/functions.js.map +1 -1
- package/dist/codegen/ground-layer.js +16 -7
- package/dist/codegen/ground-layer.js.map +1 -1
- package/dist/codegen/host-namespace-ir.d.ts +7 -0
- package/dist/codegen/host-namespace-ir.js +636 -0
- package/dist/codegen/host-namespace-ir.js.map +1 -0
- package/dist/codegen/host-namespace.d.ts +3 -0
- package/dist/codegen/host-namespace.js +60 -0
- package/dist/codegen/host-namespace.js.map +1 -0
- package/dist/codegen/kern-stdlib.d.ts +30 -4
- package/dist/codegen/kern-stdlib.js +95 -1
- package/dist/codegen/kern-stdlib.js.map +1 -1
- package/dist/codegen/regex-fold-table.d.ts +2 -0
- package/dist/codegen/regex-fold-table.js +2210 -0
- package/dist/codegen/regex-fold-table.js.map +1 -0
- package/dist/codegen/regex-normalize.d.ts +446 -0
- package/dist/codegen/regex-normalize.js +1825 -0
- package/dist/codegen/regex-normalize.js.map +1 -0
- package/dist/codegen/type-system.d.ts +18 -12
- package/dist/codegen/type-system.js +85 -49
- package/dist/codegen/type-system.js.map +1 -1
- package/dist/codegen-core.js +437 -357
- package/dist/codegen-core.js.map +1 -1
- package/dist/codegen-expression.d.ts +6 -1
- package/dist/codegen-expression.js +606 -41
- package/dist/codegen-expression.js.map +1 -1
- package/dist/constructor-super.js +5 -1
- package/dist/constructor-super.js.map +1 -1
- package/dist/core-runtime/index.js +95 -6
- package/dist/core-runtime/index.js.map +1 -1
- package/dist/generated/utils/import-metadata.js +1 -1
- package/dist/generated/utils/import-metadata.js.map +1 -1
- package/dist/generated/utils/migrate-literals.d.ts +0 -1
- package/dist/generated/utils/migrate-literals.js +3 -5
- package/dist/generated/utils/migrate-literals.js.map +1 -1
- package/dist/generated/utils/python-sidecar.js +3 -3
- package/dist/generated/utils/python-sidecar.js.map +1 -1
- package/dist/generated/utils/version-detect.js +1 -1
- package/dist/generated/utils/version-detect.js.map +1 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.js +74 -11
- package/dist/index.js.map +1 -1
- package/dist/ir/semantics/to-numeric-fixtures.d.ts +67 -0
- package/dist/ir/semantics/to-numeric-fixtures.js +309 -0
- package/dist/ir/semantics/to-numeric-fixtures.js.map +1 -0
- package/dist/ir/semantics/to-numeric.d.ts +108 -0
- package/dist/ir/semantics/to-numeric.js +234 -0
- package/dist/ir/semantics/to-numeric.js.map +1 -0
- package/dist/native-eligibility-ast.js +9 -4
- package/dist/native-eligibility-ast.js.map +1 -1
- package/dist/native-eligibility.d.ts +12 -3
- package/dist/native-eligibility.js +8 -6
- package/dist/native-eligibility.js.map +1 -1
- package/dist/node.d.ts +40 -0
- package/dist/node.js +44 -0
- package/dist/node.js.map +1 -0
- package/dist/parser-core.d.ts +12 -0
- package/dist/parser-core.js +2 -2
- package/dist/parser-core.js.map +1 -1
- package/dist/parser-expression.d.ts +10 -2
- package/dist/parser-expression.js +230 -40
- package/dist/parser-expression.js.map +1 -1
- package/dist/parser-validate-expressions.d.ts +2 -1
- package/dist/parser-validate-expressions.js +5 -5
- package/dist/parser-validate-expressions.js.map +1 -1
- package/dist/parser-validate-native-eligible.d.ts +9 -2
- package/dist/parser-validate-native-eligible.js +15 -7
- package/dist/parser-validate-native-eligible.js.map +1 -1
- package/dist/parser.d.ts +4 -4
- package/dist/parser.js +8 -8
- package/dist/parser.js.map +1 -1
- package/dist/semantic-substrate.js +1 -1
- package/dist/semantic-substrate.js.map +1 -1
- package/dist/semantic-validator.d.ts +2 -0
- package/dist/semantic-validator.js +70 -9
- package/dist/semantic-validator.js.map +1 -1
- package/dist/spec.d.ts +1 -1
- package/dist/spec.js +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/typescript-closure-classifier.d.ts +18 -0
- package/dist/typescript-closure-classifier.js +81 -0
- package/dist/typescript-closure-classifier.js.map +1 -0
- package/package.json +5 -1
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
* (`lowerJsClosureBodyToPython` supports try/for-of; the gate rejects them).
|
|
44
44
|
* Widening the gate is a future slice. */
|
|
45
45
|
import ts from 'typescript';
|
|
46
|
+
import { classifyRegexLiteralAccessFailClose, REGEX_HOST_REGEXP_FAILCLOSE } from './codegen/regex-normalize.js';
|
|
46
47
|
/** Memoize parsed blocks. Keyed by the raw (trimmed) source. A `null` value is
|
|
47
48
|
* a cached "does not parse / not a single block" verdict. */
|
|
48
49
|
const blockCache = new Map();
|
|
@@ -73,22 +74,515 @@ function parseClosureBlockUncached(trimmed) {
|
|
|
73
74
|
return null;
|
|
74
75
|
return fn.body;
|
|
75
76
|
}
|
|
77
|
+
/** BLOCKER 2 + IMPORTANT 3 — parse a legacy `params="..."` string with the REAL
|
|
78
|
+
* TypeScript parser and return one entry per parameter. Owns the
|
|
79
|
+
* `ts.createSourceFile` call (this module already statically imports
|
|
80
|
+
* `typescript`) so `host-namespace-ir.ts` need not — that keeps the core
|
|
81
|
+
* barrel's `typescript`-importer pin at 5 (browser-spine-import-graph.test.ts).
|
|
82
|
+
*
|
|
83
|
+
* Wrapping the raw list in `function _(<params>){}` and reading each
|
|
84
|
+
* `ParameterDeclaration` auto-handles every case a hand-rolled char-scanner
|
|
85
|
+
* mis-split: `==`/`===`/`<=`/`>=` inside a default, regex literals with commas,
|
|
86
|
+
* nested generics, template literals.
|
|
87
|
+
*
|
|
88
|
+
* Fails CLOSED on malformed input: if `source.parseDiagnostics` is non-empty
|
|
89
|
+
* (e.g. `params="process = ("`), returns `null` instead of producing phantom
|
|
90
|
+
* recovery-AST bindings — so a caller never treats a host root (`process`) as
|
|
91
|
+
* shadowed by a binding the user never actually wrote. A successful-but-empty
|
|
92
|
+
* parse (no params) returns `[]`. */
|
|
93
|
+
export function parseLegacyParamSignature(raw) {
|
|
94
|
+
const sf = ts.createSourceFile('__kern_legacy_params__.ts', `function _(${raw}){}`, ts.ScriptTarget.Latest, true);
|
|
95
|
+
const diags = sf.parseDiagnostics;
|
|
96
|
+
if (diags && diags.length > 0)
|
|
97
|
+
return null;
|
|
98
|
+
const fn = sf.statements[0];
|
|
99
|
+
if (!fn || !ts.isFunctionDeclaration(fn))
|
|
100
|
+
return null;
|
|
101
|
+
return fn.parameters.map((param) => {
|
|
102
|
+
const defaultText = param.initializer ? param.initializer.getText(sf).trim() : '';
|
|
103
|
+
return {
|
|
104
|
+
name: ts.isIdentifier(param.name) ? param.name.text : null,
|
|
105
|
+
default: defaultText.length > 0 ? defaultText : null,
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}
|
|
76
109
|
/** Collect identifier names bound by `let`/`const` declarations directly inside
|
|
77
110
|
* the closure block (including inside nested if/else branches the gate
|
|
78
111
|
* accepts). Used to distinguish a free-variable write (rejected) from an
|
|
79
|
-
* assignment to a closure-local (allowed).
|
|
80
|
-
*
|
|
112
|
+
* assignment to a closure-local (allowed). Binding patterns contribute every
|
|
113
|
+
* identifier they declare. */
|
|
81
114
|
function collectLocalDeclaredNames(block) {
|
|
82
115
|
const names = new Set();
|
|
83
116
|
const visit = (node) => {
|
|
84
|
-
if (ts.isVariableDeclaration(node)
|
|
85
|
-
|
|
117
|
+
if (ts.isVariableDeclaration(node)) {
|
|
118
|
+
for (const name of bindingPatternIdentifierNames(node.name))
|
|
119
|
+
names.add(name);
|
|
86
120
|
}
|
|
87
121
|
ts.forEachChild(node, visit);
|
|
88
122
|
};
|
|
89
123
|
ts.forEachChild(block, visit);
|
|
90
124
|
return names;
|
|
91
125
|
}
|
|
126
|
+
export function collectClosureBlockLocalBindingNames(raw) {
|
|
127
|
+
const block = parseClosureBlockAst(raw);
|
|
128
|
+
return block === null ? new Set() : collectLocalDeclaredNames(block);
|
|
129
|
+
}
|
|
130
|
+
export function collectClosureBlockMemberAccesses(raw) {
|
|
131
|
+
const block = parseClosureBlockAst(raw);
|
|
132
|
+
if (block === null)
|
|
133
|
+
return [];
|
|
134
|
+
const accesses = [];
|
|
135
|
+
const scopes = [];
|
|
136
|
+
const isLocal = (name) => scopes.some((scope) => scope.has(name));
|
|
137
|
+
const visit = (node) => {
|
|
138
|
+
if (ts.isBlock(node)) {
|
|
139
|
+
// Round-6 fix — REAL JS block scope: a block-scoped name shadows its WHOLE
|
|
140
|
+
// block, including any initializer that lexically PRECEDES the declarator
|
|
141
|
+
// (TDZ aside). PREDECLARE this block's top-level let/const/function/class
|
|
142
|
+
// names BEFORE visiting its statements, so `{ let x = process.cwd(); const
|
|
143
|
+
// process = fake; }` treats `process` in `x`'s initializer as the block-local
|
|
144
|
+
// (`locallyShadowed: true`). Previously the `VariableDeclaration` case
|
|
145
|
+
// declared the name only AFTER visiting its initializer, so the access in a
|
|
146
|
+
// PRIOR initializer was seen as the host root — TS REJECTED while the Python
|
|
147
|
+
// lowerer (which predeclares via `enterBlockScope`) ACCEPTED → a fresh
|
|
148
|
+
// TS↔Python divergence for non-RegExp host roots. This matches the regex
|
|
149
|
+
// walk's `collectClosureBlockRegexHostViolations` predeclaration exactly.
|
|
150
|
+
scopes.push(new Set(topLevelBlockDeclaredNames(node.statements)));
|
|
151
|
+
for (const statement of node.statements)
|
|
152
|
+
visit(statement);
|
|
153
|
+
scopes.pop();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (ts.isVariableDeclaration(node)) {
|
|
157
|
+
// Names are predeclared on block entry (above); only the initializer needs a
|
|
158
|
+
// visit. The declarator name itself is not a member/call/new access.
|
|
159
|
+
if (node.initializer)
|
|
160
|
+
visit(node.initializer);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (ts.isPropertyAccessExpression(node)) {
|
|
164
|
+
const root = leftmostIdentifierName(node.expression);
|
|
165
|
+
if (root)
|
|
166
|
+
accesses.push({ root, member: propertyAccessMemberLabel(node), locallyShadowed: isLocal(root) });
|
|
167
|
+
}
|
|
168
|
+
else if (ts.isElementAccessExpression(node)) {
|
|
169
|
+
const root = leftmostIdentifierName(node.expression);
|
|
170
|
+
if (root)
|
|
171
|
+
accesses.push({
|
|
172
|
+
root,
|
|
173
|
+
member: elementAccessMemberLabel(node.argumentExpression),
|
|
174
|
+
locallyShadowed: isLocal(root),
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else if (ts.isNewExpression(node)) {
|
|
178
|
+
const root = leftmostIdentifierName(node.expression);
|
|
179
|
+
if (root)
|
|
180
|
+
accesses.push({ root, member: 'constructor', locallyShadowed: isLocal(root) });
|
|
181
|
+
}
|
|
182
|
+
else if (ts.isCallExpression(node)) {
|
|
183
|
+
// GAP 2 — the callee may be wrapped in paren/as/satisfies/non-null/legacy
|
|
184
|
+
// type-assert forms, or be the right operand of a comma (sequence)
|
|
185
|
+
// expression — e.g. `(Math as any)()`, `(0, process)()`. NORMALIZE the
|
|
186
|
+
// callee to its underlying identifier so the host-namespace root is still
|
|
187
|
+
// detected (escalate-safe: an unwrapped non-identifier callee records
|
|
188
|
+
// nothing, exactly as the prior bare-identifier guard did).
|
|
189
|
+
const callee = unwrapCallCalleeExpression(node.expression);
|
|
190
|
+
if (ts.isIdentifier(callee)) {
|
|
191
|
+
accesses.push({ root: callee.text, member: 'call', locallyShadowed: isLocal(callee.text) });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
ts.forEachChild(node, visit);
|
|
195
|
+
};
|
|
196
|
+
visit(block);
|
|
197
|
+
return accesses;
|
|
198
|
+
}
|
|
199
|
+
/** Collect the const/let/function/class names declared at the TOP LEVEL of a
|
|
200
|
+
* single block (its DIRECT statement children only — NOT nested blocks). JS
|
|
201
|
+
* block-scoping hoists these to the whole enclosing block, so a reference
|
|
202
|
+
* ANYWHERE in the block (even lexically BEFORE the declarator) resolves to the
|
|
203
|
+
* block-local, not an outer binding. Predeclaring them before visiting the
|
|
204
|
+
* block's refs is what makes `() => { let x = RegExp; const RegExp = 1; … }`
|
|
205
|
+
* treat the `RegExp` in `x`'s initializer as the block-local (no false
|
|
206
|
+
* fail-close). `var` hoists to the function, not the block, but the v1 gate
|
|
207
|
+
* rejects `var`, so only let/const/function/class reach here. */
|
|
208
|
+
function topLevelBlockDeclaredNames(statements) {
|
|
209
|
+
const names = [];
|
|
210
|
+
for (const stmt of statements) {
|
|
211
|
+
if (ts.isVariableStatement(stmt)) {
|
|
212
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
213
|
+
names.push(...bindingPatternIdentifierNames(decl.name));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else if (ts.isFunctionDeclaration(stmt) && stmt.name) {
|
|
217
|
+
names.push(stmt.name.text);
|
|
218
|
+
}
|
|
219
|
+
else if (ts.isClassDeclaration(stmt) && stmt.name) {
|
|
220
|
+
names.push(stmt.name.text);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return names;
|
|
224
|
+
}
|
|
225
|
+
/** True when this `RegExp` identifier sits in a position where it is NOT a host
|
|
226
|
+
* VALUE use, so the bare-`RegExp` screen must NOT fire:
|
|
227
|
+
* - the member NAME of a property access (`obj.RegExp`) or `QualifiedName`;
|
|
228
|
+
* - the OBJECT of a member/element access (`RegExp.prototype`, `RegExp[$1]`) —
|
|
229
|
+
* the generic member scan owns these and emits the GENERIC host message,
|
|
230
|
+
* matching the expression-level member-receiver screen;
|
|
231
|
+
* - an object property KEY (`{ RegExp: 1 }`) — but NOT a shorthand
|
|
232
|
+
* (`{ RegExp }`), which IS a value reference;
|
|
233
|
+
* - an object-literal METHOD / GETTER / SETTER name or a class PROPERTY name
|
|
234
|
+
* (`{ RegExp() {} }`, `{ get RegExp() {} }`, `{ set RegExp(v) {} }`,
|
|
235
|
+
* `class { RegExp = … }`) — a member key, not a host value reference;
|
|
236
|
+
* - any DECLARATION name (variable/binding/parameter/enum-member/class/function);
|
|
237
|
+
* - a TYPE-ANNOTATION reference (`const x: RegExp = …`) — types are erased and
|
|
238
|
+
* are never a value use. */
|
|
239
|
+
function isRegExpNonValuePosition(node) {
|
|
240
|
+
const parent = node.parent;
|
|
241
|
+
if (!parent)
|
|
242
|
+
return false;
|
|
243
|
+
// Member NAME side (`obj.RegExp`, qualified `A.RegExp`).
|
|
244
|
+
if (ts.isPropertyAccessExpression(parent) && parent.name === node)
|
|
245
|
+
return true;
|
|
246
|
+
if (ts.isQualifiedName(parent) && parent.right === node)
|
|
247
|
+
return true;
|
|
248
|
+
// Member OBJECT side (`RegExp.foo`, `RegExp[x]`) — generic scan owns it.
|
|
249
|
+
if (ts.isPropertyAccessExpression(parent) && parent.expression === node)
|
|
250
|
+
return true;
|
|
251
|
+
if (ts.isElementAccessExpression(parent) && parent.expression === node)
|
|
252
|
+
return true;
|
|
253
|
+
// Object property KEY (NOT shorthand — shorthand is a value reference).
|
|
254
|
+
if (ts.isPropertyAssignment(parent) && parent.name === node)
|
|
255
|
+
return true;
|
|
256
|
+
// Object-literal METHOD / GETTER / SETTER NAMES, and a class PROPERTY name
|
|
257
|
+
// (`{ RegExp() {} }`, `{ get RegExp() {} }`, `{ set RegExp(v) {} }`,
|
|
258
|
+
// `class { RegExp = … }`). The NAME is a member key, NOT a value reference to
|
|
259
|
+
// the host `RegExp` global — emitting the object/class never reads the host
|
|
260
|
+
// root, so the bare-`RegExp` screen must NOT fire on it (over-rejection fix).
|
|
261
|
+
if ((ts.isMethodDeclaration(parent) ||
|
|
262
|
+
ts.isGetAccessorDeclaration(parent) ||
|
|
263
|
+
ts.isSetAccessorDeclaration(parent) ||
|
|
264
|
+
ts.isPropertyDeclaration(parent)) &&
|
|
265
|
+
parent.name === node) {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
// Declaration names of every flavor.
|
|
269
|
+
if (ts.isVariableDeclaration(parent) && parent.name === node)
|
|
270
|
+
return true;
|
|
271
|
+
if (ts.isBindingElement(parent) && (parent.name === node || parent.propertyName === node))
|
|
272
|
+
return true;
|
|
273
|
+
if (ts.isParameter(parent) && parent.name === node)
|
|
274
|
+
return true;
|
|
275
|
+
if (ts.isEnumMember(parent) && parent.name === node)
|
|
276
|
+
return true;
|
|
277
|
+
if ((ts.isFunctionDeclaration(parent) || ts.isClassDeclaration(parent)) && parent.name === node)
|
|
278
|
+
return true;
|
|
279
|
+
// A reference inside a TYPE NODE is erased (`const x: RegExp = /a/`).
|
|
280
|
+
if (isInTypePosition(node))
|
|
281
|
+
return true;
|
|
282
|
+
// Round-6 fix — the round-5 carve-out exempted `typeof RegExp` here, which (with
|
|
283
|
+
// its TS/IR-emit siblings) re-opened reserved host roots. `typeof RegExp` is NOT
|
|
284
|
+
// portable (the Python leg lowers `typeof` to a runtime `isinstance` ladder over
|
|
285
|
+
// the Python name `RegExp`, which does not exist), so it MUST fail-close — and
|
|
286
|
+
// it does so through this bare-`RegExp` screen, which fires inside a `typeof`
|
|
287
|
+
// operand just like any other value reference. (`typeof RegExp.prototype` is a
|
|
288
|
+
// member read, owned by the member-OBJECT branch above, so it is unaffected.)
|
|
289
|
+
// Non-RegExp host roots in `typeof` position (`typeof Date`/`typeof process`)
|
|
290
|
+
// are caught by `collectClosureBlockTypeofHostRoots` with the generic host
|
|
291
|
+
// message, keeping the closure-walk leg in lockstep with the expression legs.
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
/** True when the node sits anywhere inside a TypeNode (a type annotation, type
|
|
295
|
+
* argument, type alias, etc.). Types are erased on emit, so a `RegExp` there is
|
|
296
|
+
* never a host VALUE use. Walks parents until a TypeNode (erased) or a
|
|
297
|
+
* value-bearing boundary (statement/block) is reached. */
|
|
298
|
+
function isInTypePosition(node) {
|
|
299
|
+
let current = node.parent;
|
|
300
|
+
while (current) {
|
|
301
|
+
if (ts.isTypeNode(current))
|
|
302
|
+
return true;
|
|
303
|
+
if (ts.isStatement(current) || ts.isBlock(current) || ts.isSourceFile(current))
|
|
304
|
+
return false;
|
|
305
|
+
current = current.parent;
|
|
306
|
+
}
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
/** Walk a closure block's TS AST and collect the regex-host violations the
|
|
310
|
+
* generic member-access scan cannot see (bare `RegExp` VALUE references and
|
|
311
|
+
* regex-LITERAL property/element accesses). Tracks REAL JS block scope: each
|
|
312
|
+
* block predeclares its top-level let/const/function/class names BEFORE visiting
|
|
313
|
+
* its refs, so a name shadows only within its own block + nested blocks. A
|
|
314
|
+
* parse failure yields an empty list (the gate already rejected such bodies). */
|
|
315
|
+
export function collectClosureBlockRegexHostViolations(raw) {
|
|
316
|
+
const block = parseClosureBlockAst(raw);
|
|
317
|
+
if (block === null)
|
|
318
|
+
return [];
|
|
319
|
+
const violations = [];
|
|
320
|
+
const scopes = [];
|
|
321
|
+
const isLocal = (name) => scopes.some((scope) => scope.has(name));
|
|
322
|
+
const visit = (node) => {
|
|
323
|
+
if (ts.isBlock(node)) {
|
|
324
|
+
// JS block scope: hoist this block's top-level declarations for its WHOLE
|
|
325
|
+
// body (order-independent), then visit. Pop on exit so a sibling/outer
|
|
326
|
+
// reference no longer sees them.
|
|
327
|
+
scopes.push(new Set(topLevelBlockDeclaredNames(node.statements)));
|
|
328
|
+
for (const statement of node.statements)
|
|
329
|
+
visit(statement);
|
|
330
|
+
scopes.pop();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
// A property/element access whose receiver is a regex LITERAL, possibly under
|
|
334
|
+
// transparent type-only wrappers (`(/x/ as any).source`, `(/x/!)["source"]`,
|
|
335
|
+
// nested `((/x/ as any)).source`). The receiver is UNWRAPPED first
|
|
336
|
+
// (`unwrapRegexReceiverTS`) so a wrapped literal is screened identically to the
|
|
337
|
+
// bare form — and to the IR legs, which peel the matching `typeAssert`/
|
|
338
|
+
// `nonNull` IR wrappers (round-5 wrapped-receiver fail-close fix). The shared
|
|
339
|
+
// classifier returns the exact message (or null = portable, e.g. `/x/.test`).
|
|
340
|
+
if ((ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) &&
|
|
341
|
+
ts.isRegularExpressionLiteral(unwrapRegexReceiverTS(node.expression))) {
|
|
342
|
+
const receiver = unwrapRegexReceiverTS(node.expression);
|
|
343
|
+
const property = regexLiteralAccessPropertyName(node);
|
|
344
|
+
// Only a DOTTED property access can be the callee of a portable regex
|
|
345
|
+
// method call — `lowerRegexCallTS` lowers `callee.kind === 'member'` only,
|
|
346
|
+
// so a BRACKET-form call (`/x/["test"](s)`) is NOT portable.
|
|
347
|
+
const isDottedCallee = ts.isPropertyAccessExpression(node) && ts.isCallExpression(node.parent) && node.parent.expression === node;
|
|
348
|
+
const flags = regexLiteralFlags(receiver);
|
|
349
|
+
const message = classifyRegexLiteralAccessFailClose(property, isDottedCallee, flags);
|
|
350
|
+
if (message !== null) {
|
|
351
|
+
violations.push({ kind: 'regexLiteralAccess', root: 'RegExp', locallyShadowed: false, message });
|
|
352
|
+
}
|
|
353
|
+
// Do NOT blindly `forEachChild` into this already-classified access: the
|
|
354
|
+
// regexLit RECEIVER (`node.expression`) has no child violation, and
|
|
355
|
+
// re-descending the access node as a whole risks re-visiting it. Descend
|
|
356
|
+
// ONLY into a computed element INDEX (`/x/[k]`) so the index EXPRESSION is
|
|
357
|
+
// still checked for its OWN host violations (`/x/[someObj.RegExp]`,
|
|
358
|
+
// `/x/[/y/.source]`) — a property access (`/x/.source`) has only the static
|
|
359
|
+
// member key, nothing value-bearing to recurse into.
|
|
360
|
+
if (ts.isElementAccessExpression(node))
|
|
361
|
+
visit(node.argumentExpression);
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
if (ts.isIdentifier(node) && node.text === 'RegExp' && !isRegExpNonValuePosition(node)) {
|
|
365
|
+
violations.push({
|
|
366
|
+
kind: 'bareRegexp',
|
|
367
|
+
root: node.text,
|
|
368
|
+
locallyShadowed: isLocal(node.text),
|
|
369
|
+
message: REGEX_HOST_REGEXP_FAILCLOSE,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
ts.forEachChild(node, visit);
|
|
373
|
+
};
|
|
374
|
+
// The root closure block is a `ts.Block`; `visit` pushes its top-level scope.
|
|
375
|
+
visit(block);
|
|
376
|
+
return violations;
|
|
377
|
+
}
|
|
378
|
+
/** Walk a closure block and collect every `typeof <bare identifier>` operand,
|
|
379
|
+
* tracking REAL JS block scope identically to
|
|
380
|
+
* {@link collectClosureBlockRegexHostViolations}: each block predeclares its
|
|
381
|
+
* top-level let/const/function/class names (incl. destructuring) BEFORE visiting
|
|
382
|
+
* its refs, so a block-local shadow is honored for the whole block. Only the
|
|
383
|
+
* bare-identifier operand of a `typeof` is reported, AFTER recursively peeling
|
|
384
|
+
* the transparent TS-AST wrappers via {@link unwrapRegexReceiverTS} — so a
|
|
385
|
+
* WRAPPED operand (`typeof (Date as any)`, `typeof (Date!)`, parenthesized
|
|
386
|
+
* `typeof (Date)`, nested `typeof (Date as any as unknown)`) records the
|
|
387
|
+
* underlying `Date` name, identically to the ValueIR legs that peel
|
|
388
|
+
* `typeAssert`/`nonNull` via `unwrapTransparentReceiverIR` (round-7 closes the
|
|
389
|
+
* wrapped-operand bypass on this leg too). `typeof Date.now` (a member operand)
|
|
390
|
+
* is owned by the generic member-access scan, and any operand that does NOT
|
|
391
|
+
* unwrap to a bare identifier records nothing. A parse failure yields an empty
|
|
392
|
+
* list (the gate already rejected such bodies). */
|
|
393
|
+
export function collectClosureBlockTypeofOperands(raw) {
|
|
394
|
+
const block = parseClosureBlockAst(raw);
|
|
395
|
+
if (block === null)
|
|
396
|
+
return [];
|
|
397
|
+
const operands = [];
|
|
398
|
+
const scopes = [];
|
|
399
|
+
const isLocal = (name) => scopes.some((scope) => scope.has(name));
|
|
400
|
+
const visit = (node) => {
|
|
401
|
+
if (ts.isBlock(node)) {
|
|
402
|
+
scopes.push(new Set(topLevelBlockDeclaredNames(node.statements)));
|
|
403
|
+
for (const statement of node.statements)
|
|
404
|
+
visit(statement);
|
|
405
|
+
scopes.pop();
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
if (ts.isTypeOfExpression(node)) {
|
|
409
|
+
// Round-7 — peel the transparent TS-AST wrappers (paren/`as`/`<T>`/`!`/
|
|
410
|
+
// `satisfies`) via the round-5 `unwrapRegexReceiverTS` (fixpoint) BEFORE the
|
|
411
|
+
// bare-identifier check, so a WRAPPED operand (`typeof (Date as any)`) is
|
|
412
|
+
// recorded as the underlying `Date` — matching the ValueIR legs' unwrap.
|
|
413
|
+
const operand = unwrapRegexReceiverTS(node.expression);
|
|
414
|
+
if (ts.isIdentifier(operand)) {
|
|
415
|
+
operands.push({ name: operand.text, locallyShadowed: isLocal(operand.text) });
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
ts.forEachChild(node, visit);
|
|
419
|
+
};
|
|
420
|
+
// The root closure block is a `ts.Block`; `visit` pushes its top-level scope.
|
|
421
|
+
visit(block);
|
|
422
|
+
return operands;
|
|
423
|
+
}
|
|
424
|
+
/** The portable property NAME of a regex-literal property/element access, or
|
|
425
|
+
* null when it is a COMPUTED element index (`/x/[k]`) — unknowable, so the
|
|
426
|
+
* classifier treats it as non-portable. A STRING-literal element index
|
|
427
|
+
* (`/x/["test"]`) yields its string value so it classifies like the dotted form. */
|
|
428
|
+
function regexLiteralAccessPropertyName(node) {
|
|
429
|
+
if (ts.isPropertyAccessExpression(node))
|
|
430
|
+
return node.name.text;
|
|
431
|
+
const arg = node.argumentExpression;
|
|
432
|
+
if (ts.isStringLiteralLike(arg))
|
|
433
|
+
return arg.text;
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
/** Recursively peel the transparent TS-AST wrappers off a regex-literal access
|
|
437
|
+
* RECEIVER until the underlying expression: `ParenthesizedExpression` (`(/x/)`),
|
|
438
|
+
* `AsExpression` (`/x/ as any`), `TypeAssertionExpression` (legacy `<any>/x/`),
|
|
439
|
+
* `NonNullExpression` (`/x/!`), and `SatisfiesExpression` (`/x/ satisfies T`).
|
|
440
|
+
* Fixpoint loop (not a single unwrap) so nested wrappers like `((/x/ as any))!`
|
|
441
|
+
* collapse to the `/x/` literal. This is the TS-AST projection of the IR-leg
|
|
442
|
+
* {@link unwrapTransparentReceiverIR} (which peels `typeAssert`/`nonNull`): the
|
|
443
|
+
* SAME logical wrapper set on each node universe, so a wrapped regex-literal
|
|
444
|
+
* access screens identically across the TS-AST closure leg and the ValueIR legs.
|
|
445
|
+
*
|
|
446
|
+
* DELIBERATELY does NOT peel a comma-sequence `(0, /x/)`: KERN's value IR has no
|
|
447
|
+
* comma/sequence node, so the IR legs can never SEE that shape — peeling it on
|
|
448
|
+
* the TS-AST leg only would CREATE a one-target divergence, the opposite of the
|
|
449
|
+
* lockstep this round closes. (A comma-sequence regex-literal receiver is a
|
|
450
|
+
* vanishingly rare host shape; leaving it un-unwrapped is the parity-safe choice.) */
|
|
451
|
+
function unwrapRegexReceiverTS(expr) {
|
|
452
|
+
let current = expr;
|
|
453
|
+
while (ts.isParenthesizedExpression(current) ||
|
|
454
|
+
ts.isAsExpression(current) ||
|
|
455
|
+
ts.isTypeAssertionExpression(current) ||
|
|
456
|
+
ts.isNonNullExpression(current) ||
|
|
457
|
+
ts.isSatisfiesExpression(current)) {
|
|
458
|
+
current = current.expression;
|
|
459
|
+
}
|
|
460
|
+
return current;
|
|
461
|
+
}
|
|
462
|
+
/** Extract the flags substring of a regex literal token (`/x/gi` → `gi`).
|
|
463
|
+
*
|
|
464
|
+
* DEFENSIVE GUARD (round-5 over-rejection/soundness fix): a well-formed regex
|
|
465
|
+
* literal text is `/…/flags`, so the flags are everything after the LAST `/`.
|
|
466
|
+
* But if the token text is malformed (no closing slash, or a leading-slash-only
|
|
467
|
+
* shape where the only `/` is the opener at index 0), `lastIndexOf('/')` would
|
|
468
|
+
* return `-1` or `0` and we would mis-read the body AS flags — silently passing a
|
|
469
|
+
* pattern that should be screened. A malformed literal must never launder
|
|
470
|
+
* flags: when there is no closing `/` at index > 0, we FAIL SAFE by returning a
|
|
471
|
+
* `'g'`-bearing sentinel so the classifier takes the most-restrictive (`/g`)
|
|
472
|
+
* branch (`/x/.test` → `REGEX_TEST_G_FAILCLOSE`; every other access already
|
|
473
|
+
* fails-close flag-independently) — fail-CLOSE rather than fail-open. A real
|
|
474
|
+
* regex literal always has its closing slash at index > 0, so this never affects
|
|
475
|
+
* valid input; `ts` would not even produce a `RegularExpressionLiteral` token
|
|
476
|
+
* for an unterminated literal, but the guard is the cheap, sound belt-and-braces. */
|
|
477
|
+
function regexLiteralFlags(literal) {
|
|
478
|
+
const text = literal.text;
|
|
479
|
+
const lastSlash = text.lastIndexOf('/');
|
|
480
|
+
// Valid `/…/flags` always has its closing slash at index > 0 (index 0 is the
|
|
481
|
+
// opener). `<= 0` means no closing slash was found — fail SAFE with `/g`.
|
|
482
|
+
if (lastSlash <= 0)
|
|
483
|
+
return 'g';
|
|
484
|
+
return text.slice(lastSlash + 1);
|
|
485
|
+
}
|
|
486
|
+
/** Peel the wrapper layers a call callee may carry until reaching the underlying
|
|
487
|
+
* expression: parenthesized, `as`, legacy `<T>` type-assertion, non-null `!`,
|
|
488
|
+
* and `satisfies` forms, plus the right operand of a comma (sequence) operator.
|
|
489
|
+
* Fixpoint loop — NOT a single unwrap — so stacked wrappers like
|
|
490
|
+
* `((process satisfies T) as any)!` collapse to `process`. */
|
|
491
|
+
function unwrapCallCalleeExpression(expr) {
|
|
492
|
+
let current = expr;
|
|
493
|
+
while (true) {
|
|
494
|
+
if (ts.isParenthesizedExpression(current) ||
|
|
495
|
+
ts.isAsExpression(current) ||
|
|
496
|
+
ts.isTypeAssertionExpression(current) ||
|
|
497
|
+
ts.isNonNullExpression(current) ||
|
|
498
|
+
ts.isSatisfiesExpression(current)) {
|
|
499
|
+
current = current.expression;
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
// `(a, b)` sequence — the produced value is the RIGHT operand, so
|
|
503
|
+
// `(0, process)()` targets `process`.
|
|
504
|
+
if (ts.isBinaryExpression(current) && current.operatorToken.kind === ts.SyntaxKind.CommaToken) {
|
|
505
|
+
current = current.right;
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
508
|
+
return current;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
/** Flatten a binding NAME (plain identifier OR an object/array destructuring
|
|
512
|
+
* pattern) to the identifier names it binds. `const { RegExp } = x` →
|
|
513
|
+
* `['RegExp']`, `const [a, , b] = arr` → `['a','b']`. Exported so the Python
|
|
514
|
+
* closure lowerer's block-scope tracker (`blockTopLevelDeclaredNames` in
|
|
515
|
+
* closure-python-lowering.ts) extracts shadow names the SAME way as the TS-AST
|
|
516
|
+
* closure walk here — a destructured `RegExp` shadow is then honored
|
|
517
|
+
* symmetrically on both legs (no fail-open on one target). */
|
|
518
|
+
export function bindingPatternIdentifierNames(name) {
|
|
519
|
+
if (ts.isIdentifier(name))
|
|
520
|
+
return [name.text];
|
|
521
|
+
const out = [];
|
|
522
|
+
for (const element of name.elements) {
|
|
523
|
+
if (ts.isOmittedExpression(element))
|
|
524
|
+
continue;
|
|
525
|
+
out.push(...bindingPatternIdentifierNames(element.name));
|
|
526
|
+
}
|
|
527
|
+
return out;
|
|
528
|
+
}
|
|
529
|
+
function leftmostIdentifierName(node) {
|
|
530
|
+
let current = unwrapCallCalleeExpression(node);
|
|
531
|
+
while (true) {
|
|
532
|
+
if (ts.isIdentifier(current))
|
|
533
|
+
return current.text;
|
|
534
|
+
if (ts.isPropertyAccessExpression(current) || ts.isElementAccessExpression(current)) {
|
|
535
|
+
current = unwrapCallCalleeExpression(current.expression);
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
if (ts.isParenthesizedExpression(current)) {
|
|
539
|
+
current = current.expression;
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
if (ts.isAsExpression(current) ||
|
|
543
|
+
ts.isTypeAssertionExpression(current) ||
|
|
544
|
+
ts.isNonNullExpression(current) ||
|
|
545
|
+
ts.isSatisfiesExpression(current)) {
|
|
546
|
+
current = current.expression;
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
return null;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
function propertyAccessMemberLabel(node) {
|
|
553
|
+
const parts = [node.name.text];
|
|
554
|
+
let current = node.expression;
|
|
555
|
+
while (ts.isPropertyAccessExpression(current)) {
|
|
556
|
+
parts.unshift(current.name.text);
|
|
557
|
+
current = current.expression;
|
|
558
|
+
}
|
|
559
|
+
return parts.join('.');
|
|
560
|
+
}
|
|
561
|
+
function elementAccessMemberLabel(argument) {
|
|
562
|
+
return argument && ts.isStringLiteralLike(argument) ? argument.text : '[computed]';
|
|
563
|
+
}
|
|
564
|
+
/** Collect the raw source text of every CALL expression nested anywhere in a
|
|
565
|
+
* closure block, via the shared TS AST (`parseClosureBlockAst`) — never a
|
|
566
|
+
* string scan. Returned to consumers that re-parse each call into their own
|
|
567
|
+
* IR (the TS body emitter's bound-regex-method fail-close), so those callers
|
|
568
|
+
* need no static `typescript` import of their own. Keeping the `ts` AST walk
|
|
569
|
+
* quarantined in this Node-only module is what keeps `body-ts.js` OFF the
|
|
570
|
+
* browser-spine TS-importer pin (`browser-spine-import-graph.test.ts`). A
|
|
571
|
+
* parse failure yields an empty list (the gate already rejected such bodies,
|
|
572
|
+
* so this is defensive). */
|
|
573
|
+
export function collectClosureBlockCallTexts(raw) {
|
|
574
|
+
const block = parseClosureBlockAst(raw);
|
|
575
|
+
if (block === null)
|
|
576
|
+
return [];
|
|
577
|
+
const texts = [];
|
|
578
|
+
const visit = (node) => {
|
|
579
|
+
if (ts.isCallExpression(node))
|
|
580
|
+
texts.push(node.getText());
|
|
581
|
+
ts.forEachChild(node, visit);
|
|
582
|
+
};
|
|
583
|
+
ts.forEachChild(block, visit);
|
|
584
|
+
return texts;
|
|
585
|
+
}
|
|
92
586
|
/** Collect the set of free identifier NAMES referenced in a closure block —
|
|
93
587
|
* identifiers used in the block that are NOT declared inside the block and
|
|
94
588
|
* NOT in `paramNames` (the closure's own parameters). These are exactly the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closure-eligibility.js","sourceRoot":"","sources":["../src/closure-eligibility.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"closure-eligibility.js","sourceRoot":"","sources":["../src/closure-eligibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,29 @@ export interface LowerJsClosureBodyToPythonOptions {
|
|
|
15
15
|
* `writtenFreeNames` still reports SOURCE names; the consumer resolves
|
|
16
16
|
* again when building its `nonlocal` line. */
|
|
17
17
|
lowerAssignTarget?(name: string): string;
|
|
18
|
+
/** BLOCK-SCOPE hooks (Slice 2 review fix, round 3). The lowerer FLATTENS
|
|
19
|
+
* nested blocks into one Python suite, so the consumer's per-expression
|
|
20
|
+
* guards (e.g. the host-`RegExp` value screen) lose the lexical block scope
|
|
21
|
+
* unless told the boundaries. `enterBlockScope` is called with a block's
|
|
22
|
+
* TOP-LEVEL let/const/function/class names just BEFORE its statements lower
|
|
23
|
+
* (JS hoists them for the whole block, so a reference anywhere inside —
|
|
24
|
+
* even lexically before the declarator — sees the block-local); the matching
|
|
25
|
+
* `exitBlockScope` is called after, with the SAME names. The consumer uses
|
|
26
|
+
* them to push/pop block-local shadows so a `RegExp` reference fails-close
|
|
27
|
+
* ONLY when no in-scope block-local/param shadows it — byte-aligned with the
|
|
28
|
+
* TS-AST closure walk.
|
|
29
|
+
*
|
|
30
|
+
* REQUIRED (round-7 — was silently `?`-optional). An optional hook let a
|
|
31
|
+
* consumer omit the wire and the lowerer silently no-op the block-scope
|
|
32
|
+
* tracking → the Python leg would FAIL-OPEN on a destructured / nested-block
|
|
33
|
+
* `RegExp` shadow while the TS leg stayed closed, a one-target divergence the
|
|
34
|
+
* type system could not catch. Making both REQUIRED turns a missing wire into
|
|
35
|
+
* a COMPILE ERROR. A consumer that genuinely wants NO block-scope tracking
|
|
36
|
+
* (the route path, which screens host names through a different rewriter and
|
|
37
|
+
* has no per-block shadow stack) passes EXPLICIT no-op (identity) functions —
|
|
38
|
+
* an intentional opt-out that is visible at the call site, not an accident. */
|
|
39
|
+
enterBlockScope(names: string[]): void;
|
|
40
|
+
exitBlockScope(names: string[]): void;
|
|
18
41
|
}
|
|
19
42
|
export interface LowerJsClosureBodyToPythonResult {
|
|
20
43
|
ok: boolean;
|