Skip to content

Commit dccc22d

Browse files
Merge pull request #1493 from HyeockJinKim/issue1490
Fixed to return the mro function
2 parents d3ff1c6 + 594c3bb commit dccc22d

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

tests/snippets/types_snippet.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,28 @@ class D(B, C): pass
6161
assert type in object.__subclasses__()
6262

6363
assert cls.__name__ == 'Cls'
64+
65+
# mro
66+
assert int.mro() == [int, object]
67+
assert bool.mro() == [bool, int, object]
68+
assert object.mro() == [object]
69+
70+
class A:
71+
pass
72+
73+
class B(A):
74+
pass
75+
76+
assert A.mro() == [A, object]
77+
assert B.mro() == [B, A, object]
78+
79+
class AA:
80+
pass
81+
82+
class BB(AA):
83+
pass
84+
85+
class C(B, BB):
86+
pass
87+
88+
assert C.mro() == [C, B, A, BB, AA, object]

vm/src/obj/objtype.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,9 @@ impl PyClassRef {
220220
}
221221

222222
fn type_mro(cls: PyClassRef, vm: &VirtualMachine) -> PyObjectRef {
223-
vm.ctx
224-
.new_list(cls.mro.iter().map(|x| x.clone().into_object()).collect())
223+
let mut mro = vec![cls.clone().into_object()];
224+
mro.extend(cls.mro.iter().map(|x| x.clone().into_object()));
225+
vm.ctx.new_list(mro)
225226
}
226227

227228
/*

0 commit comments

Comments
 (0)