@@ -600,18 +600,55 @@ impl InterfaceGenerator<'_> {
600600 }
601601
602602 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_) ;
603630
604631 // Generate the core wasm abi
605- {
606- let wasm_sig = self . resolve . wasm_signature (
607- if async_ {
608- AbiVariant :: GuestImportAsync
609- } else {
610- AbiVariant :: GuestImport
611- } ,
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 ,
612648 func,
613- ) ;
614-
649+ } ,
650+ ) ;
651+ {
615652 let result_type = match & wasm_sig. results [ ..] {
616653 [ ] => "" . into ( ) ,
617654 [ result] => format ! ( "-> {}" , wasm_type( * result) ) ,
@@ -626,18 +663,6 @@ impl InterfaceGenerator<'_> {
626663 . collect :: < Vec < _ > > ( )
627664 . join ( ", " ) ;
628665
629- let ( import_module, import_name) = self . resolve . wasm_import_name (
630- ManglingAndAbi :: Legacy ( if async_ {
631- LiftLowerAbi :: AsyncCallback
632- } else {
633- LiftLowerAbi :: Sync
634- } ) ,
635- WasmImport :: Func {
636- interface : self . interface ,
637- func,
638- } ,
639- ) ;
640-
641666 uwriteln ! (
642667 self . ffi,
643668 r#"
@@ -648,52 +673,25 @@ impl InterfaceGenerator<'_> {
648673
649674 // Generate the MoonBit wrapper
650675 if async_ {
651- // self.r#generation_futures_and_streams_import("", func, &import_module);
652- // if async_ {
653- // src = self.r#generate_async_import_function(func, mbt_sig, &wasm_sig);
654- // }
655- todo ! ( "async import not supported yet" ) ;
656- } else {
657- let mut bindgen = FunctionBindgen :: new (
658- self ,
659- func. params
660- . iter ( )
661- . map ( |Param { name, .. } | name. to_moonbit_ident ( ) )
662- . collect ( ) ,
663- ) ;
664-
665- abi:: call (
666- bindgen. interface_gen . resolve ,
667- AbiVariant :: GuestImport ,
668- LiftLower :: LowerArgsLiftResults ,
669- func,
670- & mut bindgen,
671- false ,
672- ) ;
673-
674- let src = bindgen. src . clone ( ) ;
675-
676- let cleanup_list = if bindgen. needs_cleanup_list {
677- "let cleanup_list : Array[Int] = []"
678- } else {
679- ""
676+ let interface_name = match self . interface {
677+ Some ( key) => self . resolve . name_world_key ( key) ,
678+ None => "$root" . into ( ) ,
680679 } ;
680+ self . generation_futures_and_streams_import ( "" , func, & interface_name) ;
681+ src = self . generate_async_import_function ( func, mbt_sig, & wasm_sig) ;
682+ }
681683
682- let mbt_sig = self . world_gen . pkg_resolver . mbt_sig ( self . name , func, false ) ;
683- let sig = self . sig_string ( & mbt_sig, async_) ;
684-
685- print_docs ( & mut self . src , & func. docs ) ;
684+ print_docs ( & mut self . src , & func. docs ) ;
686685
687- uwrite ! (
688- self . src,
689- r#"
690- {sig} {{
691- {cleanup_list}
692- {src}
693- }}
694- "#
695- ) ;
696- }
686+ uwrite ! (
687+ self . src,
688+ r#"
689+ {sig} {{
690+ {cleanup_list}
691+ {src}
692+ }}
693+ "#
694+ ) ;
697695 }
698696
699697 fn export ( & mut self , func : & Function ) {
0 commit comments