⚡ Sangsakala Proxy 🏠 Home
Skip to content

Align weak-reference comparison and ownership controls - #9710

Draft
youknowdot wants to merge 1 commit into
RustPython:mainfrom
youknowdot:fix/weakref-controls-20261104
Draft

youknowdot wants to merge 1 commit into
RustPython:mainfrom
youknowdot:fix/weakref-controls-20261104

Conversation

@youknowdot

Copy link
Copy Markdown
Contributor

Summary

Align weak-reference and proxy controls with Python 3.15 in three Rust files (+101/-92).

  • Return raw weak-reference comparison results, preserve exact equality/inequality dispatch, and accept both proxy payload types as CPython does.
  • Unwrap both proxy operands through the existing binary helper. Release upgraded binary/ternary operands in argument order after callbacks, including errors, without forcing comparison results to bool.
  • Let the outer weak-reference hash result replace a recursively populated cache, or clear that cache on failure, before releasing the referent.
  • Give live and dead proxies their own repr without invoking referent repr; preserve lossless type-name formatting when composed with Preserve Unicode in shared qualified type names #9700.
  • Preserve Cell's raw comparison results while releasing owned contents in left-to-right order through a borrowed comparison call.

Validation

Compared against pinned CPython d220409a13b77de7a6c30abe16ea90db01528edc weakrefobject.c, cellobject.c and weakrefobject.h. The external CPython oracle passes 149 assertions plus 20 additional exact-repr assertions covering raw results, exact operations, both proxy types, dead operands, repr callback bypass, reentrant hash cache outcomes, and callback/finalizer order.

Independent source/lifetime review passed on the final patch. An independent external oracle passed another 172 assertions, including direct proxy-slot dispatch, nested hash error/cache outcomes and last-owner finalizer visibility. Final threaded cargo check passed (1m03s) and all-target Clippy passed (1m34s), with exactly the 12 unchanged baseline diagnostics. Normal commit hooks passed without bypass. No Python tests, repository test logic, markers, Lib files or workflows are changed.

Limits and integration

Native RustPython execution remains unperformed because the required safety guard is not verified. External reference assertions and source review do not establish a native runtime pass; hosted CI remains necessary. Cross-thread hash critical-section equivalence and concurrent stress behavior are not established by this single-threaded compatibility work.

The pinned CPython runtime leaks earlier upgraded operands when a later proxy is dead, and can corrupt a pending hash exception during finalizer reentry. Those upstream anomalies are deliberately not reproduced: Rust retains safe cleanup and the original error. Traceback-owned operand lifetimes can separately delay finalizers.

Standalone surrogate module/qualname fidelity remains limited by the current shared helper; full lossless names require #9700. Constructor parsing remains unchanged. The patch preserves #9699's reversed-method area and composes with #9700's qualified-name return type change using the existing WTF-8 helper rather than a second formatter. Payload validation/ownership infrastructure from #8963/#8944/#8939 is not duplicated.

Assisted-by: OpenAI Codex:model version not exposed
@coderabbitai

coderabbitai Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

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