@@ -2,7 +2,7 @@ use super::{
22 dispatch:: Done ,
33 eval,
44 state:: { mem0_bytes, Ip , Mem0Len , Mem0Ptr , Sp , VmState } ,
5- utils:: { get_value, memory_bytes, offset_ip, resolve_func , set_value, IntoTrapResult as _} ,
5+ utils:: { fetch_func , get_value, memory_bytes, offset_ip, set_value, IntoTrapResult as _} ,
66} ;
77use crate :: {
88 core:: { wasm, UntypedVal } ,
@@ -14,8 +14,12 @@ use crate::{
1414 exec_copy_span_asc,
1515 exec_copy_span_des,
1616 extract_mem0,
17+ fetch_global,
18+ fetch_memory,
19+ resolve_func,
1720 resolve_global,
1821 resolve_indirect_func,
22+ resolve_instance,
1923 resolve_memory,
2024 set_global,
2125 update_instance,
@@ -26,8 +30,8 @@ use crate::{
2630 errors:: { FuelError , MemoryError } ,
2731 func:: FuncEntity ,
2832 instance:: InstanceEntity ,
29- ir,
30- ir :: { Slot , SlotSpan } ,
33+ ir:: { self , Slot , SlotSpan } ,
34+ store :: StoreError ,
3135 TrapCode ,
3236} ;
3337use core:: { cmp, ptr:: NonNull } ;
@@ -139,8 +143,9 @@ pub fn global_get(
139143 instance : NonNull < InstanceEntity > ,
140144) -> Done {
141145 let ( ip, crate :: ir:: decode:: GlobalGet { result, global } ) = unsafe { decode_op ( ip) } ;
142- let global = resolve_global ( instance, global) ;
143- let value = * state. store . inner ( ) . resolve_global ( & global) . get_untyped ( ) ;
146+ let global = fetch_global ( instance, global) ;
147+ let global = resolve_global ( state. store , & global) ;
148+ let value = * global. get_untyped ( ) ;
144149 set_value ( sp, result, value) ;
145150 dispatch ! ( state, ip, sp, mem0, mem0_len, instance)
146151}
@@ -217,19 +222,15 @@ pub fn call_imported(
217222 instance : NonNull < InstanceEntity > ,
218223) -> Done {
219224 let ( caller_ip, crate :: ir:: decode:: CallImported { params, func } ) = unsafe { decode_op ( ip) } ;
220- let func = resolve_func ( instance, func) ;
221- let func = state. store . inner ( ) . resolve_func ( & func) ;
225+ let func = fetch_func ( instance, func) ;
226+ let func = resolve_func ( state. store , & func) ;
222227 let ( callee_ip, sp, mem0, mem0_len, instance) = match func {
223228 FuncEntity :: Wasm ( func) => {
224229 let engine_func = func. func_body ( ) ;
225230 let callee_instance = * func. instance ( ) ;
226231 let ( callee_ip, size) =
227232 compile_or_get_func ! ( state, ip, sp, mem0, mem0_len, instance, engine_func) ;
228- let callee_instance: NonNull < InstanceEntity > = state
229- . store
230- . inner ( )
231- . resolve_instance ( & callee_instance)
232- . into ( ) ;
233+ let callee_instance = resolve_instance ( state. store , & callee_instance) . into ( ) ;
233234 let callee_sp = match state. stack . push_frame (
234235 Some ( caller_ip) ,
235236 callee_ip,
@@ -272,18 +273,15 @@ pub fn call_indirect(
272273 Ok ( func) => func,
273274 Err ( trap) => break_with_trap ! ( trap, state, ip, sp, mem0, mem0_len, instance) ,
274275 } ;
275- let func = state. store . inner ( ) . resolve_func ( & func) ;
276+ let func = resolve_func ( state. store , & func) ;
276277 let ( callee_ip, sp, mem0, mem0_len, instance) = match func {
277278 FuncEntity :: Wasm ( func) => {
278279 let engine_func = func. func_body ( ) ;
279280 let callee_instance = * func. instance ( ) ;
280281 let ( callee_ip, size) =
281282 compile_or_get_func ! ( state, ip, sp, mem0, mem0_len, instance, engine_func) ;
282- let callee_instance: NonNull < InstanceEntity > = state
283- . store
284- . inner ( )
285- . resolve_instance ( & callee_instance)
286- . into ( ) ;
283+ let callee_instance: NonNull < InstanceEntity > =
284+ resolve_instance ( state. store , & callee_instance) . into ( ) ;
287285 let callee_sp = match state. stack . push_frame (
288286 Some ( caller_ip) ,
289287 callee_ip,
@@ -366,8 +364,8 @@ pub fn memory_size(
366364 instance : NonNull < InstanceEntity > ,
367365) -> Done {
368366 let ( ip, crate :: ir:: decode:: MemorySize { memory, result } ) = unsafe { decode_op ( ip) } ;
369- let memory = resolve_memory ( instance, memory) ;
370- let size = state. store . inner ( ) . resolve_memory ( & memory) . size ( ) ;
367+ let memory = fetch_memory ( instance, memory) ;
368+ let size = resolve_memory ( state. store , & memory) . size ( ) ;
371369 set_value ( sp, result, size) ;
372370 dispatch ! ( state, ip, sp, mem0, mem0_len, instance)
373371}
@@ -389,7 +387,7 @@ pub fn memory_grow(
389387 } ,
390388 ) = unsafe { decode_op ( ip) } ;
391389 let delta: u64 = get_value ( delta, sp) ;
392- let memref = resolve_memory ( instance, memory) ;
390+ let memref = fetch_memory ( instance, memory) ;
393391 let mut mem0 = mem0;
394392 let mut mem0_len = mem0_len;
395393 let return_value = match state. store . grow_memory ( & memref, delta) {
@@ -402,18 +400,20 @@ pub fn memory_grow(
402400 }
403401 return_value
404402 }
405- Err ( MemoryError :: OutOfBoundsGrowth | MemoryError :: OutOfSystemMemory ) => {
406- let memory_ty = state. store . inner ( ) . resolve_memory ( & memref) . ty ( ) ;
403+ Err ( StoreError :: External (
404+ MemoryError :: OutOfBoundsAccess | MemoryError :: OutOfSystemMemory ,
405+ ) ) => {
406+ let memory_ty = resolve_memory ( state. store , & memref) . ty ( ) ;
407407 match memory_ty. is_64 ( ) {
408408 true => u64:: MAX ,
409409 false => u64:: from ( u32:: MAX ) ,
410410 }
411411 }
412- Err ( MemoryError :: OutOfFuel { required_fuel } ) => {
412+ Err ( StoreError :: External ( MemoryError :: OutOfFuel { required_fuel } ) ) => {
413413 state. done ( DoneReason :: OutOfFuel { required_fuel } ) ;
414414 return exec_break ! ( ip, sp, mem0, mem0_len, instance) ;
415415 }
416- Err ( MemoryError :: ResourceLimiterDeniedAllocation ) => {
416+ Err ( StoreError :: External ( MemoryError :: ResourceLimiterDeniedAllocation ) ) => {
417417 break_with_trap ! (
418418 TrapCode :: GrowthOperationLimited ,
419419 state,
@@ -424,7 +424,16 @@ pub fn memory_grow(
424424 instance
425425 )
426426 }
427- Err ( error) => panic ! ( "encountered an unexpected error: {error}" ) ,
427+ Err ( StoreError :: Internal ( _error) ) => {
428+ // TODO: we do not want to panic in the executor handlers so we somehow
429+ // want to establish a way to signal to the executor that a panic
430+ // occurred, instead.
431+ todo ! ( )
432+ }
433+ Err ( error) => {
434+ // TODO: see above
435+ panic ! ( "encountered an unexpected error: {error}" )
436+ }
428437 } ;
429438 set_value ( sp, result, return_value) ;
430439 dispatch ! ( state, ip, sp, mem0, mem0_len, instance)
0 commit comments