Skip to content

Merge train: #9543 #9541 (+census baseline refresh) - #9546

Merged
proggeramlug merged 6 commits into
mainfrom
land-train72
Sep 2, 2026
Merged

Merge train: #9543 #9541 (+census baseline refresh)#9546
proggeramlug merged 6 commits into
mainfrom
land-train72

Conversation

@proggeramlug

Copy link
Copy Markdown
Contributor

Lands the validated train: #9543 (class member source text + ICU-localized default date patterns, #9468/#9451) and #9541 (root every saved implicit-this across the user code it brackets — the 122-site #9445 sweep).

Train resolutions: in os_process_streams.rs the four #9445 sites are merged with the with_const_ptr conversions that landed with train70 — rooting + re-read from #9541, closure call through the combinator; #9541's four rooted-replacer reads in json/replacer.rs routed through with_const_ptr (the raw accessor form would re-trip the debt ratchet); shape-census baseline refreshed for the property_set.rs split that landed with #9544 (two callsite paths moved to property_set/sloppy_class_field.rs — this also cures the census red on current main).

Validation: release build green; RUST_TEST_THREADS=1 perry-runtime green; perry-codegen + perry-hir green; perry-stdlib green single-threaded; all 12 lint gates green; 4/4 train fixtures byte-identical to node.

Rebase-merge to preserve per-commit authorship.

Ralph Küpper added 6 commits September 2, 2026 16:30
…t brackets (#9445)

Every `let prev = js_implicit_this_set(receiver); …user code…;
js_implicit_this_set(prev)` in the runtime held the caller's receiver in a
bare Rust local across a call that allocates. An evacuating young-gen minor
inside the window moves that object; the restore then installed a retired
from-space address as the caller's `this`, which reads as `undefined` on the
next member access (the #9417 shape). Root the saved value in a
RuntimeHandleScope and re-read it at the restore — the idiom PR #9444 used
for the accessor sites — at all 121 remaining sites, plus the receivers that
three of those sites consume again after the call.

Claude-Session: https://claude.ai/code/session_01L11XMMWrR9Wz11dHpq4gXS
…el toJSON/replacer calls (#9445)

Found by the #9445 fixture: with the saved implicit-`this` rooted, an
allocating replacer still SIGSEGV'd in js_closure_call2. js_json_stringify_full
and js_json_stringify_with_replacer run the root toJSON and the root replacer
call — both user code — and then handed the walk the raw closure pointer and
the "" key. Root both and re-read at each use.
…se existing handle scopes (#9445)

Callback loops (Map/Set/URLSearchParams forEach, EventTarget dispatch, the
emitters, fs.watch fan-out, the timer batch, TypedArray.from's map callback)
root the caller's receiver once before the loop and restore from that handle
each iteration, instead of opening a scope per callback. Single-call sites
that already own a RuntimeHandleScope push onto it. Three bare-name callers
of js_implicit_this_get are fully qualified.
…s replacer closure reads via with_const_ptr
@proggeramlug
proggeramlug merged commit 239a75b into main Sep 2, 2026
17 checks passed
@proggeramlug
proggeramlug deleted the land-train72 branch September 2, 2026 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant