Real classes for arrays, initialization order
This commit is contained in:
parent
70a11283db
commit
5cf17d5ca3
4 changed files with 160 additions and 35 deletions
|
@ -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]>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue