Skip to content

Fix ctypes subclass bitfields and native type metadata - #9395

Merged
youknowone merged 1 commit into
RustPython:mainfrom
1ndahous3:ctypes_scalar_metadata
Oct 27, 2026
Merged

youknowone merged 1 commit into
RustPython:mainfrom
1ndahous3:ctypes_scalar_metadata

Conversation

@1ndahous3

@1ndahous3 1ndahous3 commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Follow-up to #9390, addressing issues found during its review.

Summary

  • Preserve storage-backed views for scalar subclass bitfields, including writes through .value.
  • Use initialized metadata for native argument/result conversion and cast validation, so reassigning _type_ cannot change the native representation or pointer eligibility.

AI assistance

Written with Codex (GPT-6), reviewed by a human before submission.

Summary by CodeRabbit

  • Bug Fixes
    • Improved ctypes handling when scalar and pointer subclasses change their type attributes, including native-call conversion, pointer casting, and bitfield access.
    • Preserved whole-byte behavior for boolean bitfields and correct handling of non-scalar subclasses.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T12:53:41.186279Z 2bb1026 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between b811715 and 2bb1026.

Files selected for processing: 3
  • crates/vm/src/stdlib/_ctypes/base.rs
  • crates/vm/src/stdlib/_ctypes/function.rs
  • extra_tests/snippets/stdlib_ctypes.py

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 7 remain after this review.

Walkthrough

ctypes argument and return handling now uses initialized type metadata instead of the mutable _type_ attribute. Bitfield reads use the extraction path only for scalar-returning fields. New tests cover mutated scalar subclass metadata, pointer casting, and bitfield access.

Changes: ctypes conversion and field access

Layer / File(s) Summary
Native conversion and pointer checks
crates/vm/src/stdlib/_ctypes/function.rs, extra_tests/snippets/stdlib_ctypes.py
Argument validation, pointer casting, return handling, and py_object result detection use stored type metadata. Tests check native-call conversion and pointer casting after _type_ changes.
Bitfield subclass access
crates/vm/src/stdlib/_ctypes/base.rs, extra_tests/snippets/stdlib_ctypes.py
Bitfield extraction applies when the field returns a scalar. Tests check access to a MutableInt bitfield. A comment notes that c_bool writes the whole byte for bitfields; setter logic is unchanged.

Priority: Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Possibly related PRs

  • RustPython/RustPython#9390: Changes ctypes scalar metadata, bitfield access, and native conversion; this PR addresses related scalar-subclass cases.
  • RustPython/RustPython#9229: Introduces storage-backed ctypes views and initialized scalar metadata used by these changes.
  • RustPython/RustPython#9251: Introduces initialized scalar codes and storage-backed scalar field handling extended here.

Suggested reviewers: youknowone

Merge Risk: Minimal · up to 2bb10

The reviewed changes have no established merge-blocking issue; they are ready for normal checks.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 6 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main changes: fixing ctypes subclass bitfields and using native type metadata.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • 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

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

@youknowone
youknowone merged commit 85b34cf into RustPython:main Oct 27, 2026
28 checks passed
@1ndahous3
1ndahous3 deleted the ctypes_scalar_metadata branch October 28, 2026 07:34
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.

2 participants