fix: method-scoped prototype guards, IPC transports, value profiles, Intl worklist - #8723
Conversation
…Intl worklist Lands #8672, #8718, #8720 and #8659. #8672's blocker is resolved the way the evidence pointed. Its own `is_bound_native_method_closure_value` is gone; only main's `is_bound_native_constructor_closure_value` remains, and the branch that called it in `parent_static.rs` is deleted. That branch was unreachable under either predicate -- the `if let Some(..) = bound_native_callable_ module_and_method(..)` block directly above returns unconditionally, and both predicates require that same query to be `Some` -- so removing it is behaviour-preserving rather than a choice between two semantics. #8718 (closes #6620) routes `server.listen(path)`, `net.connect(path)` and the `{ path }` overloads through real Windows named pipes and Unix-domain sockets instead of falling back to TCP. #8720 stabilizes native value profile boundaries; #8659 completes the Intl 402 test262 worklist. One fix on top: a changelog fragment for #8718, which had neither one nor a skip-changelog label. #8719 is NOT in this batch -- it conflicts with #8672 on `lower_call/method_override.rs`, which both touch. No version bump.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (73)
📝 WalkthroughWalkthroughThis PR expands native ABI and POD support, updates Intl402 locale and formatting behavior, adds Unix-domain socket and Windows named-pipe IPC, scopes prototype guard invalidation by method, and fixes sparse-array length handling. It also adds regression tests, documentation, schema updates, and integration mappings. ChangesNative ABI and POD value profile
Intl402 runtime behavior
Local IPC transports
Method-scoped prototype guards
Runtime and integration maintenance
Estimated code review effort: 5 (Critical) | ~120 minutes Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant Client
participant NetAPI
participant IPC
participant ServerState
participant Transport
Client->>NetAPI: connect(path)
NetAPI->>ServerState: reserve local path connection
NetAPI->>IPC: create IPC client
IPC->>Transport: register Unix socket or named pipe
Transport->>NetAPI: emit connect and data events
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…rray constructors (#8727) Lands #8725 and #8726. #8725 is the review tail of #8659, which landed through #8723 before these final fixes reached its head. It validates `Intl.PluralRules` digit-option bounds before flooring, roots the dynamic superclass and emitted network error values across allocating/user-code calls, rejects constructable superclasses whose `.prototype` is neither an object nor null, and restores `crate::perry_thread_local!` for the `bun:ffi` read cache. That last one is a regression I let through in #8704: a plain `thread_local!` both loses the HotTls address cache (a `_tlv_get_addr` call per read on Darwin) and escapes the root-holder census, which keys off the macro -- so the read cache was never classified. #8726 (fixes #8724) recognizes captured `ArrayBuffer` / `SharedArrayBuffer` / `DataView` constructors. `const D = DataView; new D(buf)`, `Reflect.construct(DataView, [buf])` and `class X extends DataView {}` all threw `TypeError: Constructor requires 'new'` where node succeeds; only the direct `new DataView(buf)` form worked. No version bump. Co-authored-by: Ralph Küpper <ralph@skelpo.com>
Lands #8672, #8718, #8720 and #8659.
#8672 — method-scoped prototype guards
The predicate collision that held this is resolved the way the evidence pointed. Its own
is_bound_native_method_closure_valueis gone; onlymain'sis_bound_native_constructor_closure_valueremains in the import, and the branch that called it inparent_static.rsis deleted.That deletion is behaviour-preserving rather than a choice between two semantics: the branch was unreachable under either predicate. The block directly above it —
— returns whenever that query is
Some, and both candidate predicates are defined as refinements of exactly that query. So neither could ever fire there.#8718 — named-pipe and Unix-socket IPC (closes #6620)
server.listen(path),net.connect(path)and the{ path }overloads now route through a real Windows named pipe or Unix-domain socket instead of falling back to TCP, reusing the existing socket lifecycle.#8720 — stabilize native value profile boundaries
#8659 — complete the Intl 402 test262 worklist
Fix on top
A
changelog.d/fragment for #8718, which had neither one nor askip-changeloglabel.Validation (on the merged result)
lint-job checkers passperry-runtime --lib(RUST_TEST_THREADS=1): 2667 passed, 0 failed (+6)perry-codegen --lib: 1214 passed, 0 failedperry-codegen --tests(all integration suites): 0 failuresperry-transform --lib: 93 passed, 0 failed (+1)perry-ext-net --lib: 30 passed, 0 failed — fix(net): support named-pipe and Unix-socket IPC #8718's own subject suiteNot in this batch
#8719 conflicts with #8672 on
lower_call/method_override.rs, which both touch. It'll need a rebase now that #8672 has landed.#8714 is still held on the raw-handle ratchet — 4 bare reads in
value/to_string.rsagainst a ceiling of 2. Details on that PR.Summary by CodeRabbit
New Features
node:netlocal connections.Bug Fixes