@@ -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