[PATCH 3 of 7] rust-cpython: replace dyn Iterator<..> of sequence with concrete type
Yuya Nishihara
yuya at tcha.org
Sun Sep 8 06:05:43 EDT 2019
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1567912039 -32400
# Sun Sep 08 12:07:19 2019 +0900
# Node ID 3c707d5a55e140de8117893a142c2b17f1a7f401
# Parent 06763fe8317d686dba58464ec4ed74f8325ae825
rust-cpython: replace dyn Iterator<..> of sequence with concrete type
We wouldn't care the cost of the dynamic dispatch, but I feel a concrete
type helps understanding error messages.
diff --git a/rust/hg-cpython/src/dirstate/dirs_multiset.rs b/rust/hg-cpython/src/dirstate/dirs_multiset.rs
--- a/rust/hg-cpython/src/dirstate/dirs_multiset.rs
+++ b/rust/hg-cpython/src/dirstate/dirs_multiset.rs
@@ -18,7 +18,10 @@ use cpython::{
use crate::dirstate::extract_dirstate;
use crate::ref_sharing::{PySharedRefCell, PySharedState};
-use hg::{DirsMultiset, DirstateMapError, DirstateParseError, EntryState};
+use hg::{
+ DirsMultiset, DirsMultisetIter, DirstateMapError, DirstateParseError,
+ EntryState,
+};
py_class!(pub class Dirs |py| {
data inner: PySharedRefCell<DirsMultiset>;
@@ -90,7 +93,7 @@ py_class!(pub class Dirs |py| {
DirsMultisetKeysIterator::create_instance(
py,
RefCell::new(Some(leak_handle)),
- RefCell::new(Box::new(leaked_ref.iter())),
+ RefCell::new(leaked_ref.iter()),
)
}
@@ -118,10 +121,10 @@ impl Dirs {
}
}
-py_shared_sequence_iterator!(
+py_shared_iterator_impl!(
DirsMultisetKeysIterator,
DirsMultisetLeakedRef,
- Vec<u8>,
+ DirsMultisetIter<'static>,
Dirs::translate_key,
Option<PyBytes>
);
diff --git a/rust/hg-cpython/src/ref_sharing.rs b/rust/hg-cpython/src/ref_sharing.rs
--- a/rust/hg-cpython/src/ref_sharing.rs
+++ b/rust/hg-cpython/src/ref_sharing.rs
@@ -417,23 +417,3 @@ macro_rules! py_shared_mapping_iterator
);
};
}
-
-/// Works basically the same as `py_shared_mapping_iterator`, but with only a
-/// key.
-macro_rules! py_shared_sequence_iterator {
- (
- $name:ident,
- $leaked:ident,
- $key_type: ty,
- $success_func: path,
- $success_type: ty
- ) => {
- py_shared_iterator_impl!(
- $name,
- $leaked,
- Box<dyn Iterator<Item = &'static $key_type> + Send>,
- $success_func,
- $success_type
- );
- };
-}
More information about the Mercurial-devel
mailing list