MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / store

Method store

crates/wasmtime/src/runtime/component/values.rs:516–676  ·  view source on GitHub ↗

Serialize this value to the heap at the specified memory location.

(
        &self,
        cx: &mut LowerContext<'_, T>,
        ty: InterfaceType,
        offset: usize,
    )

Source from the content-addressed store, hash-verified

514
515 /// Serialize this value to the heap at the specified memory location.
516 pub(crate) fn store<T>(
517 &self,
518 cx: &mut LowerContext<'_, T>,
519 ty: InterfaceType,
520 offset: usize,
521 ) -> Result<()> {
522 debug_assert!(offset % usize::try_from(cx.types.canonical_abi(&ty).align32)? == 0);
523
524 match (ty, self) {
525 (InterfaceType::Bool, Val::Bool(value)) => value.linear_lower_to_memory(cx, ty, offset),
526 (InterfaceType::Bool, _) => unexpected(ty, self),
527 (InterfaceType::U8, Val::U8(value)) => value.linear_lower_to_memory(cx, ty, offset),
528 (InterfaceType::U8, _) => unexpected(ty, self),
529 (InterfaceType::S8, Val::S8(value)) => value.linear_lower_to_memory(cx, ty, offset),
530 (InterfaceType::S8, _) => unexpected(ty, self),
531 (InterfaceType::U16, Val::U16(value)) => value.linear_lower_to_memory(cx, ty, offset),
532 (InterfaceType::U16, _) => unexpected(ty, self),
533 (InterfaceType::S16, Val::S16(value)) => value.linear_lower_to_memory(cx, ty, offset),
534 (InterfaceType::S16, _) => unexpected(ty, self),
535 (InterfaceType::U32, Val::U32(value)) => value.linear_lower_to_memory(cx, ty, offset),
536 (InterfaceType::U32, _) => unexpected(ty, self),
537 (InterfaceType::S32, Val::S32(value)) => value.linear_lower_to_memory(cx, ty, offset),
538 (InterfaceType::S32, _) => unexpected(ty, self),
539 (InterfaceType::U64, Val::U64(value)) => value.linear_lower_to_memory(cx, ty, offset),
540 (InterfaceType::U64, _) => unexpected(ty, self),
541 (InterfaceType::S64, Val::S64(value)) => value.linear_lower_to_memory(cx, ty, offset),
542 (InterfaceType::S64, _) => unexpected(ty, self),
543 (InterfaceType::Float32, Val::Float32(value)) => {
544 value.linear_lower_to_memory(cx, ty, offset)
545 }
546 (InterfaceType::Float32, _) => unexpected(ty, self),
547 (InterfaceType::Float64, Val::Float64(value)) => {
548 value.linear_lower_to_memory(cx, ty, offset)
549 }
550 (InterfaceType::Float64, _) => unexpected(ty, self),
551 (InterfaceType::Char, Val::Char(value)) => value.linear_lower_to_memory(cx, ty, offset),
552 (InterfaceType::Char, _) => unexpected(ty, self),
553 (InterfaceType::String, Val::String(value)) => {
554 value.linear_lower_to_memory(cx, ty, offset)
555 }
556 (InterfaceType::String, _) => unexpected(ty, self),
557
558 // NB: resources do type-checking when they lower.
559 (InterfaceType::Borrow(_) | InterfaceType::Own(_), Val::Resource(value)) => {
560 value.linear_lower_to_memory(cx, ty, offset)
561 }
562 (InterfaceType::Borrow(_) | InterfaceType::Own(_), _) => unexpected(ty, self),
563 (InterfaceType::List(ty), Val::List(values)) => {
564 let ty = &cx.types[ty];
565 let (ptr, len) = lower_list(cx, ty.element, values)?;
566 // FIXME(#4311): needs memory64 handling
567 *cx.get(offset + 0) = u32::try_from(ptr).unwrap().to_le_bytes();
568 *cx.get(offset + 4) = u32::try_from(len).unwrap().to_le_bytes();
569 Ok(())
570 }
571 (InterfaceType::List(_), _) => unexpected(ty, self),
572 (InterfaceType::Map(ty_idx), Val::Map(values)) => {
573 let map_ty = &cx.types[ty_idx];

Callers 15

interruptMethod · 0.45
wakeMethod · 0.45
link_component_spectestFunction · 0.45
host_page_sizeFunction · 0.45
fd_write_implMethod · 0.45
fd_readMethod · 0.45
fd_seekMethod · 0.45
set_hop_limitMethod · 0.45
set_send_buffer_sizeMethod · 0.45
try_initMethod · 0.45

Calls 15

unexpectedFunction · 0.85
OkFunction · 0.85
lower_mapFunction · 0.85
optionFunction · 0.85
resultFunction · 0.85
flags_to_storageFunction · 0.85
next_field32_sizeMethod · 0.80
lower_listFunction · 0.70
getMethod · 0.45
unwrapMethod · 0.45

Tested by 3

link_component_spectestFunction · 0.36
atomic_wait_notifyFunction · 0.36