Skip to content

Commit ec18a12

Browse files
committed
refactor
1 parent 33bcc89 commit ec18a12

File tree

1 file changed

+30
-32
lines changed

1 file changed

+30
-32
lines changed

vm/src/stdlib/itertools.rs

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -63,42 +63,40 @@ mod decl {
6363
impl IterNextIterable for PyItertoolsChain {}
6464
impl IterNext for PyItertoolsChain {
6565
fn next(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyIterReturn> {
66-
let next = || {
67-
let source = zelf.source.read().clone();
68-
match source {
69-
None => {
70-
return Ok(PyIterReturn::StopIteration(None));
66+
let source = if let Some(source) = zelf.source.read().clone() {
67+
source
68+
} else {
69+
return Ok(PyIterReturn::StopIteration(None));
70+
};
71+
let next = loop {
72+
let option_active = zelf.active.read().clone();
73+
if let Some(active) = option_active {
74+
match active.next(vm) {
75+
Ok(PyIterReturn::Return(ok)) => {
76+
break Ok(PyIterReturn::Return(ok));
77+
}
78+
Ok(PyIterReturn::StopIteration(_)) => {
79+
*zelf.active.write() = None;
80+
}
81+
Err(err) => {
82+
break Err(err);
83+
}
7184
}
72-
Some(source) => loop {
73-
let active = zelf.active.read().clone();
74-
match active {
75-
None => match source.next(vm) {
76-
Ok(PyIterReturn::Return(ok)) => {
77-
*zelf.active.write() = Some(ok.get_iter(vm)?);
78-
}
79-
Ok(PyIterReturn::StopIteration(_)) => {
80-
return Ok(PyIterReturn::StopIteration(None));
81-
}
82-
Err(err) => {
83-
return Err(err);
84-
}
85-
},
86-
Some(active) => match active.next(vm) {
87-
Ok(PyIterReturn::Return(ok)) => {
88-
return Ok(PyIterReturn::Return(ok));
89-
}
90-
Ok(PyIterReturn::StopIteration(_)) => {
91-
*zelf.active.write() = None;
92-
}
93-
Err(err) => {
94-
return Err(err);
95-
}
96-
},
85+
} else {
86+
match source.next(vm) {
87+
Ok(PyIterReturn::Return(ok)) => {
88+
*zelf.active.write() = Some(ok.get_iter(vm)?);
9789
}
98-
},
90+
Ok(PyIterReturn::StopIteration(_)) => {
91+
break Ok(PyIterReturn::StopIteration(None));
92+
}
93+
Err(err) => {
94+
break Err(err);
95+
}
96+
}
9997
}
10098
};
101-
next().map_err(|err| {
99+
next.map_err(|err| {
102100
*zelf.source.write() = None;
103101
err
104102
})

0 commit comments

Comments
 (0)