Skip to content

Commit e9d3406

Browse files
committed
Fix test_infinite_recursion_via_bases_tuple, test_infinite_cycle_in_bases
1 parent b0d5155 commit e9d3406

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Lib/test/test_isinstance.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,6 @@ def __bases__(self):
316316
self.assertRaises(RecursionError, issubclass, int, X())
317317
self.assertRaises(RecursionError, isinstance, 1, X())
318318

319-
@unittest.skip("TODO: RUSTPYTHON")
320319
def test_infinite_recursion_via_bases_tuple(self):
321320
"""Regression test for bpo-30570."""
322321
class Failure(object):
@@ -326,7 +325,6 @@ def __getattr__(self, attr):
326325
with self.assertRaises(RecursionError):
327326
issubclass(Failure(), int)
328327

329-
@unittest.skip("TODO: RUSTPYTHON")
330328
def test_infinite_cycle_in_bases(self):
331329
"""Regression test for bpo-30570."""
332330
class X:

vm/src/protocol/object.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -382,9 +382,17 @@ impl PyObject {
382382
continue;
383383
}
384384
_ => {
385-
for i in 0..n {
386-
if let Ok(true) = tuple.fast_getitem(i).abstract_issubclass(cls, vm) {
387-
return Ok(true);
385+
if let Some(i) = (0..n).next() {
386+
match vm.with_recursion("in abstract_issubclass", || {
387+
tuple.fast_getitem(i).abstract_issubclass(cls, vm)
388+
}) {
389+
Ok(true) => {
390+
return Ok(true);
391+
}
392+
Err(err) => {
393+
return Err(err);
394+
}
395+
_ => continue,
388396
}
389397
}
390398
}

0 commit comments

Comments
 (0)