@@ -16,8 +16,9 @@ mod decl {
16
16
} ,
17
17
convert:: ToPyObject ,
18
18
function:: { ArgCallable , ArgIntoBool , FuncArgs , OptionalArg , OptionalOption , PosArgs } ,
19
- handle_pyiter_return , identifier<
10000
span class="pl-kos">,
19
+ identifier,
20
20
protocol:: { PyIter , PyIterReturn , PyNumber } ,
21
+ raise_stop,
21
22
stdlib:: sys,
22
23
types:: { Constructor , IterNext , Iterable , Representable , SelfIter } ,
23
24
} ;
@@ -216,7 +217,7 @@ mod decl {
216
217
impl IterNext for PyItertoolsCompress {
217
218
fn next ( zelf : & Py < Self > , vm : & VirtualMachine ) -> PyResult < PyIterReturn > {
218
219
loop {
219
- let sel_obj = handle_pyiter_return ! ( zelf. selectors. next( vm) ?) ;
220
+ let sel_obj = raise_stop ! ( zelf. selectors. next( vm) ?) ;
220
221
let verdict = sel_obj. clone ( ) . try_to_bool ( vm) ?;
221
222
let data_obj = zelf. data . next ( vm) ?;
222
223
@@ -567,7 +568,7 @@ mod decl {
567
568
}
568
569
569
570
// might be StopIteration or anything else, which is propagated upwards
570
- let obj = handle_pyiter_return ! ( zelf. iterable. next( vm) ?) ;
571
+ let obj = raise_stop ! ( zelf. iterable. next( vm) ?) ;
571
572
let predicate = & zelf. predicate ;
572
573
573
574
let verdict = predicate. call ( ( obj. clone ( ) , ) , vm) ?;
@@ -652,7 +653,7 @@ mod decl {
652
653
653
654
if !zelf. start_flag . load ( ) {
654
655
loop {
655
- let obj = handle_pyiter_return ! ( iterable. next( vm) ?) ;
656
+ let obj = raise_stop ! ( iterable. next( vm) ?) ;
656
657
let pred = predicate. clone ( ) ;
657
658
let pred_value = pred. invoke ( ( obj. clone ( ) , ) , vm) ?;
658
659
if !pred_value. try_to_bool ( vm) ? {
@@ -746,7 +747,7 @@ mod decl {
746
747
& self ,
747
748
vm : & VirtualMachine ,
748
749
) -> PyResult < PyIterReturn < ( PyObjectRef , PyObjectRef ) > > {
749
- let new_value = handle_pyiter_return ! ( self . iterable. next( vm) ?) ;
750
+ let new_value = raise_stop ! ( self . iterable. next( vm) ?) ;
750
751
let new_key = if let Some ( ref kf) = self . key_func {
751
752
kf. call ( ( new_value. clone ( ) , ) , vm) ?
752
753
} else {
@@ -770,13 +771,13 @@ mod decl {
770
771
771
772
let ( value, key) = if let Some ( old_key) = current_key {
772
773
loop {
773
- let ( value, new_key) = handle_pyiter_return ! ( zelf. advance( vm) ?) ;
774
+ let ( value, new_key) = raise_stop ! ( zelf. advance( vm) ?) ;
774
775
if !vm. bool_eq ( & new_key, & old_key) ? {
775
776
break ( value, new_key) ;
776
777
}
777
778
}
778
779
} else {
779
- handle_pyiter_return ! ( zelf. advance( vm) ?)
780
+ raise_stop ! ( zelf. advance( vm) ?)
780
781
} ;
781
782
782
783
state = zelf. state . lock ( ) ;
@@ -826,7 +827,7 @@ mod decl {
826
827
827
828
state. current_key . as_ref ( ) . unwrap ( ) . clone ( )
828
829
} ;
829
- let ( value, key) = handle_pyiter_return ! ( zelf. groupby. advance( vm) ?) ;
830
+ let ( value, key) = raise_stop ! ( zelf. groupby. advance( vm) ?) ;
830
831
if vm. bool_eq ( & key, & old_key) ? {
831
832
Ok ( PyIterReturn :: Return ( value) )
832
833
} else {
@@ -985,7 +986,7 @@ mod decl {
985
986
}
986
987
}
987
988
988
- let obj = handle_pyiter_return ! ( zelf. iterable. next( vm) ?) ;
989
+ let obj = raise_stop ! ( zelf. iterable. next( vm) ?) ;
989
990
zelf. cur . fetch_add ( 1 ) ;
990
991
991
992
// TODO is this overflow check required? attempts to copy CPython.
@@ -1051,7 +1052,7 @@ mod decl {
1051
1052
let iterable = & zelf. iterable ;
1052
1053
1053
1054
loop {
1054
- let obj = handle_pyiter_return ! ( iterable. next( vm) ?) ;
1055
+ let obj = raise_stop ! ( iterable. next( vm) ?) ;
1055
1056
let pred_value = if vm. is_none ( predicate) {
1056
1057
obj. clone ( )
1057
1058
} else {
@@ -1163,11 +1164,11 @@ mod decl {
1163
1164
1164
1165
let next_acc_value = match acc_value {
1165
1166
None => match & zelf. initial {
1166
- None => handle_pyiter_return ! ( iterable. next( vm) ?) ,
1167
+ None => raise_stop ! ( iterable. next( vm) ?) ,
1167
1168
Some ( obj) => obj. clone ( ) ,
1168
1169
} ,
1169
1170
Some ( value) => {
1170
- let obj = handle_pyiter_return ! ( iterable. next( vm) ?) ;
1171
+ let obj = raise_stop ! ( iterable. next( vm) ?) ;
1171
1172
match & zelf. bin_op {
1172
1173
None => vm. _add ( & value, & obj) ?,
1173
1174
Some ( op) => op. call ( ( value, obj) , vm) ?,
@@ -1196,7 +1197,7 @@ mod decl {
1196
1197
1197
1198
fn get_item ( & self , vm : & VirtualMachine , index : usize ) -> PyResult < PyIterReturn > {
1198
1199
if self . values . read ( ) . len ( ) == index {
1199
- let result = handle_pyiter_return ! ( self . iterable. next( vm) ?) ;
1200
+ let result = raise_stop ! ( self . iterable. next( vm) ?) ;
1200
1201
self . values . write ( ) . push ( result) ;
1201
1202
}
1202
1203
Ok ( PyIterReturn :: Return ( self . values . read ( ) [ index] . clone ( ) ) )
@@ -1272,7 +1273,7 @@ mod decl {
1272
1273
impl SelfIter for PyItertoolsTee { }
1273
1274
impl IterNext for PyItertoolsTee {
1274
1275
fn next ( zelf : & Py < Self > , vm : & VirtualMachine ) -> PyResult < PyIterReturn > {
1275
- let value = handle_pyiter_return ! ( zelf. tee_data. get_item( vm, zelf. index. load( ) ) ?) ;
1276
+ let value = raise_stop ! ( zelf. tee_data. get_item( vm, zelf. index. load( ) ) ?) ;
1276
1277
zelf. index . fetch_add ( 1 ) ;
1277
1278
Ok ( PyIterReturn :: Return ( value) )
1278
1279
}
@@ -1929,7 +1930,7 @@ mod decl {
1929
1930
Some ( obj) => obj,
1930
1931
} ;
1931
1932
1932
- let new = handle_pyiter_return ! ( zelf. iterator
5142
. next( vm) ?) ;
1933
+ let new = raise_stop ! ( zelf. iterator. next( vm) ?) ;
1933
1934
* zelf. old . write ( ) = Some ( new. clone ( ) ) ;
1934
1935
1935
1936
Ok ( PyIterReturn :: Return ( vm. new_tuple ( ( old, new) ) . into ( ) ) )
0 commit comments