diff --git a/vm/src/builtins/descriptor.rs b/vm/src/builtins/descriptor.rs index 16340c3a62..408b0efc84 100644 --- a/vm/src/builtins/descriptor.rs +++ b/vm/src/builtins/descriptor.rs @@ -320,10 +320,13 @@ fn set_slot_at_object( PySetterValue::Delete => obj.set_slot(offset, None), }; } - MemberKind::ObjectEx => match value { - PySetterValue::Assign(v) => obj.set_slot(offset, Some(v)), - PySetterValue::Delete => obj.set_slot(offset, None), - }, + MemberKind::ObjectEx => { + let value = match value { + PySetterValue::Assign(v) => Some(v), + PySetterValue::Delete => None, + }; + obj.set_slot(offset, value); + } } Ok(()) diff --git a/vm/src/builtins/type.rs b/vm/src/builtins/type.rs index 296afff17c..15df5ff3c5 100644 --- a/vm/src/builtins/type.rs +++ b/vm/src/builtins/type.rs @@ -934,9 +934,14 @@ impl Constructor for PyType { None }; - let base_member_count = base.slots.member_count; - let member_count: usize = - base.slots.member_count + heaptype_slots.as_ref().map(|x| x.len()).unwrap_or(0); + // FIXME: this is a temporary fix. multi bases with multiple slots will break object + let base_member_count = bases + .iter() + .map(|base| base.slots.member_count) + .max() + .unwrap(); + let heaptype_member_count = heaptype_slots.as_ref().map(|x| x.len()).unwrap_or(0); + let member_count: usize = base_member_count + heaptype_member_count; let flags = PyTypeFlags::heap_type_flags() | PyTypeFlags::HAS_DICT; let (slots, heaptype_ext) = {