Skip to content

Commit 9361190

Browse files
committed
Add tests for type.__bases__, fix type.__bases__
1 parent 904959b commit 9361190

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

tests/snippets/types_snippet.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ class D(B, C): pass
4343
assert C.__subclasses__() == [D]
4444
assert D.__subclasses__() == []
4545

46+
assert D.__bases__ == (B, C)
47+
assert A.__bases__ == (object,)
48+
assert B.__bases__ == (A,)
49+
50+
4651
del D
4752

4853
try: # gc sweep is needed here for CPython...

vm/src/obj/objtype.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,12 @@ fn type_new_slot(metatype: PyClassRef, args: PyFuncArgs, vm: &VirtualMachine) ->
297297

298298
let (name, bases, dict): (PyStringRef, PyIterable<PyClassRef>, PyDictRef) = args.bind(vm)?;
299299

300-
let mut bases: Vec<PyClassRef> = bases.iter(vm)?.collect::<Result<Vec<_>, _>>()?;
301-
bases.push(vm.ctx.object());
300+
let bases: Vec<PyClassRef> = bases.iter(vm)?.collect::<Result<Vec<_>, _>>()?;
301+
let bases = if bases.is_empty() {
302+
vec![vm.ctx.object()]
303+
} else {
304+
bases
305+
};
302306

303307
let attributes = dict.to_attributes();
304308

0 commit comments

Comments
 (0)