Commit Graph
9 Commits
Author SHA1 Message Date
N0zoM1z0 b9e4b5fa4a revert: restore withdrawn receiver growth branch
Restore the contributor tree after the prepared maintenance follow-up was inadvertently pushed following PR closure. Keep all original and maintenance commits in history; no force push or main change.
2026-10-10 18:15:03 +08:00
N0zoM1z0 7ca5f2d8a0 test(javascript): retain semantics in receiver growth measurements 2026-10-10 18:10:06 +08:00
Kaoru0822andClaude Opus 5.5 afcf3afea1 test(javascript): check #1495 growth rate instead of wall time
The #1495 regression test required 2,000 receiver calls to finish within
2 s. CI shards run with v8 coverage on slower runners: the test took 1.9 s
on #1517's run and 3.2-3.6 s on main afterwards, failing every PR.

It now compares the fastest of two runs at 1,600 and 400 calls. That
ratio is about 5-6x for the fix, with or without coverage, and about
13-14x for the quadratic code before #1517, so the bound of 10 holds on
any runner while still catching the regression.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:44:54 +00:00
46c9cba03a fix(javascript): expand an escaped receiver's methods once (#1495) (#1517)
Since #1471, escaping an object also escapes every method's results. Each
call through the object escapes it as the receiver, and each escape
re-expanded all of its methods. N methods returning one shared object,
each called once, did N times N work: 2,000 calls took 3.0 s of semantic
analysis and 4,000 took 12 s.

Expansion below references depends only on syntax, so escapes now reuse
it per expression and path. Identifiers that resolve to the same binding
and path collapse to one, because the escape walk treats them alike.
Every escape site is still recorded. The semantic IR is byte-identical
on 50 sources, and the issue's case takes 253 ms at 2,000 and 638 ms at
4,000.

Closes #1495

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 02:16:30 -07:00
1ec490f361 fix(javascript): stop replaying earlier writes for each object property write
Repeated property writes to one object made member-mutation collection
cubic. Each write evaluated its target binding to rule out a primitive,
and every evaluation folded all earlier mutation paths, copying every
slot once per path. 2,000 writes to one object took 27 s and 4,000 took
203 s.

- A recorded write always leaves a non-primitive binding value, so only
  the first write to a binding needs the primitive check.
- Apply mutation paths per slot in one pass with the same ordering
  semantics instead of one full slot copy per path.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>
2026-10-10 14:04:31 +08:00
355a292198 fix(javascript): preserve uncertainty after references escape to calls (#1292)
* fix(javascript): preserve uncertainty after references escape to calls

* fix(javascript): track iterator root escapes and preserve static captures

* fix(javascript): scope comparison unknowns to their evidence

* fix(javascript): track parameter origins at function body entry

---------

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
2026-10-10 06:53:42 +08:00
morluto 73e98b2516 fix(javascript): preserve alias and container uncertainty 2026-10-09 22:46:08 +08:00
morluto 475a0f84da fix(javascript)!: preserve property paths and uncertain slot presence
Use one explicit object/array slot model and JSON-pointer property identity across mutation analysis, return projection, and semantic graphs. Require observed presence for discriminants and resolve writes only through retained object or array receivers.

BREAKING CHANGE: projected return fields require explicit presence and semantic object operations carry full property paths.
2026-10-09 20:18:52 +08:00
ysopwnableandGitHub f6a58f1062 refactor(javascript): group domain semantics and contracts (#907) 2026-10-07 17:16:58 +08:00