MCPcopy Index your code
hub / github.com/explodingcamera/tinywasm / exec_mem_store

Method exec_mem_store

crates/tinywasm/src/interpreter/executor.rs:1451–1473  ·  view source on GitHub ↗
(
        &mut self,
        mem_addr: tinywasm_types::MemAddr,
        offset: u64,
        cast: impl Fn(T) -> U,
    )

Source from the content-addressed store, hash-verified

1449 }
1450
1451 fn exec_mem_store<T: InternalValue, U: MemValue<N>, const N: usize>(
1452 &mut self,
1453 mem_addr: tinywasm_types::MemAddr,
1454 offset: u64,
1455 cast: impl Fn(T) -> U,
1456 ) -> Result<(), Trap> {
1457 let val = <T>::stack_pop(&mut self.store.value_stack);
1458 let val = cast(val).to_mem_bytes();
1459
1460 let mem_addr = self.module.resolve_mem_addr(mem_addr);
1461 let mem = self.store.state.get_mem_mut(mem_addr);
1462 let addr = match mem.is_64bit() {
1463 true => <i64>::stack_pop(&mut self.store.value_stack) as u64,
1464 false => <i32>::stack_pop(&mut self.store.value_stack) as u32 as u64,
1465 };
1466 match mem.store(addr, offset, val) {
1467 Ok(()) => Ok(()),
1468 Err(e) => {
1469 cold_path();
1470 Err(e)
1471 }
1472 }
1473 }
1474
1475 fn exec_table_get(&mut self, table_index: u32) -> Result<(), Trap> {
1476 let idx: i32 = <i32>::stack_pop(&mut self.store.value_stack);

Callers

nothing calls this directly

Calls 5

to_mem_bytesMethod · 0.80
resolve_mem_addrMethod · 0.80
get_mem_mutMethod · 0.80
is_64bitMethod · 0.80
storeMethod · 0.45

Tested by

no test coverage detected