(&mut self, func: &Function)
| 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, |
no test coverage detected