rust-cpython: remove Option<_> from interface of py_shared_iterator
It's the implementation detail of the py_shared_iterator that the leaked
reference is kept in Option<_> so that it can be dropped early.
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs Sun Sep 08 12:26:12 2019 +0900
+++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs Sun Sep 08 13:08:59 2019 +0900
@@ -323,7 +323,7 @@
let (leak_handle, leaked_ref) = unsafe { self.leak_immutable(py)? };
DirstateMapKeysIterator::from_inner(
py,
- Some(leak_handle),
+ leak_handle,
leaked_ref.iter(),
)
}
@@ -332,7 +332,7 @@
let (leak_handle, leaked_ref) = unsafe { self.leak_immutable(py)? };
DirstateMapItemsIterator::from_inner(
py,
- Some(leak_handle),
+ leak_handle,
leaked_ref.iter(),
)
}
@@ -341,7 +341,7 @@
let (leak_handle, leaked_ref) = unsafe { self.leak_immutable(py)? };
DirstateMapKeysIterator::from_inner(
py,
- Some(leak_handle),
+ leak_handle,
leaked_ref.iter(),
)
}
@@ -438,7 +438,7 @@
let (leak_handle, leaked_ref) = unsafe { self.leak_immutable(py)? };
CopyMapKeysIterator::from_inner(
py,
- Some(leak_handle),
+ leak_handle,
leaked_ref.copy_map.iter(),
)
}
@@ -447,7 +447,7 @@
let (leak_handle, leaked_ref) = unsafe { self.leak_immutable(py)? };
CopyMapItemsIterator::from_inner(
py,
- Some(leak_handle),
+ leak_handle,
leaked_ref.copy_map.iter(),
)
}
--- a/rust/hg-cpython/src/ref_sharing.rs Sun Sep 08 12:26:12 2019 +0900
+++ b/rust/hg-cpython/src/ref_sharing.rs Sun Sep 08 13:08:59 2019 +0900
@@ -378,12 +378,12 @@
impl $name {
pub fn from_inner(
py: Python,
- leaked: Option<$leaked>,
+ leaked: $leaked,
it: $iterator_type
) -> PyResult<Self> {
Self::create_instance(
py,
- RefCell::new(leaked),
+ RefCell::new(Some(leaked)),
RefCell::new(it)
)
}