@@ -958,7 +958,7 @@ impl PyItertoolsCombinations {
958
958
struct PyItertoolsZiplongest {
959
959
iterators : Vec < PyObjectRef > ,
960
960
fillvalue : PyObjectRef ,
961
- numactive : RefCell < usize > ,
961
+ numactive : Cell < usize > ,
962
962
}
963
963
964
964
impl PyValue for PyItertoolsZiplongest {
@@ -992,7 +992,7 @@ impl PyItertoolsZiplongest {
992
992
. map ( |iterable| get_iter ( vm, & iterable) )
993
993
. collect :: < Result < Vec < _ > , _ > > ( ) ?;
994
994
995
- let numactive = RefCell :: new ( iterators. len ( ) ) ;
995
+ let numactive = Cell :: new ( iterators. len ( ) ) ;
996
996
997
997
PyItertoolsZiplongest {
998
998
iterators,
@@ -1007,14 +1007,16 @@ impl PyItertoolsZiplongest {
1007
1007
if self . iterators . is_empty ( ) {
1008
1008
Err ( new_stop_iteration ( vm) )
1009
1009
} else {
1010
- let mut next_obj: PyObjectRef ;
1011
1010
let mut result: Vec < PyObjectRef > = Vec :: new ( ) ;
1012
- let mut numactive = self . numactive . clone ( ) . into_inner ( ) ;
1011
+ let mut numactive = self . numactive . get ( ) ;
1013
1012
1014
1013
for idx in 0 ..self . iterators . len ( ) {
1015
- next_obj = match call_next ( vm, & self . iterators [ idx] ) {
1014
+ let next_obj = match call_next ( vm, & self . iterators [ idx] ) {
1016
1015
Ok ( obj) => obj,
1017
- Err ( _) => {
1016
+ Err ( err) => {
1017
+ if !objtype:: isinstance ( & err, & vm. ctx . exceptions . stop_iteration ) {
1018
+ return Err ( err) ;
1019
+ }
1018
1020
numactive -= 1 ;
1019
1021
if numactive == 0 {
1020
1022
return Err ( new_stop_iteration ( vm) ) ;
0 commit comments