@@ -537,7 +537,7 @@ macro_rules! {macro_name} {{
537537 let align = align. align_wasm32 ( ) ;
538538 let ( lower, lift) = if let Some ( payload_type) = payload_type {
539539 let lower =
540- self . lower_to_memory ( "address" , "value" , & payload_type, & module) ;
540+ self . lower_to_memory ( "address" , "& value" , & payload_type, & module) ;
541541 let lift =
542542 self . lift_from_memory ( "address" , "value" , & payload_type, & module) ;
543543 ( lower, lift)
@@ -617,6 +617,40 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
617617 }}
618618 }}
619619
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+
620654 fn close_writable(writer: u32) {{
621655 #[cfg(not(target_arch = "wasm32"))]
622656 {{
@@ -686,9 +720,9 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
686720 )
687721 } else {
688722 let address = format ! (
689- "let address = {alloc}::alloc\
723+ "let address = unsafe {{ {alloc}::alloc\
690724 ({alloc}::Layout::from_size_align_unchecked\
691- ({size} * values.len(), {align}));"
725+ ({size} * values.len(), {align})) }} ;"
692726 ) ;
693727 let lower = self . lower_to_memory (
694728 "address" ,
@@ -699,7 +733,7 @@ impl {stream_and_future_support}::FuturePayload for {name} {{
699733 let lower = format ! (
700734 r#"
701735for (index, value) in values.iter().enumerate() {{
702- let address = address + (index * size) ;
736+ let address = unsafe {{ address.add (index * { size}) }} ;
703737 {lower}
704738}}
705739 "#
@@ -712,10 +746,10 @@ for (index, value) in values.iter().enumerate() {{
712746 ) ;
713747 let lift = format ! (
714748 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}) }} ;
717751 {lift}
718- * dst = value;
752+ dst.write( value) ;
719753}}
720754 "#
721755 ) ;
@@ -793,6 +827,40 @@ impl {stream_and_future_support}::StreamPayload for {name} {{
793827 }}
794828 }}
795829
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+
796864 fn close_writable(writer: u32) {{
797865 #[cfg(not(target_arch = "wasm32"))]
798866 {{
0 commit comments