File tree Expand file tree Collapse file tree 2 files changed +15
-6
lines changed Expand file tree Collapse file tree 2 files changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -1182,8 +1182,6 @@ def test_pairwise(self):
1182
1182
with self .assertRaises (TypeError ):
1183
1183
pairwise (None ) # non-iterable argument
1184
1184
1185
- # TODO: RUSTPYTHON
1186
- @unittest .skip ("TODO: RUSTPYTHON, hangs" )
1187
1185
def test_pairwise_reenter (self ):
1188
1186
def check (reenter_at , expected ):
1189
1187
class I :
@@ -1234,8 +1232,6 @@ def __next__(self):
1234
1232
([5 ], [6 ]),
1235
1233
])
1236
1234
1237
- # TODO: RUSTPYTHON
1238
- @unittest .skip ("TODO: RUSTPYTHON, hangs" )
1239
1235
def test_pairwise_reenter2 (self ):
1240
1236
def check (maxcount , expected ):
1241
1237
class I :
Original file line number Diff line number Diff line change @@ -1922,12 +1922,25 @@ mod decl {
1922
1922
1923
1923
impl IterNext for PyItertoolsPairwise {
1924
1924
fn next ( zelf : & Py < Self > , vm : & VirtualMachine ) -> PyResult < PyIterReturn > {
1925
- let old = match zelf. old . read ( ) . clone ( ) {
1926
- None => handle_pyiter_return ! ( zelf. iterator. next( vm) ?) ,
1925
+ let old_clone = {
1926
+ let guard = zelf. old . read ( ) ;
1927
+ guard. clone ( )
1928
+ } ;
A0F0
1929
+ let old = match old_clone {
1930
+ None => match zelf. iterator . next ( vm) ? {
1931
+ PyIterReturn :: Return ( obj) => {
1932
+ // Needed for when we reenter
1933
+ * zelf. old . write ( ) = Some ( obj. clone ( ) ) ;
1934
+ obj
1935
+ }
1936
+ PyIterReturn :: StopIteration ( v) => return Ok ( PyIterReturn :: StopIteration ( v) ) ,
1937
+ } ,
1927
1938
Some ( obj) => obj,
1928
1939
} ;
1940
+
1929
1941
let new = handle_pyiter_return ! ( zelf. iterator. next( vm) ?) ;
1930
1942
* zelf. old . write ( ) = Some ( new. clone ( ) ) ;
1943
+
1931
1944
Ok ( PyIterReturn :: Return ( vm. new_tuple ( ( old, new) ) . into ( ) ) )
1932
1945
}
1933
1946
}
You can’t perform that action at this time.
0 commit comments