Remove `unsafe` for some safe functions
This commit is contained in:
parent
fbe7de1efb
commit
7dddb8b0c0
|
@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
||||||
- Mark FFI definitions `PyMarshal_WriteObjectToString`, `PyMarshal_ReadObjectFromString` as available in limited API.
|
- Mark FFI definitions `PyMarshal_WriteObjectToString`, `PyMarshal_ReadObjectFromString` as available in limited API.
|
||||||
- Mark FFI definitions `PyListObject` and those from `funcobject.h` as requiring non-limited API. [#1387](https://github.com/PyO3/pyo3/pull/1387)
|
- Mark FFI definitions `PyListObject` and those from `funcobject.h` as requiring non-limited API. [#1387](https://github.com/PyO3/pyo3/pull/1387)
|
||||||
- Fix typo in FFI definition `PyFunction_Code` to `PyFunction_GetCode`. [#1387](https://github.com/PyO3/pyo3/pull/1387)
|
- Fix typo in FFI definition `PyFunction_Code` to `PyFunction_GetCode`. [#1387](https://github.com/PyO3/pyo3/pull/1387)
|
||||||
|
- Mark `PyLayout::py_init`, `PyClassDict::clear_dict`, and `opt_to_pyobj` safe, as they do not perform any unsafe operations. [#1404](https://github.com/PyO3/pyo3/pull/1404)
|
||||||
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -66,7 +66,7 @@ unsafe impl<T: PyClass> PyLayout<T> for PyCellInner<T> {
|
||||||
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
||||||
Some(&mut self.ob_base)
|
Some(&mut self.ob_base)
|
||||||
}
|
}
|
||||||
unsafe fn py_init(&mut self, value: T) {
|
fn py_init(&mut self, value: T) {
|
||||||
self.value = ManuallyDrop::new(UnsafeCell::new(value));
|
self.value = ManuallyDrop::new(UnsafeCell::new(value));
|
||||||
}
|
}
|
||||||
unsafe fn py_drop(&mut self, py: Python) {
|
unsafe fn py_drop(&mut self, py: Python) {
|
||||||
|
@ -396,7 +396,7 @@ unsafe impl<T: PyClass> PyLayout<T> for PyCell<T> {
|
||||||
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
||||||
Some(&mut self.inner.ob_base)
|
Some(&mut self.inner.ob_base)
|
||||||
}
|
}
|
||||||
unsafe fn py_init(&mut self, value: T) {
|
fn py_init(&mut self, value: T) {
|
||||||
self.inner.value = ManuallyDrop::new(UnsafeCell::new(value));
|
self.inner.value = ManuallyDrop::new(UnsafeCell::new(value));
|
||||||
}
|
}
|
||||||
unsafe fn py_drop(&mut self, py: Python) {
|
unsafe fn py_drop(&mut self, py: Python) {
|
||||||
|
|
|
@ -149,9 +149,7 @@ impl<T: PyClass> PyClassInitializer<T> {
|
||||||
impl<T: PyClass> PyObjectInit<T> for PyClassInitializer<T> {
|
impl<T: PyClass> PyObjectInit<T> for PyClassInitializer<T> {
|
||||||
fn init_class<L: PyLayout<T>>(self, layout: &mut L) {
|
fn init_class<L: PyLayout<T>>(self, layout: &mut L) {
|
||||||
let Self { init, super_init } = self;
|
let Self { init, super_init } = self;
|
||||||
unsafe {
|
|
||||||
layout.py_init(init);
|
layout.py_init(init);
|
||||||
}
|
|
||||||
if let Some(super_obj) = layout.get_super() {
|
if let Some(super_obj) = layout.get_super() {
|
||||||
super_init.init_class(super_obj);
|
super_init.init_class(super_obj);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ use crate::{ffi, Python};
|
||||||
pub trait PyClassDict {
|
pub trait PyClassDict {
|
||||||
const IS_DUMMY: bool = true;
|
const IS_DUMMY: bool = true;
|
||||||
fn new() -> Self;
|
fn new() -> Self;
|
||||||
unsafe fn clear_dict(&mut self, _py: Python) {}
|
fn clear_dict(&mut self, _py: Python) {}
|
||||||
private_decl! {}
|
private_decl! {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,9 +47,9 @@ impl PyClassDict for PyClassDictSlot {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self(std::ptr::null_mut())
|
Self(std::ptr::null_mut())
|
||||||
}
|
}
|
||||||
unsafe fn clear_dict(&mut self, _py: Python) {
|
fn clear_dict(&mut self, _py: Python) {
|
||||||
if !self.0.is_null() {
|
if !self.0.is_null() {
|
||||||
ffi::PyDict_Clear(self.0)
|
unsafe { ffi::PyDict_Clear(self.0) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ pub unsafe trait PyLayout<T: PyTypeInfo> {
|
||||||
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
fn get_super(&mut self) -> Option<&mut T::BaseLayout> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
unsafe fn py_init(&mut self, _value: T) {}
|
fn py_init(&mut self, _value: T) {}
|
||||||
unsafe fn py_drop(&mut self, _py: Python) {}
|
unsafe fn py_drop(&mut self, _py: Python) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -403,7 +403,7 @@ impl PyDeltaAccess for PyDelta {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utility function
|
// Utility function
|
||||||
unsafe fn opt_to_pyobj(py: Python, opt: Option<&PyObject>) -> *mut ffi::PyObject {
|
fn opt_to_pyobj(py: Python, opt: Option<&PyObject>) -> *mut ffi::PyObject {
|
||||||
// Convenience function for unpacking Options to either an Object or None
|
// Convenience function for unpacking Options to either an Object or None
|
||||||
match opt {
|
match opt {
|
||||||
Some(tzi) => tzi.as_ptr(),
|
Some(tzi) => tzi.as_ptr(),
|
||||||
|
|
Loading…
Reference in New Issue