@@ -4,12 +4,12 @@ use std::mem;
44use std:: ptr:: NonNull ;
55use std:: time:: SystemTime ;
66
7- use color_eyre:: eyre:: { self , bail , eyre , ContextCompat } ;
7+ use color_eyre:: eyre:: { self , ContextCompat , bail , eyre } ;
88use strum:: EnumTryAs ;
99
1010use crate :: class:: { Class , Method } ;
11- use crate :: class_file:: constant_pool:: { self , ConstantInfo } ;
1211use crate :: class_file:: MethodAccessFlags ;
12+ use crate :: class_file:: constant_pool:: { self , ConstantInfo } ;
1313use crate :: descriptor:: { BaseType , FieldType } ;
1414use crate :: instructions:: {
1515 ArrayLoadStoreType , ArrayType , Condition , Instruction , InvokeKind , LoadStoreType , NumberType ,
@@ -79,23 +79,26 @@ impl RefTypeHeader {
7979 Ok ( unsafe { std:: slice:: from_raw_parts_mut ( data_ptr, length) } )
8080 }
8181
82- unsafe fn object_data < ' a > ( & mut self ) -> eyre:: Result < & ' a mut [ JvmValue ] > {
83- let target_class = match self {
84- Self :: Object ( object) => object. class ,
85- Self :: Array ( _) => bail ! ( "expected an object" ) ,
86- } ;
82+ unsafe fn object_data < ' a > ( & mut self ) -> eyre:: Result < & ' a mut [ JvmValue < ' _ > ] > {
83+ unsafe {
84+ let target_class = match self {
85+ Self :: Object ( object) => object. class ,
86+ Self :: Array ( _) => bail ! ( "expected an object" ) ,
87+ } ;
8788
88- let fields_layout = Layout :: array :: < JvmValue > ( ( * target_class. as_ptr ( ) ) . fields ( ) . len ( ) ) ?;
89- let ( object_layout, _) = Layout :: new :: < RefTypeHeader > ( ) . extend ( fields_layout) ?;
89+ let fields_layout = Layout :: array :: < JvmValue > ( ( * target_class. as_ptr ( ) ) . fields ( ) . len ( ) ) ?;
90+ let ( object_layout, _) = Layout :: new :: < RefTypeHeader > ( ) . extend ( fields_layout) ?;
9091
91- let offset = object_layout. size ( ) - fields_layout. size ( ) ;
92+ let offset = object_layout. size ( ) - fields_layout. size ( ) ;
9293
93- let header_ptr = self as * mut RefTypeHeader ;
94- let data_ptr = ( header_ptr as usize + offset) as * mut JvmValue ;
94+ let header_ptr = self as * mut RefTypeHeader ;
95+ let data_ptr = ( header_ptr as usize + offset) as * mut JvmValue ;
9596
96- Ok ( unsafe {
97- std:: slice:: from_raw_parts_mut ( data_ptr, ( * target_class. as_ptr ( ) ) . fields ( ) . len ( ) )
98- } )
97+ Ok ( std:: slice:: from_raw_parts_mut (
98+ data_ptr,
99+ ( * target_class. as_ptr ( ) ) . fields ( ) . len ( ) ,
100+ ) )
101+ }
99102 }
100103}
101104
@@ -162,7 +165,7 @@ impl<'a, 'b> CallFrame<'a, 'b> {
162165 ReturnType :: Int => {
163166 return Ok ( Some (
164167 self . operand_stack . pop ( ) . wrap_err ( "missing return value" ) ?,
165- ) )
168+ ) ) ;
166169 }
167170 ReturnType :: Long => todo ! ( ) ,
168171 ReturnType :: Float => todo ! ( ) ,
0 commit comments