Implemented more opcodes and unsafe stuff
This commit is contained in:
parent
dfb6060df9
commit
d38d5b2897
5 changed files with 340 additions and 84 deletions
|
@ -280,12 +280,15 @@ impl ObjectArea {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_reference_class_ref(&self, reference: ObjectReference, class_store: &ClassStore) -> ObjectReference {
|
||||
pub fn get_reference_class_ref(&self, reference: ObjectReference, class_store: &ClassStore) -> ObjectReference {
|
||||
match self.get_entry(reference) {
|
||||
CompartmentEntry::Object(o) => class_store.get_class_objectref_from_index(o.class_index),
|
||||
CompartmentEntry::ReferenceArray(a) => a.class_ref,
|
||||
CompartmentEntry::ByteArray(a) => a.class_ref,
|
||||
_ => unreachable!(),
|
||||
CompartmentEntry::CharArray(a) => a.class_ref,
|
||||
CompartmentEntry::IntArray(a) => a.class_ref,
|
||||
CompartmentEntry::EmptyNext(_) => unreachable!(),
|
||||
CompartmentEntry::EmptyTail() => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -326,6 +329,18 @@ impl ObjectArea {
|
|||
return object;
|
||||
}
|
||||
|
||||
pub fn is_array_reference(&mut self, reference: ObjectReference) -> bool {
|
||||
match self.get_entry(reference) {
|
||||
CompartmentEntry::Object(_) => false,
|
||||
CompartmentEntry::ReferenceArray(_) => true,
|
||||
CompartmentEntry::ByteArray(_) => true,
|
||||
CompartmentEntry::CharArray(_) => true,
|
||||
CompartmentEntry::IntArray(_) => true,
|
||||
CompartmentEntry::EmptyNext(_) => true,
|
||||
CompartmentEntry::EmptyTail() => true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_array_length(&self, reference: ObjectReference) -> usize {
|
||||
// TODO: Throw errors
|
||||
match self.get_entry(reference) {
|
||||
|
@ -734,14 +749,14 @@ impl FieldValue {
|
|||
}
|
||||
}
|
||||
|
||||
fn expect_reference(&self) -> ObjectReference {
|
||||
pub fn expect_reference(&self) -> ObjectReference {
|
||||
match self {
|
||||
Self::Reference(r) => *r,
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
fn expect_byte(&self) -> i8 {
|
||||
pub fn expect_byte(&self) -> i8 {
|
||||
match self {
|
||||
Self::Byte(b) => *b,
|
||||
_ => unreachable!()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue