@@ -537,7 +537,7 @@ macro_rules! {macro_name} {{
537
537
let align = align. align_wasm32 ( ) ;
538
538
let ( lower, lift) = if let Some ( payload_type) = payload_type {
539
539
let lower =
540
- self . lower_to_memory ( "address" , "value" , & payload_type, & module) ;
540
+ self . lower_to_memory ( "address" , "& value" , & payload_type, & module) ;
541
541
let lift =
542
542
self . lift_from_memory ( "address" , "value" , & payload_type, & module) ;
543
543
( lower, lift)
@@ -617,6 +617,40 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
617
617
}}
618
618
}}
619
619
620
+ fn cancel_write(writer: u32) {{
621
+ #[cfg(not(target_arch = "wasm32"))]
622
+ {{
623
+ unreachable!();
624
+ }}
625
+
626
+ #[cfg(target_arch = "wasm32")]
627
+ {{
628
+ #[link(wasm_import_module = "{module}")]
629
+ extern "C" {{
630
+ #[link_name = "[future-cancel-write-{index}]{func_name}"]
631
+ fn cancel(_: u32) -> u32;
632
+ }}
633
+ unsafe {{ cancel(writer) }};
634
+ }}
635
+ }}
636
+
637
+ fn cancel_read(reader: u32) {{
638
+ #[cfg(not(target_arch = "wasm32"))]
639
+ {{
640
+ unreachable!();
641
+ }}
642
+
643
+ #[cfg(target_arch = "wasm32")]
644
+ {{
645
+ #[link(wasm_import_module = "{module}")]
646
+ extern "C" {{
647
+ #[link_name = "[future-cancel-read-{index}]{func_name}"]
648
+ fn cancel(_: u32) -> u32;
649
+ }}
650
+ unsafe {{ cancel(reader) }};
651
+ }}
652
+ }}
653
+
620
654
fn close_writable(writer: u32) {{
621
655
#[cfg(not(target_arch = "wasm32"))]
622
656
{{
@@ -686,9 +720,9 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
686
720
)
687
721
} else {
688
722
let address = format ! (
689
- "let address = {alloc}::alloc\
723
+ "let address = unsafe {{ {alloc}::alloc\
690
724
({alloc}::Layout::from_size_align_unchecked\
691
- ({size} * values.len(), {align}));"
725
+ ({size} * values.len(), {align})) }} ;"
692
726
) ;
693
727
let lower = self . lower_to_memory (
694
728
"address" ,
@@ -699,7 +733,7 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
699
733
let lower = format ! (
700
734
r#"
701
735
for (index, value) in values.iter().enumerate() {{
702
- let address = address + (index * size) ;
736
+ let address = unsafe {{ address.add (index * { size}) }} ;
703
737
{lower}
704
738
}}
705
739
"#
@@ -712,10 +746,10 @@ for (index, value) in values.iter().enumerate() {{
712
746
) ;
713
747
let lift = format ! (
714
748
r#"
715
- for (index, dst) in values.iter_mut().enumerate() {{
716
- let address = address + (index * size) ;
749
+ for (index, dst) in values.iter_mut().take(count). enumerate() {{
750
+ let address = unsafe {{ address.add (index * { size}) }} ;
717
751
{lift}
718
- * dst = value;
752
+ dst.write( value) ;
719
753
}}
720
754
"#
721
755
) ;
@@ -793,6 +827,40 @@ impl {stream_and_future_support}::StreamPayload for {name} {{
793
827
}}
794
828
}}
795
829
830
+ fn cancel_write(writer: u32) {{
831
+ #[cfg(not(target_arch = "wasm32"))]
832
+ {{
833
+ unreachable!();
834
+ }}
835
+
836
+ #[cfg(target_arch = "wasm32")]
837
+ {{
838
+ #[link(wasm_import_module = "{module}")]
839
+ extern "C" {{
840
+ #[link_name = "[stream-cancel-write-{index}]{func_name}"]
841
+ fn cancel(_: u32) -> u32;
842
+ }}
843
+ unsafe {{ cancel(writer) }};
844
+ }}
845
+ }}
846
+
847
+ fn cancel_read(reader: u32) {{
848
+ #[cfg(not(target_arch = "wasm32"))]
849
+ {{
850
+ unreachable!();
851
+ }}
852
+
853
+ #[cfg(target_arch = "wasm32")]
854
+ {{
855
+ #[link(wasm_import_module = "{module}")]
856
+ extern "C" {{
857
+ #[link_name = "[stream-cancel-read-{index}]{func_name}"]
858
+ fn cancel(_: u32) -> u32;
859
+ }}
860
+ unsafe {{ cancel(reader) }};
861
+ }}
862
+ }}
863
+
796
864
fn close_writable(writer: u32) {{
797
865
#[cfg(not(target_arch = "wasm32"))]
798
866
{{
0 commit comments