@@ -483,6 +483,8 @@ macro_rules! {macro_name} {{
483
483
}
484
484
485
485
fn generate_payloads ( & mut self , prefix : & str , func : & Function , interface : Option < & WorldKey > ) {
486
+ let old_identifier = mem:: replace ( & mut self . identifier , Identifier :: StreamOrFuturePayload ) ;
487
+
486
488
for ( index, ty) in func
487
489
. find_futures_and_streams ( self . resolve )
488
490
. into_iter ( )
@@ -500,7 +502,7 @@ macro_rules! {macro_name} {{
500
502
match & self . resolve . types [ ty] . kind {
501
503
TypeDefKind :: Future ( payload_type) => {
502
504
let name = if let Some ( payload_type) = payload_type {
503
- self . full_type_name_owned ( payload_type, Identifier :: StreamOrFuturePayload )
505
+ self . type_name_owned ( payload_type)
504
506
} else {
505
507
"()" . into ( )
506
508
} ;
@@ -533,7 +535,7 @@ macro_rules! {macro_name} {{
533
535
( String :: new ( ) , "let value = ();\n " . into ( ) )
534
536
} ;
535
537
536
- let box_ = format ! ( "super::super::{}" , self . path_to_box( ) ) ;
538
+ let box_ = self . path_to_box ( ) ;
537
539
let code = format ! (
538
540
r#"
539
541
#[doc(hidden)]
@@ -545,7 +547,7 @@ pub mod vtable{ordinal} {{
545
547
}}
546
548
547
549
#[cfg(target_arch = "wasm32")]
548
- {{
550
+ {box_}::pin(async move { {
549
551
#[repr(align({align}))]
550
552
struct Buffer([::core::mem::MaybeUninit::<u8>; {size}]);
551
553
let mut buffer = Buffer([::core::mem::MaybeUninit::uninit(); {size}]);
@@ -558,10 +560,8 @@ pub mod vtable{ordinal} {{
558
560
fn wit_import(_: u32, _: *mut u8) -> u32;
559
561
}}
560
562
561
- {box_}::pin(async move {{
562
- unsafe {{ {async_support}::await_future_result(wit_import, future, address).await }}
563
- }})
564
- }}
563
+ unsafe {{ {async_support}::await_future_result(wit_import, future, address).await }}
564
+ }})
565
565
}}
566
566
567
567
fn read(future: u32) -> ::core::pin::Pin<{box_}<dyn ::core::future::Future<Output = Option<{name}>>>> {{
@@ -571,7 +571,7 @@ pub mod vtable{ordinal} {{
571
571
}}
572
572
573
573
#[cfg(target_arch = "wasm32")]
574
- {{
574
+ {box_}::pin(async move { {
575
575
struct Buffer([::core::mem::MaybeUninit::<u8>; {size}]);
576
576
let mut buffer = Buffer([::core::mem::MaybeUninit::uninit(); {size}]);
577
577
let address = buffer.0.as_mut_ptr() as *mut u8;
@@ -582,15 +582,13 @@ pub mod vtable{ordinal} {{
582
582
fn wit_import(_: u32, _: *mut u8) -> u32;
583
583
}}
584
584
585
- {box_}::pin(async move {{
586
- if unsafe {{ {async_support}::await_future_result(wit_import, future, address).await }} {{
587
- {lift}
588
- Some(value)
589
- }} else {{
590
- None
591
- }}
592
- }})
593
- }}
585
+ if unsafe {{ {async_support}::await_future_result(wit_import, future, address).await }} {{
586
+ {lift}
587
+ Some(value)
588
+ }} else {{
589
+ None
590
+ }}
591
+ }})
594
592
}}
595
593
596
594
fn cancel_write(writer: u32) {{
@@ -691,8 +689,7 @@ pub mod vtable{ordinal} {{
691
689
}
692
690
}
693
691
TypeDefKind :: Stream ( payload_type) => {
694
- let name =
695
- self . full_type_name_owned ( payload_type, Identifier :: StreamOrFuturePayload ) ;
692
+ let name = self . type_name_owned ( payload_type) ;
696
693
697
694
if !self . gen . stream_payloads . contains_key ( & name) {
698
695
let ordinal = self . gen . stream_payloads . len ( ) ;
@@ -747,19 +744,19 @@ for (index, dst) in values.iter_mut().take(count).enumerate() {{
747
744
( address. clone ( ) , lower, address, lift)
748
745
} ;
749
746
750
- let box_ = format ! ( "super::super::{}" , self . path_to_box( ) ) ;
747
+ let box_ = self . path_to_box ( ) ;
751
748
let code = format ! (
752
749
r#"
753
750
#[doc(hidden)]
754
751
pub mod vtable{ordinal} {{
755
- fn write(stream: u32, values: &[{name}]) -> ::core::pin::Pin<{box_}<dyn ::core::future::Future<Output = Option<usize>>>> {{
752
+ fn write(stream: u32, values: &[{name}]) -> ::core::pin::Pin<{box_}<dyn ::core::future::Future<Output = Option<usize>> + '_ >> {{
756
753
#[cfg(not(target_arch = "wasm32"))]
757
754
{{
758
755
unreachable!();
759
756
}}
760
757
761
758
#[cfg(target_arch = "wasm32")]
762
- {{
759
+ {box_}::pin(async move { {
763
760
{lower_address}
764
761
{lower}
765
762
@@ -769,27 +766,25 @@ pub mod vtable{ordinal} {{
769
766
fn wit_import(_: u32, _: *mut u8, _: u32) -> u32;
770
767
}}
771
768
772
- {box_}::pin(async move {{
773
- unsafe {{
774
- {async_support}::await_stream_result(
775
- wit_import,
776
- stream,
777
- address,
778
- u32::try_from(values.len()).unwrap()
779
- ).await
780
- }}
781
- }})
782
- }}
769
+ unsafe {{
770
+ {async_support}::await_stream_result(
771
+ wit_import,
772
+ stream,
773
+ address,
774
+ u32::try_from(values.len()).unwrap()
775
+ ).await
776
+ }}
777
+ }})
783
778
}}
784
779
785
- fn read(stream: u32, values: &mut [::core::mem::MaybeUninit::<{name}>]) -> ::core::pin::Pin<{box_}<dyn ::core::future::Future<Output = Option<usize>>>> {{
780
+ fn read(stream: u32, values: &mut [::core::mem::MaybeUninit::<{name}>]) -> ::core::pin::Pin<{box_}<dyn ::core::future::Future<Output = Option<usize>> + '_ >> {{
786
781
#[cfg(not(target_arch = "wasm32"))]
787
782
{{
788
783
unreachable!();
789
784
}}
790
785
791
786
#[cfg(target_arch = "wasm32")]
792
- {{
787
+ {box_}::pin(async move { {
793
788
{lift_address}
794
789
795
790
#[link(wasm_import_module = "{module}")]
@@ -798,22 +793,20 @@ pub mod vtable{ordinal} {{
798
793
fn wit_import(_: u32, _: *mut u8, _: u32) -> u32;
799
794
}}
800
795
801
- {box_}::pin(async move {{
802
- let count = unsafe {{
803
- {async_support}::await_stream_result(
804
- wit_import,
805
- stream,
806
- address,
807
- u32::try_from(values.len()).unwrap()
808
- ).await
809
- }};
810
- #[allow(unused)]
811
- if let Some(count) = count {{
812
- {lift}
813
- }}
814
- count
815
- }})
816
- }}
796
+ let count = unsafe {{
797
+ {async_support}::await_stream_result(
798
+ wit_import,
799
+ stream,
800
+ address,
801
+ u32::try_from(values.len()).unwrap()
802
+ ).await
803
+ }};
804
+ #[allow(unused)]
805
+ if let Some(count) = count {{
806
+ {lift}
807
+ }}
808
+ count
809
+ }})
817
810
}}
818
811
819
812
fn cancel_write(writer: u32) {{
@@ -916,6 +909,8 @@ pub mod vtable{ordinal} {{
916
909
_ => unreachable ! ( ) ,
917
910
}
918
911
}
912
+
913
+ self . identifier = old_identifier;
919
914
}
920
915
921
916
fn generate_guest_import ( & mut self , func : & Function , interface : Option < & WorldKey > ) {
@@ -1699,25 +1694,24 @@ pub mod vtable{ordinal} {{
1699
1694
}
1700
1695
}
1701
1696
1702
- pub ( crate ) fn full_type_name_owned ( & mut self , ty : & Type , id : Identifier < ' i > ) -> String {
1703
- self . full_type_name (
1697
+ pub ( crate ) fn type_name_owned_with_id ( & mut self , ty : & Type , id : Identifier < ' i > ) -> String {
1698
+ let old_identifier = mem:: replace ( & mut self . identifier , id) ;
1699
+ let name = self . type_name_owned ( ty) ;
1700
+ self . identifier = old_identifier;
1701
+ name
1702
+ }
1703
+
1704
+ fn type_name_owned ( & mut self , ty : & Type ) -> String {
1705
+ self . type_name (
1704
1706
ty,
1705
1707
TypeMode {
1706
1708
lifetime : None ,
1707
1709
lists_borrowed : false ,
1708
1710
style : TypeOwnershipStyle :: Owned ,
1709
1711
} ,
1710
- id,
1711
1712
)
1712
1713
}
1713
1714
1714
- fn full_type_name ( & mut self , ty : & Type , mode : TypeMode , id : Identifier < ' i > ) -> String {
1715
- let old_identifier = mem:: replace ( & mut self . identifier , id) ;
1716
- let name = self . type_name ( ty, mode) ;
1717
- self . identifier = old_identifier;
1718
- name
1719
- }
1720
-
1721
1715
fn type_name ( & mut self , ty : & Type , mode : TypeMode ) -> String {
1722
1716
let old = mem:: take ( & mut self . src ) ;
1723
1717
self . print_ty ( ty, mode) ;
0 commit comments