add `#[track_caller]` to all `Py`/`Bound`/`Borrowed` methods which panic (#4098)
This commit is contained in:
parent
d42c00d21d
commit
cd28e1408e
|
@ -0,0 +1 @@
|
||||||
|
Add `#[track_caller]` to all `Py<T>`, `Bound<'py, T>` and `Borrowed<'a, 'py, T>` methods which can panic.
|
|
@ -1091,6 +1091,7 @@ fn display_downcast_error(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
pub fn panic_after_error(_py: Python<'_>) -> ! {
|
pub fn panic_after_error(_py: Python<'_>) -> ! {
|
||||||
unsafe {
|
unsafe {
|
||||||
ffi::PyErr_Print();
|
ffi::PyErr_Print();
|
||||||
|
|
|
@ -39,6 +39,7 @@ impl FfiPtrExt for *mut ffi::PyObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
unsafe fn assume_owned(self, py: Python<'_>) -> Bound<'_, PyAny> {
|
unsafe fn assume_owned(self, py: Python<'_>) -> Bound<'_, PyAny> {
|
||||||
Bound::from_owned_ptr(py, self)
|
Bound::from_owned_ptr(py, self)
|
||||||
}
|
}
|
||||||
|
@ -57,6 +58,7 @@ impl FfiPtrExt for *mut ffi::PyObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
unsafe fn assume_borrowed<'a>(self, py: Python<'_>) -> Borrowed<'a, '_, PyAny> {
|
unsafe fn assume_borrowed<'a>(self, py: Python<'_>) -> Borrowed<'a, '_, PyAny> {
|
||||||
Borrowed::from_ptr(py, self)
|
Borrowed::from_ptr(py, self)
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,7 @@ impl<'py> Bound<'py, PyAny> {
|
||||||
/// - `ptr` must be a valid pointer to a Python object
|
/// - `ptr` must be a valid pointer to a Python object
|
||||||
/// - `ptr` must be an owned Python reference, as the `Bound<'py, PyAny>` will assume ownership
|
/// - `ptr` must be an owned Python reference, as the `Bound<'py, PyAny>` will assume ownership
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub unsafe fn from_owned_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
pub unsafe fn from_owned_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
||||||
Self(py, ManuallyDrop::new(Py::from_owned_ptr(py, ptr)))
|
Self(py, ManuallyDrop::new(Py::from_owned_ptr(py, ptr)))
|
||||||
}
|
}
|
||||||
|
@ -141,6 +142,7 @@ impl<'py> Bound<'py, PyAny> {
|
||||||
///
|
///
|
||||||
/// - `ptr` must be a valid pointer to a Python object
|
/// - `ptr` must be a valid pointer to a Python object
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub unsafe fn from_borrowed_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
pub unsafe fn from_borrowed_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
||||||
Self(py, ManuallyDrop::new(Py::from_borrowed_ptr(py, ptr)))
|
Self(py, ManuallyDrop::new(Py::from_borrowed_ptr(py, ptr)))
|
||||||
}
|
}
|
||||||
|
@ -242,6 +244,7 @@ where
|
||||||
/// Panics if the value is currently mutably borrowed. For a non-panicking variant, use
|
/// Panics if the value is currently mutably borrowed. For a non-panicking variant, use
|
||||||
/// [`try_borrow`](#method.try_borrow).
|
/// [`try_borrow`](#method.try_borrow).
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub fn borrow(&self) -> PyRef<'py, T> {
|
pub fn borrow(&self) -> PyRef<'py, T> {
|
||||||
PyRef::borrow(self)
|
PyRef::borrow(self)
|
||||||
}
|
}
|
||||||
|
@ -276,6 +279,7 @@ where
|
||||||
/// Panics if the value is currently borrowed. For a non-panicking variant, use
|
/// Panics if the value is currently borrowed. For a non-panicking variant, use
|
||||||
/// [`try_borrow_mut`](#method.try_borrow_mut).
|
/// [`try_borrow_mut`](#method.try_borrow_mut).
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub fn borrow_mut(&self) -> PyRefMut<'py, T>
|
pub fn borrow_mut(&self) -> PyRefMut<'py, T>
|
||||||
where
|
where
|
||||||
T: PyClass<Frozen = False>,
|
T: PyClass<Frozen = False>,
|
||||||
|
@ -573,6 +577,7 @@ impl<'a, 'py> Borrowed<'a, 'py, PyAny> {
|
||||||
/// the caller and it is the caller's responsibility to ensure that the reference this is
|
/// the caller and it is the caller's responsibility to ensure that the reference this is
|
||||||
/// derived from is valid for the lifetime `'a`.
|
/// derived from is valid for the lifetime `'a`.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub unsafe fn from_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
pub unsafe fn from_ptr(py: Python<'py>, ptr: *mut ffi::PyObject) -> Self {
|
||||||
Self(
|
Self(
|
||||||
NonNull::new(ptr).unwrap_or_else(|| crate::err::panic_after_error(py)),
|
NonNull::new(ptr).unwrap_or_else(|| crate::err::panic_after_error(py)),
|
||||||
|
@ -1138,6 +1143,7 @@ where
|
||||||
/// Panics if the value is currently mutably borrowed. For a non-panicking variant, use
|
/// Panics if the value is currently mutably borrowed. For a non-panicking variant, use
|
||||||
/// [`try_borrow`](#method.try_borrow).
|
/// [`try_borrow`](#method.try_borrow).
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub fn borrow<'py>(&'py self, py: Python<'py>) -> PyRef<'py, T> {
|
pub fn borrow<'py>(&'py self, py: Python<'py>) -> PyRef<'py, T> {
|
||||||
self.bind(py).borrow()
|
self.bind(py).borrow()
|
||||||
}
|
}
|
||||||
|
@ -1175,6 +1181,7 @@ where
|
||||||
/// Panics if the value is currently borrowed. For a non-panicking variant, use
|
/// Panics if the value is currently borrowed. For a non-panicking variant, use
|
||||||
/// [`try_borrow_mut`](#method.try_borrow_mut).
|
/// [`try_borrow_mut`](#method.try_borrow_mut).
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub fn borrow_mut<'py>(&'py self, py: Python<'py>) -> PyRefMut<'py, T>
|
pub fn borrow_mut<'py>(&'py self, py: Python<'py>) -> PyRefMut<'py, T>
|
||||||
where
|
where
|
||||||
T: PyClass<Frozen = False>,
|
T: PyClass<Frozen = False>,
|
||||||
|
@ -1585,6 +1592,7 @@ impl<T> Py<T> {
|
||||||
/// # Panics
|
/// # Panics
|
||||||
/// Panics if `ptr` is null.
|
/// Panics if `ptr` is null.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub unsafe fn from_owned_ptr(py: Python<'_>, ptr: *mut ffi::PyObject) -> Py<T> {
|
pub unsafe fn from_owned_ptr(py: Python<'_>, ptr: *mut ffi::PyObject) -> Py<T> {
|
||||||
match NonNull::new(ptr) {
|
match NonNull::new(ptr) {
|
||||||
Some(nonnull_ptr) => Py(nonnull_ptr, PhantomData),
|
Some(nonnull_ptr) => Py(nonnull_ptr, PhantomData),
|
||||||
|
@ -1628,6 +1636,7 @@ impl<T> Py<T> {
|
||||||
/// # Panics
|
/// # Panics
|
||||||
/// Panics if `ptr` is null.
|
/// Panics if `ptr` is null.
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub unsafe fn from_borrowed_ptr(py: Python<'_>, ptr: *mut ffi::PyObject) -> Py<T> {
|
pub unsafe fn from_borrowed_ptr(py: Python<'_>, ptr: *mut ffi::PyObject) -> Py<T> {
|
||||||
match Self::from_borrowed_ptr_or_opt(py, ptr) {
|
match Self::from_borrowed_ptr_or_opt(py, ptr) {
|
||||||
Some(slf) => slf,
|
Some(slf) => slf,
|
||||||
|
|
|
@ -652,6 +652,7 @@ impl<'py, T: PyClass> PyRef<'py, T> {
|
||||||
self.inner.clone().into_ptr()
|
self.inner.clone().into_ptr()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[track_caller]
|
||||||
pub(crate) fn borrow(obj: &Bound<'py, T>) -> Self {
|
pub(crate) fn borrow(obj: &Bound<'py, T>) -> Self {
|
||||||
Self::try_borrow(obj).expect("Already mutably borrowed")
|
Self::try_borrow(obj).expect("Already mutably borrowed")
|
||||||
}
|
}
|
||||||
|
@ -848,6 +849,7 @@ impl<'py, T: PyClass<Frozen = False>> PyRefMut<'py, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
#[track_caller]
|
||||||
pub(crate) fn borrow(obj: &Bound<'py, T>) -> Self {
|
pub(crate) fn borrow(obj: &Bound<'py, T>) -> Self {
|
||||||
Self::try_borrow(obj).expect("Already borrowed")
|
Self::try_borrow(obj).expect("Already borrowed")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue