Skip to content

land #8864: clear v0.5.1519 r19 release blockers - #8866

Merged
proggeramlug merged 4 commits into
mainfrom
land-8864-r19
Aug 26, 2026
Merged

land #8864: clear v0.5.1519 r19 release blockers#8866
proggeramlug merged 4 commits into
mainfrom
land-8864-r19

Conversation

@proggeramlug

Copy link
Copy Markdown
Contributor

Lands #8864 (fix: clear v0.5.1519 r19 release blockers). No fixes were needed — it merged clean and every gate passed as submitted.

Why the C-unwind change is the right shape

Blanket extern "C-unwind" conversion has burned this repo: #8464 did it broadly, measured +20 crashes under gc-stress, and was reverted in #8484. So this got a close look.

This is the opposite case — two specific boundaries that genuinely throw:

-pub extern "C" fn js_closure_unbox_callee_checked(callee: f64) -> i64
+pub extern "C-unwind" fn js_closure_unbox_callee_checked(callee: f64) -> i64

Both call throw_not_callable(), which raises a Perry exception through the system unwinder to generated code's landing pad. A plain extern "C" boundary turns that catchable throw into panic_cannot_unwind and aborts the process — so the conversion restores a caught TypeError rather than widening the unwind surface. The keepalive anchor's fn-pointer type is updated in sync, keeping the generated-code-only ABI consistent.

Interaction with #8861, checked

It removes the old single-slot "end" | "close" arm from removeListener, which #8861 superseded. Verified after merging that the replacement is intact: the list-based arm survives at readline/mod.rs:1651, and the &STDIN_END_CALLBACKS entry added to scan_readline_roots_mut while landing #8861 survives at :267. So removeListener for stdin end still works, and those closures are still rooted.

Validation (merged tree)

  • all 30 lint-job gates pass
  • perry-runtime 2705, perry-codegen 1270, perry-stdlib 122 — all 0 failed
  • moving-GC arm (PERRY_GC_FORCE_EVACUATE=1 PERRY_GC_VERIFY_EVACUATION=1): 16 failed on the batch and 16 on clean main — same-commit A/B. Run deliberately because of fix(runtime): extend #8416's C-unwind to the whole closure dispatch family (#8463) #8464's history in this exact area.
  • df checked before and after; no result produced under ENOSPC

The PR's own r19 CI evidence (cargo-test, parity shard 12, simulator) is cited in its description.

@proggeramlug
proggeramlug merged commit 84ff806 into main Aug 26, 2026
1 check was pending
@proggeramlug
proggeramlug deleted the land-8864-r19 branch August 26, 2026 15:22
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 11 minutes.

View limit details

Limit details: You’ve used all 8 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 26623b05-51fb-4c83-9247-520690cc573e

📥 Commits

Reviewing files that changed from the base of the PR and between fd0603e and 56255af.

📒 Files selected for processing (4)
  • changelog.d/8864-release-r19-blockers.md
  • crates/perry-runtime/src/closure/unbox.rs
  • crates/perry-stdlib/src/readline/mod.rs
  • test-parity/expected/test_parity_native_value_profile.txt

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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