@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.
Files changed (102) hide show
  1. package/dist/assignment-operators-ts.d.ts +12 -0
  2. package/dist/assignment-operators-ts.js +39 -0
  3. package/dist/assignment-operators-ts.js.map +1 -0
  4. package/dist/assignment-operators.d.ts +0 -2
  5. package/dist/assignment-operators.js +0 -30
  6. package/dist/assignment-operators.js.map +1 -1
  7. package/dist/closure-classifier.d.ts +54 -0
  8. package/dist/closure-classifier.js +58 -0
  9. package/dist/closure-classifier.js.map +1 -0
  10. package/dist/closure-eligibility.d.ts +116 -0
  11. package/dist/closure-eligibility.js +498 -4
  12. package/dist/closure-eligibility.js.map +1 -1
  13. package/dist/closure-python-lowering.d.ts +23 -0
  14. package/dist/closure-python-lowering.js +44 -8
  15. package/dist/closure-python-lowering.js.map +1 -1
  16. package/dist/codegen/body-ts.js +332 -73
  17. package/dist/codegen/body-ts.js.map +1 -1
  18. package/dist/codegen/functions.d.ts +2 -1
  19. package/dist/codegen/functions.js +7 -3
  20. package/dist/codegen/functions.js.map +1 -1
  21. package/dist/codegen/ground-layer.js +16 -7
  22. package/dist/codegen/ground-layer.js.map +1 -1
  23. package/dist/codegen/host-namespace-ir.d.ts +7 -0
  24. package/dist/codegen/host-namespace-ir.js +636 -0
  25. package/dist/codegen/host-namespace-ir.js.map +1 -0
  26. package/dist/codegen/host-namespace.d.ts +3 -0
  27. package/dist/codegen/host-namespace.js +60 -0
  28. package/dist/codegen/host-namespace.js.map +1 -0
  29. package/dist/codegen/kern-stdlib.d.ts +30 -4
  30. package/dist/codegen/kern-stdlib.js +95 -1
  31. package/dist/codegen/kern-stdlib.js.map +1 -1
  32. package/dist/codegen/regex-fold-table.d.ts +2 -0
  33. package/dist/codegen/regex-fold-table.js +2210 -0
  34. package/dist/codegen/regex-fold-table.js.map +1 -0
  35. package/dist/codegen/regex-normalize.d.ts +446 -0
  36. package/dist/codegen/regex-normalize.js +1825 -0
  37. package/dist/codegen/regex-normalize.js.map +1 -0
  38. package/dist/codegen/type-system.d.ts +18 -12
  39. package/dist/codegen/type-system.js +85 -49
  40. package/dist/codegen/type-system.js.map +1 -1
  41. package/dist/codegen-core.js +437 -357
  42. package/dist/codegen-core.js.map +1 -1
  43. package/dist/codegen-expression.d.ts +6 -1
  44. package/dist/codegen-expression.js +606 -41
  45. package/dist/codegen-expression.js.map +1 -1
  46. package/dist/constructor-super.js +5 -1
  47. package/dist/constructor-super.js.map +1 -1
  48. package/dist/core-runtime/index.js +95 -6
  49. package/dist/core-runtime/index.js.map +1 -1
  50. package/dist/generated/utils/import-metadata.js +1 -1
  51. package/dist/generated/utils/import-metadata.js.map +1 -1
  52. package/dist/generated/utils/migrate-literals.d.ts +0 -1
  53. package/dist/generated/utils/migrate-literals.js +3 -5
  54. package/dist/generated/utils/migrate-literals.js.map +1 -1
  55. package/dist/generated/utils/python-sidecar.js +3 -3
  56. package/dist/generated/utils/python-sidecar.js.map +1 -1
  57. package/dist/generated/utils/version-detect.js +1 -1
  58. package/dist/generated/utils/version-detect.js.map +1 -1
  59. package/dist/index.d.ts +17 -12
  60. package/dist/index.js +74 -11
  61. package/dist/index.js.map +1 -1
  62. package/dist/ir/semantics/to-numeric-fixtures.d.ts +67 -0
  63. package/dist/ir/semantics/to-numeric-fixtures.js +309 -0
  64. package/dist/ir/semantics/to-numeric-fixtures.js.map +1 -0
  65. package/dist/ir/semantics/to-numeric.d.ts +108 -0
  66. package/dist/ir/semantics/to-numeric.js +234 -0
  67. package/dist/ir/semantics/to-numeric.js.map +1 -0
  68. package/dist/native-eligibility-ast.js +9 -4
  69. package/dist/native-eligibility-ast.js.map +1 -1
  70. package/dist/native-eligibility.d.ts +12 -3
  71. package/dist/native-eligibility.js +8 -6
  72. package/dist/native-eligibility.js.map +1 -1
  73. package/dist/node.d.ts +40 -0
  74. package/dist/node.js +44 -0
  75. package/dist/node.js.map +1 -0
  76. package/dist/parser-core.d.ts +12 -0
  77. package/dist/parser-core.js +2 -2
  78. package/dist/parser-core.js.map +1 -1
  79. package/dist/parser-expression.d.ts +10 -2
  80. package/dist/parser-expression.js +230 -40
  81. package/dist/parser-expression.js.map +1 -1
  82. package/dist/parser-validate-expressions.d.ts +2 -1
  83. package/dist/parser-validate-expressions.js +5 -5
  84. package/dist/parser-validate-expressions.js.map +1 -1
  85. package/dist/parser-validate-native-eligible.d.ts +9 -2
  86. package/dist/parser-validate-native-eligible.js +15 -7
  87. package/dist/parser-validate-native-eligible.js.map +1 -1
  88. package/dist/parser.d.ts +4 -4
  89. package/dist/parser.js +8 -8
  90. package/dist/parser.js.map +1 -1
  91. package/dist/semantic-substrate.js +1 -1
  92. package/dist/semantic-substrate.js.map +1 -1
  93. package/dist/semantic-validator.d.ts +2 -0
  94. package/dist/semantic-validator.js +70 -9
  95. package/dist/semantic-validator.js.map +1 -1
  96. package/dist/spec.d.ts +1 -1
  97. package/dist/spec.js +1 -1
  98. package/dist/spec.js.map +1 -1
  99. package/dist/typescript-closure-classifier.d.ts +18 -0
  100. package/dist/typescript-closure-classifier.js +81 -0
  101. package/dist/typescript-closure-classifier.js.map +1 -0
  102. 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). v1 only admits identifier-named
80
- * declarations, so destructured names never enter this set. */
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) && ts.isIdentifier(node.name)) {
85
- names.add(node.name.text);
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;