MCPcopy Create free account
hub / github.com/bytecodealliance/wit-bindgen / import

Method import

crates/moonbit/src/lib.rs:591–695  ·  view source on GitHub ↗
(&mut self, func: &Function)

Source from the content-addressed store, hash-verified

589 }
590
591 fn import(&mut self, func: &Function) {
592 // Determine if the function is async
593 let async_ = self
594 .world_gen
595 .opts
596 .async_
597 .is_async(self.resolve, self.interface, func, false);
598 if async_ {
599 self.world_gen.async_support.mark_async();
600 }
601
602 let ffi_import_name = format!("wasmImport{}", func.name.to_upper_camel_case());
603 let mut bindgen = FunctionBindgen::new(
604 self,
605 func.params
606 .iter()
607 .map(|Param { name, .. }| name.to_moonbit_ident())
608 .collect(),
609 );
610
611 abi::call(
612 bindgen.interface_gen.resolve,
613 AbiVariant::GuestImport,
614 LiftLower::LowerArgsLiftResults,
615 func,
616 &mut bindgen,
617 false,
618 );
619
620 let mut src = bindgen.src.clone();
621
622 let cleanup_list = if bindgen.needs_cleanup_list {
623 "let cleanup_list : Array[Int] = []"
624 } else {
625 ""
626 };
627
628 let mbt_sig = self.world_gen.pkg_resolver.mbt_sig(self.name, func, false);
629 let sig = self.sig_string(&mbt_sig, async_);
630
631 // Generate the core wasm abi
632 let wasm_sig = self.resolve.wasm_signature(
633 if async_ {
634 AbiVariant::GuestImportAsync
635 } else {
636 AbiVariant::GuestImport
637 },
638 func,
639 );
640 let (import_module, import_name) = self.resolve.wasm_import_name(
641 ManglingAndAbi::Legacy(if async_ {
642 LiftLowerAbi::AsyncCallback
643 } else {
644 LiftLowerAbi::Sync
645 }),
646 WasmImport::Func {
647 interface: self.interface,
648 func,

Callers 2

import_interfaceMethod · 0.45
import_funcsMethod · 0.45

Calls 14

newFunction · 0.85
callFunction · 0.85
print_docsFunction · 0.85
mark_asyncMethod · 0.80
collectMethod · 0.80
mapMethod · 0.80
to_moonbit_identMethod · 0.80
mbt_sigMethod · 0.80
joinMethod · 0.80
is_asyncMethod · 0.45

Tested by

no test coverage detected