Skip to content

Commit aa82a34

Browse files
committed
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>
1 parent 0623db2 commit aa82a34

3 files changed

Lines changed: 1 addition & 51 deletions

File tree

vm/src/builtins/make_module.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,7 @@ mod decl {
720720
vm.get_method_or_type_error(obj.clone(), "__getitem__", || {
721721
"argument to reversed() must be a sequence".to_owned()
722722
})?;
723-
let len = vm.obj_len(&obj)? as isize;
723+
let len = vm.obj_len(&obj)?;
724724
let obj_iterator = PyReverseSequenceIterator::new(obj, len);
725725
Ok(obj_iterator.into_object(vm))
726726
}

vm/src/builtins/pystr.rs

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -202,45 +202,6 @@ impl PyIter for PyStrIterator {
202202
}
203203
}
204204

205-
#[pyclass(module = false, name = "str_reverseiterator")]
206-
#[derive(Debug)]
207-
pub struct PyStrReverseIterator {
208-
string: PyStrRef,
209-
position: PyAtomic<usize>,
210-
}
211-
212-
impl PyValue for PyStrReverseIterator {
213-
fn class(vm: &VirtualMachine) -> &PyTypeRef {
214-
&vm.ctx.types.str_reverseiterator_type
215-
}
216-
}
217-
218-
#[pyimpl(with(PyIter))]
219-
impl PyStrReverseIterator {}
220-
221-
impl PyIter for PyStrReverseIterator {
222-
fn next(zelf: &PyRef<Self>, vm: &VirtualMachine) -> PyResult {
223-
let value = &*zelf.string.value;
224-
let mut end = zelf.position.load(atomic::Ordering::Relaxed);
225-
loop {
226-
let ch = value[..end]
227-
.chars()
228-
.next_back()
229-
.ok_or_else(|| vm.new_stop_iteration())?;
230-
231-
match zelf.position.compare_exchange_weak(
232-
end,
233-
end - ch.len_utf8(),
234-
atomic::Ordering::Release,
235-
atomic::Ordering::Relaxed,
236-
) {
237-
Ok(_) => break Ok(ch.into_pyobject(vm)),
238-
Err(cur) => end = cur,
239-
}
240-
}
241-
}
242-
}
243-
244205
#[derive(FromArgs)]
245206
struct StrArgs {
246207
#[pyarg(any, optional)]
@@ -1126,14 +1087,6 @@ impl PyStr {
11261087
fn encode(zelf: PyRef<Self>, args: EncodeArgs, vm: &VirtualMachine) -> PyResult<PyBytesRef> {
11271088
encode_string(zelf, args.encoding, args.errors, vm)
11281089
}
1129-
1130-
#[pymethod(magic)]
1131-
fn reversed(zelf: PyRef<Self>) -> PyStrReverseIterator {
1132-
PyStrReverseIterator {
1133-
position: Radium::new(zelf.byte_len()),
1134-
string: zelf,
1135-
}
1136-
}
11371090
}
11381091

11391092
impl PyStrRef {
@@ -1254,7 +1207,6 @@ pub fn init(ctx: &PyContext) {
12541207
PyStr::extend_class(ctx, &ctx.types.str_type);
12551208

12561209
PyStrIterator::extend_class(ctx, &ctx.types.str_iterator_type);
1257-
PyStrReverseIterator::extend_class(ctx, &ctx.types.str_reverseiterator_type);
12581210
}
12591211

12601212
impl PySliceableSequence for PyStr {

vm/src/types.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ pub struct TypeZoo {
7474
pub list_iterator_type: PyTypeRef,
7575
pub list_reverseiterator_type: PyTypeRef,
7676
pub str_iterator_type: PyTypeRef,
77-
pub str_reverseiterator_type: PyTypeRef,
7877
pub dict_keyiterator_type: PyTypeRef,
7978
pub dict_reversekeyiterator_type: PyTypeRef,
8079
pub dict_valueiterator_type: PyTypeRef,
@@ -193,7 +192,6 @@ impl TypeZoo {
193192
longrange_iterator_type: range::PyLongRangeIterator::init_bare_type().clone(),
194193
set_iterator_type: set::PySetIterator::init_bare_type().clone(),
195194
str_iterator_type: pystr::PyStrIterator::init_bare_type().clone(),
196-
str_reverseiterator_type: pystr::PyStrReverseIterator::init_bare_type().clone(),
197195
traceback_type: traceback::PyTraceback::init_bare_type().clone(),
198196
tuple_iterator_type: tuple::PyTupleIterator::init_bare_type().clone(),
199197
weakproxy_type: weakproxy::PyWeakProxy::init_bare_type().clone(),

0 commit comments

Comments
 (0)