Remove static mut from PyTypeInfo implementation #751
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #699 .
I looked at using
lazy_static!
and a couple other options, in the end I went foronce_cell
.I modified the signature of
PyTypeInfo::type_object()
to return*mut
instead of&mut
. It's a minor thing but handing out&mut
in this way is definitely breaking Rust's aliasing rules.Also removed
unsafe
from the function because there's nothing unsafe about calling it - the user is responsible for using the returned*mut ffi::PyTypeInfo
pointer safely.Might need a changelog entry because the trait signature changed?
(As a note, I plan to follow up this PR with a second one which removes the need for
init_type()
. Let's start with this to keep the PR smaller and simpler.)