Native method registry java.lang.Class wtf
This commit is contained in:
parent
3282694b32
commit
b4c428685f
9 changed files with 987 additions and 40 deletions
|
@ -1,4 +1,5 @@
|
|||
use crate::classfile::{ JavaClassFile, AttributeData };
|
||||
use crate::accessmasks::MethodAccessFlag;
|
||||
use crate::classfile::{ AttributeData, JavaClassFile };
|
||||
use crate::heap_area::{ ObjectReference, FieldValue };
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
|
@ -63,6 +64,10 @@ impl OperandStack {
|
|||
self.push(StackValue::Int(b as i32))
|
||||
}
|
||||
|
||||
FieldValue::Int(i) => {
|
||||
self.push(StackValue::Int(i))
|
||||
}
|
||||
|
||||
_ => {
|
||||
println!("{value:?}");
|
||||
todo!();
|
||||
|
@ -244,11 +249,19 @@ pub struct StackFrame {
|
|||
impl StackFrame {
|
||||
pub fn new(classfile: &JavaClassFile, class_index: usize, method_index: u16, arguments: &[StackValue]) -> Self {
|
||||
let method_info = &classfile.methods[method_index as usize];
|
||||
let code_data = match &method_info.attributes[method_info.code_attribute_index].data {
|
||||
AttributeData::Code(data) => data,
|
||||
_ => unreachable!(),
|
||||
|
||||
let (max_locals, max_stack) = if method_info.access_flags & MethodAccessFlag::Native {
|
||||
(arguments.len(), 1)
|
||||
} else {
|
||||
let code_data = match &method_info.attributes[method_info.code_attribute_index].data {
|
||||
AttributeData::Code(data) => data,
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
(code_data.max_locals as usize, code_data.max_stack)
|
||||
};
|
||||
let mut locals = vec![StackValue::Empty(); code_data.max_locals.into()].into_boxed_slice();
|
||||
|
||||
let mut locals = vec![StackValue::Empty(); max_locals].into_boxed_slice();
|
||||
|
||||
assert!(locals.len() >= arguments.len());
|
||||
|
||||
|
@ -258,7 +271,7 @@ impl StackFrame {
|
|||
|
||||
StackFrame {
|
||||
locals,
|
||||
operand_stack: OperandStack::new(code_data.max_stack),
|
||||
operand_stack: OperandStack::new(max_stack),
|
||||
class_index,
|
||||
method_index,
|
||||
instruction_pointer: 0,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue