Native Unsafe:: methods, main loading, stuff!

This commit is contained in:
vegowotenks 2024-11-19 15:37:28 +01:00
parent 90e244c964
commit fba596ce5a
8 changed files with 242 additions and 22 deletions

View file

@ -223,7 +223,7 @@ impl ObjectArea {
fn make_array(&mut self, class_store: &ClassStore, elements: Box<[ObjectReference]>) -> (ObjectReference, usize) {
assert!(elements.len() != 0);
let array_element_class_name = self.get_reference_native_class_name(elements[0], class_store);
let array_element_type_desc = AbstractTypeDescription::parse_first(array_element_class_name).unwrap().1;
let array_element_type_desc = AbstractTypeDescription::parse_full(array_element_class_name).unwrap();
let (array_object_ref, array_size) = self.make_empty_array(class_store, array_element_type_desc, elements.len());
@ -255,6 +255,23 @@ impl ObjectArea {
return (object_ref, object_size);
}
pub fn class_ref_get_class_index(&self, class_ref: ObjectReference, class_store: &ClassStore) -> usize {
let class_data_ref = match self.get_object_field(class_ref, "classData", self.get_object_class_index(class_ref), class_store).unwrap() {
FieldValue::Reference(r) => r,
_ => unreachable!(),
};
let native_name_index = match self.get_object_field(class_data_ref, "native_class_descriptor_index", self.get_object_class_index(class_data_ref), class_store).unwrap() {
FieldValue::Int(i) => i,
_ => unreachable!(),
};
let native_class_name = class_store.get_native_class_name(native_name_index as usize);
let native_class_index = class_store.class_index_for_type(AbstractTypeDescription::parse_full(native_class_name).unwrap()).unwrap();
return native_class_index;
}
pub fn get_class_ref_native_class_name<'a>(&self, class_ref: ObjectReference, class_store: &'a ClassStore) -> &'a String {
let class_data_ref = match self.get_object_field(class_ref, "classData", self.get_object_class_index(class_ref), class_store).unwrap() {
FieldValue::Reference(r) => r,