temp fix slot member_count

This commit is contained in:
Jeong YunWon
2024-07-29 16:18:38 +09:00
committed by Jeong, YunWon
parent 55f04db6b8
commit 694354e5e6
2 changed files with 15 additions and 7 deletions

View File

@@ -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(())

View File

@@ -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) = {