Native Unsafe:: methods, main loading, stuff!
This commit is contained in:
parent
90e244c964
commit
fba596ce5a
8 changed files with 242 additions and 22 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue