mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
iter: remove PyStrReverseIterator
This commit removes `PyStrReverseIterator` and its traits for using general `PyReverseSequenceIterator` for `PyStr` type. In previous rustpython, `PyStrReverseIterator` type registered in `TypeZoo`, even it had no methods(e.g. `length_hint`, `reduce`, `setstate`) Therefore, by removing `PyStrReverseIterator`, `PyStr` enable to use `PySequenceReverseIterator`. Signed-off-by: snowapril <sinjihng@gmail.com>
This commit is contained in:
1 parent
0623db2e18
commit
aa82a34b4c
3 files changed
+1
-51
No files matched your search
@@ -720,7 +720,7 @@ mod decl {
|
||||
vm.get_method_or_type_error(obj.clone(), "__getitem__", || {
|
||||
"argument to reversed() must be a sequence".to_owned()
|
||||
})?;
|
||||
let len = vm.obj_len(&obj)? as isize;
|
||||
let len = vm.obj_len(&obj)?;
|
||||
let obj_iterator = PyReverseSequenceIterator::new(obj, len);
|
||||
Ok(obj_iterator.into_object(vm))
|
||||
}
|
||||
|
||||
@@ -202,45 +202,6 @@ impl PyIter for PyStrIterator {
|
||||
}
|
||||
}
|
||||
|
||||
#[pyclass(module = false, name = "str_reverseiterator")]
|
||||
#[derive(Debug)]
|
||||
pub struct PyStrReverseIterator {
|
||||
string: PyStrRef,
|
||||
position: PyAtomic<usize>,
|
||||
}
|
||||
|
||||
impl PyValue for PyStrReverseIterator {
|
||||
fn class(vm: &VirtualMachine) -> &PyTypeRef {
|
||||
&vm.ctx.types.str_reverseiterator_type
|
||||
}
|
||||
}
|
||||
|
||||
#[pyimpl(with(PyIter))]
|
||||
impl PyStrReverseIterator {}
|
||||
|
||||
impl PyIter for PyStrReverseIterator {
|
||||
fn next(zelf: &PyRef<Self>, vm: &VirtualMachine) -> PyResult {
|
||||
let value = &*zelf.string.value;
|
||||
let mut end = zelf.position.load(atomic::Ordering::Relaxed);
|
||||
loop {
|
||||
let ch = value[..end]
|
||||
.chars()
|
||||
.next_back()
|
||||
.ok_or_else(|| vm.new_stop_iteration())?;
|
||||
|
||||
match zelf.position.compare_exchange_weak(
|
||||
end,
|
||||
end - ch.len_utf8(),
|
||||
atomic::Ordering::Release,
|
||||
atomic::Ordering::Relaxed,
|
||||
) {
|
||||
Ok(_) => break Ok(ch.into_pyobject(vm)),
|
||||
Err(cur) => end = cur,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(FromArgs)]
|
||||
struct StrArgs {
|
||||
#[pyarg(any, optional)]
|
||||
@@ -1126,14 +1087,6 @@ impl PyStr {
|
||||
fn encode(zelf: PyRef<Self>, args: EncodeArgs, vm: &VirtualMachine) -> PyResult<PyBytesRef> {
|
||||
encode_string(zelf, args.encoding, args.errors, vm)
|
||||
}
|
||||
|
||||
#[pymethod(magic)]
|
||||
fn reversed(zelf: PyRef<Self>) -> PyStrReverseIterator {
|
||||
PyStrReverseIterator {
|
||||
position: Radium::new(zelf.byte_len()),
|
||||
string: zelf,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PyStrRef {
|
||||
@@ -1254,7 +1207,6 @@ pub fn init(ctx: &PyContext) {
|
||||
PyStr::extend_class(ctx, &ctx.types.str_type);
|
||||
|
||||
PyStrIterator::extend_class(ctx, &ctx.types.str_iterator_type);
|
||||
PyStrReverseIterator::extend_class(ctx, &ctx.types.str_reverseiterator_type);
|
||||
}
|
||||
|
||||
impl PySliceableSequence for PyStr {
|
||||
|
||||
@@ -74,7 +74,6 @@ pub struct TypeZoo {
|
||||
pub list_iterator_type: PyTypeRef,
|
||||
pub list_reverseiterator_type: PyTypeRef,
|
||||
pub str_iterator_type: PyTypeRef,
|
||||
pub str_reverseiterator_type: PyTypeRef,
|
||||
pub dict_keyiterator_type: PyTypeRef,
|
||||
pub dict_reversekeyiterator_type: PyTypeRef,
|
||||
pub dict_valueiterator_type: PyTypeRef,
|
||||
@@ -193,7 +192,6 @@ impl TypeZoo {
|
||||
longrange_iterator_type: range::PyLongRangeIterator::init_bare_type().clone(),
|
||||
set_iterator_type: set::PySetIterator::init_bare_type().clone(),
|
||||
str_iterator_type: pystr::PyStrIterator::init_bare_type().clone(),
|
||||
str_reverseiterator_type: pystr::PyStrReverseIterator::init_bare_type().clone(),
|
||||
traceback_type: traceback::PyTraceback::init_bare_type().clone(),
|
||||
tuple_iterator_type: tuple::PyTupleIterator::init_bare_type().clone(),
|
||||
weakproxy_type: weakproxy::PyWeakProxy::init_bare_type().clone(),
|
||||
|
||||
Reference in new issue
Block a user