Skip to content

Conversation

@youknowone
Copy link
Member

@youknowone youknowone commented Dec 15, 2025

Summary by CodeRabbit

  • Bug Fixes
    • 0-dimensional memoryviews now correctly raise an error when their length is queried, instead of returning an incorrect value.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 15, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

The changes modify error handling for 0-dimensional memoryviews and refactor trait method signatures in the VM's slot system. 0-dimensional memoryview length queries now raise TypeError instead of returning 1. Trait methods are refactored to use PyObjectRef instead of PyRef and routed through slot methods.

Changes

Cohort / File(s) Summary
Memory view error handling
crates/vm/src/builtins/memory.rs
Modified PyMemoryView::__len__ to raise TypeError("0-dim memory has no length") for 0-dimensional memoryviews instead of returning length of 1
Slot trait method refactoring
crates/vm/src/types/slot.rs
Exposed slot_init as __init__ via #[pymethod(name = "__init__")]; removed public __init__ wrapper; refactored __getattribute__, __setattr__, and __delattr__ signatures from PyRef<Self> to PyObjectRef and updated routing to use slot methods (slot_getattro, slot_setattro)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–30 minutes

  • Trait method signature changes in slot.rs: Multiple trait methods changed receiver type from PyRef<Self> to PyObjectRef, requiring careful verification that implementations across the codebase are compatible and that routing through slot methods produces equivalent behavior
  • Public method removal: The __init__ wrapper removal on Initializer may affect external trait implementations and should be verified for backward compatibility impact
  • Memory behavior change: Ensure 0-dimensional memoryview length query behavior is tested and expected by callers

Possibly related PRs

  • init debug helper #6315: Modifies Initializer::slot_init with debug handling in its downcast path, directly related to the slot_init exposure in this PR

Poem

🐰 A rabbit hops through slots so keen,
Where traits now dance with refs unseen,
0-dim arrays cry "no length here!"
PyObjectRef routes clean and clear,
Errors bubble up with grace,
Refactored slots fill their place!

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 550497e and 6adebaf.

📒 Files selected for processing (2)
  • crates/vm/src/builtins/memory.rs (1 hunks)
  • crates/vm/src/types/slot.rs (3 hunks)

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 and usage tips.

@youknowone youknowone marked this pull request as ready for review December 16, 2025 02:16
@youknowone youknowone merged commit 272b36d into RustPython:main Dec 16, 2025
32 of 35 checks passed
@youknowone youknowone deleted the fix branch December 16, 2025 02:16
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