Real classes for arrays, initialization order

This commit is contained in:
vegowotenks 2024-11-14 18:32:25 +01:00
parent 70a11283db
commit 5cf17d5ca3
4 changed files with 160 additions and 35 deletions

View file

@ -273,6 +273,11 @@ impl ObjectArea {
self.get_class_ref_native_class_name(class_ref, class_store)
}
pub fn get_reference_class_index(&self, reference: ObjectReference, class_store: &ClassStore) -> usize {
let class_desc = self.get_reference_native_class_name(reference, class_store);
class_store.class_index_for_type(AbstractTypeDescription::parse_full(class_desc).unwrap()).unwrap()
}
pub fn get_object_class_index(&self, reference: ObjectReference) -> usize {
match self.get_entry(reference) {
CompartmentEntry::Object(o) => o.class_index,
@ -518,6 +523,13 @@ impl ObjectArea {
(array_ref, array_size)
}
pub fn clone_(&mut self, this: ObjectReference) -> ObjectReference {
let clone = self.get_entry(this).clone();
let clone_ref = self.store_entry(clone);
clone_ref
}
}
pub struct ObjectCompartment {
@ -585,7 +597,7 @@ impl DebugTrait for ObjectCompartment {
}
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub enum CompartmentEntry {
Object(HeapObject),
ReferenceArray(ReferenceArray),
@ -596,31 +608,31 @@ pub enum CompartmentEntry {
EmptyTail(), // last empty value
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct CharArray {
class_ref: ObjectReference,
content: Box<[u16]>,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct IntArray {
class_ref: ObjectReference,
content: Box<[i32]>,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct ByteArray {
class_ref: ObjectReference,
content: Box<[i8]>,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct ReferenceArray {
class_ref: ObjectReference,
content: Box<[ObjectReference]>,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct HeapObject {
class_index: usize,
fields: Box<[ObjectField]>,