Skip to content

Commit bf03102

Browse files
committed
Use raise_if_stop! macro where possible
1 parent 089c39f commit bf03102

File tree

3 files changed

+15
-18
lines changed

3 files changed

+15
-18
lines changed

vm/src/builtins/enumerate.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use crate::{
88
convert::ToPyObject,
99
function::OptionalArg,
1010
protocol::{PyIter, PyIterReturn},
11+
raise_if_stop,
1112
types::{Constructor, IterNext, Iterable, SelfIter},
1213
};
1314
use malachite_bigint::BigInt;
@@ -73,12 +74,10 @@ impl Py<PyEnumerate> {
7374
}
7475

7576
impl SelfIter for PyEnumerate {}
77+
7678
impl IterNext for PyEnumerate {
7779
fn next(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyIterReturn> {
78-
let next_obj = match zelf.iterator.next(vm)? {
79-
PyIterReturn::StopIteration(v) => return Ok(PyIterReturn::StopIteration(v)),
80-
PyIterReturn::Return(obj) => obj,
81-
};
80+
let next_obj = raise_if_stop!(zelf.iterator.next(vm)?);
8281
let mut counter = zelf.counter.write();
8382
let position = counter.clone();
8483
*counter += 1;

vm/src/builtins/filter.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::{
33
Context, Py, PyObjectRef, PyPayload, PyResult, VirtualMachine,
44
class::PyClassImpl,
55
protocol::{PyIter, PyIterReturn},
6+
raise_if_stop,
67
types::{Constructor, IterNext, Iterable, SelfIter},
78
};
89

@@ -45,24 +46,22 @@ impl PyFilter {
4546
}
4647

4748
impl SelfIter for PyFilter {}
49+
4850
impl IterNext for PyFilter {
4951
fn next(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyIterReturn> {
5052
let predicate = &zelf.predicate;
5153
loop {
52-
let next_obj = match zelf.iterator.next(vm)? {
53-
PyIterReturn::Return(obj) => obj,
54-
PyIterReturn::StopIteration(v) => return Ok(PyIterReturn::StopIteration(v)),
55-
};
54+
let next_obj = raise_if_stop!(zelf.iterator.next(vm)?);
5655
let predicate_value = if vm.is_none(predicate) {
5756
next_obj.clone()
5857
} else {
59-
// the predicate itself can raise StopIteration which does stop the filter
60-
// iteration
61-
match PyIterReturn::from_pyresult(predicate.call((next_obj.clone(),), vm), vm)? {
62-
PyIterReturn::Return(obj) => obj,
63-
PyIterReturn::StopIteration(v) => return Ok(PyIterReturn::StopIteration(v)),
64-
}
58+
// the predicate itself can raise StopIteration which does stop the filter iteration
59+
raise_if_stop!(PyIterReturn::from_pyresult(
60+
predicate.call((next_obj.clone(),), vm),
61+
vm
62+
)?)
6563
};
64+
6665
if predicate_value.try_to_bool(vm)? {
6766
return Ok(PyIterReturn::Return(next_obj));
6867
}

vm/src/builtins/map.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::{
55
class::PyClassImpl,
66
function::PosArgs,
77
protocol::{PyIter, PyIterReturn},
8+
raise_if_stop,
89
types::{Constructor, IterNext, Iterable, SelfIter},
910
};
1011

@@ -53,14 +54,12 @@ impl PyMap {
5354
}
5455

5556
impl SelfIter for PyMap {}
57+
5658
impl IterNext for PyMap {
5759
fn next(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyIterReturn> {
5860
let mut next_objs = Vec::new();
5961
for iterator in &zelf.iterators {
60-
let item = match iterator.next(vm)? {
61-
PyIterReturn::Return(obj) => obj,
62-
PyIterReturn::StopIteration(v) => return Ok(PyIterReturn::StopIteration(v)),
63-
};
62+
let item = raise_if_stop!(iterator.next(vm)?);
6463
next_objs.push(item);
6564
}
6665

0 commit comments

Comments
 (0)