@@ -800,31 +800,33 @@ impl<'a, B: Bindgen> Generator<'a, B> {
800800 // ... otherwise if parameters are indirect space is
801801 // allocated from them and each argument is lowered
802802 // individually into memory.
803- let ( size , align ) = self
803+ let info = self
804804 . bindgen
805805 . sizes ( )
806806 . record ( func. params . iter ( ) . map ( |t| & t. 1 ) ) ;
807807 let ptr = match self . variant {
808808 // When a wasm module calls an import it will provide
809809 // space that isn't explicitly deallocated.
810- AbiVariant :: GuestImport => self . bindgen . return_pointer ( size, align) ,
810+ AbiVariant :: GuestImport => self
811+ . bindgen
812+ . return_pointer ( info. size . size_wasm32 ( ) , info. align . align_wasm32 ( ) ) ,
811813 // When calling a wasm module from the outside, though,
812814 // malloc needs to be called.
813815 AbiVariant :: GuestExport => {
814816 self . emit ( & Instruction :: Malloc {
815817 realloc : "cabi_realloc" ,
816- size,
817- align,
818+ size : info . size . size_wasm32 ( ) ,
819+ align : info . align . align_wasm32 ( ) ,
818820 } ) ;
819821 self . stack . pop ( ) . unwrap ( )
820822 }
821823 } ;
822824 let mut offset = 0usize ;
823825 for ( nth, ( _, ty) ) in func. params . iter ( ) . enumerate ( ) {
824826 self . emit ( & Instruction :: GetArg { nth } ) ;
825- offset = align_to ( offset, self . bindgen . sizes ( ) . align ( ty) ) ;
827+ offset = align_to ( offset, self . bindgen . sizes ( ) . align ( ty) . align_wasm32 ( ) ) ;
826828 self . write_to_memory ( ty, ptr. clone ( ) , offset as i32 ) ;
827- offset += self . bindgen . sizes ( ) . size ( ty) ;
829+ offset += self . bindgen . sizes ( ) . size ( ty) . size_wasm32 ( ) ;
828830 }
829831
830832 self . stack . push ( ptr) ;
@@ -833,8 +835,10 @@ impl<'a, B: Bindgen> Generator<'a, B> {
833835 // If necessary we may need to prepare a return pointer for
834836 // this ABI.
835837 if self . variant == AbiVariant :: GuestImport && sig. retptr {
836- let ( size, align) = self . bindgen . sizes ( ) . params ( func. results . iter_types ( ) ) ;
837- let ptr = self . bindgen . return_pointer ( size, align) ;
838+ let info = self . bindgen . sizes ( ) . params ( func. results . iter_types ( ) ) ;
839+ let ptr = self
840+ . bindgen
841+ . return_pointer ( info. size . size_wasm32 ( ) , info. align . align_wasm32 ( ) ) ;
838842 self . return_pointer = Some ( ptr. clone ( ) ) ;
839843 self . stack . push ( ptr) ;
840844 }
@@ -904,9 +908,9 @@ impl<'a, B: Bindgen> Generator<'a, B> {
904908 self . emit ( & Instruction :: GetArg { nth : 0 } ) ;
905909 let ptr = self . stack . pop ( ) . unwrap ( ) ;
906910 for ( _, ty) in func. params . iter ( ) {
907- offset = align_to ( offset, self . bindgen . sizes ( ) . align ( ty) ) ;
911+ offset = align_to ( offset, self . bindgen . sizes ( ) . align ( ty) . align_wasm32 ( ) ) ;
908912 self . read_from_memory ( ty, ptr. clone ( ) , offset as i32 ) ;
909- offset += self . bindgen . sizes ( ) . size ( ty) ;
913+ offset += self . bindgen . sizes ( ) . size ( ty) . size_wasm32 ( ) ;
910914 }
911915 }
912916
@@ -917,12 +921,15 @@ impl<'a, B: Bindgen> Generator<'a, B> {
917921 // it's been read by the guest we need to deallocate it.
918922 if let AbiVariant :: GuestExport = self . variant {
919923 if sig. indirect_params {
920- let ( size , align ) = self
924+ let info = self
921925 . bindgen
922926 . sizes ( )
923927 . record ( func. params . iter ( ) . map ( |t| & t. 1 ) ) ;
924928 self . emit ( & Instruction :: GetArg { nth : 0 } ) ;
925- self . emit ( & Instruction :: GuestDeallocate { size, align } ) ;
929+ self . emit ( & Instruction :: GuestDeallocate {
930+ size : info. size . size_wasm32 ( ) ,
931+ align : info. align . align_wasm32 ( ) ,
932+ } ) ;
926933 }
927934 }
928935
@@ -959,9 +966,10 @@ impl<'a, B: Bindgen> Generator<'a, B> {
959966 // (statically) and then write the result into that
960967 // memory, returning the pointer at the end.
961968 AbiVariant :: GuestExport => {
962- let ( size, align) =
963- self . bindgen . sizes ( ) . params ( func. results . iter_types ( ) ) ;
964- let ptr = self . bindgen . return_pointer ( size, align) ;
969+ let info = self . bindgen . sizes ( ) . params ( func. results . iter_types ( ) ) ;
970+ let ptr = self
971+ . bindgen
972+ . return_pointer ( info. size . size_wasm32 ( ) , info. align . align_wasm32 ( ) ) ;
965973 self . write_params_to_memory ( func. results . iter_types ( ) , ptr. clone ( ) , 0 ) ;
966974 self . stack . push ( ptr) ;
967975 }
@@ -998,6 +1006,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
9981006 . sizes ( )
9991007 . field_offsets ( func. results . iter_types ( ) )
10001008 {
1009+ let offset = offset. size_wasm32 ( ) ;
10011010 let offset = i32:: try_from ( offset) . unwrap ( ) ;
10021011 self . deallocate ( ty, addr. clone ( ) , offset) ;
10031012 }
@@ -1535,8 +1544,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
15351544 tag : Int ,
15361545 cases : impl IntoIterator < Item = Option < & ' b Type > > + Clone ,
15371546 ) {
1538- let payload_offset =
1539- offset + ( self . bindgen . sizes ( ) . payload_offset ( tag, cases. clone ( ) ) as i32 ) ;
1547+ let payload_offset = offset
1548+ + ( self
1549+ . bindgen
1550+ . sizes ( )
1551+ . payload_offset ( tag, cases. clone ( ) )
1552+ . size_wasm32 ( ) as i32 ) ;
15401553 for ( i, ty) in cases. into_iter ( ) . enumerate ( ) {
15411554 self . push_block ( ) ;
15421555 self . emit ( & Instruction :: VariantPayloadName ) ;
@@ -1581,6 +1594,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
15811594 . zip ( fields)
15821595 {
15831596 self . stack . push ( op) ;
1597+ let field_offset = field_offset. size_wasm32 ( ) ;
15841598 self . write_to_memory ( ty, addr. clone ( ) , offset + ( field_offset as i32 ) ) ;
15851599 }
15861600 }
@@ -1715,8 +1729,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17151729 ) {
17161730 self . stack . push ( addr. clone ( ) ) ;
17171731 self . load_intrepr ( offset, tag) ;
1718- let payload_offset =
1719- offset + ( self . bindgen . sizes ( ) . payload_offset ( tag, cases. clone ( ) ) as i32 ) ;
1732+ let payload_offset = offset
1733+ + ( self
1734+ . bindgen
1735+ . sizes ( )
1736+ . payload_offset ( tag, cases. clone ( ) )
1737+ . size_wasm32 ( ) as i32 ) ;
17201738 for ty in cases {
17211739 self . push_block ( ) ;
17221740 if let Some ( ty) = ty {
@@ -1743,7 +1761,8 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17431761 offset : i32 ,
17441762 ) {
17451763 for ( field_offset, ty) in self . bindgen . sizes ( ) . field_offsets ( tys) . iter ( ) {
1746- self . read_from_memory ( ty, addr. clone ( ) , offset + ( * field_offset as i32 ) ) ;
1764+ let field_offset = field_offset. size_wasm32 ( ) ;
1765+ self . read_from_memory ( ty, addr. clone ( ) , offset + ( field_offset as i32 ) ) ;
17471766 }
17481767 }
17491768
@@ -1882,8 +1901,12 @@ impl<'a, B: Bindgen> Generator<'a, B> {
18821901 ) {
18831902 self . stack . push ( addr. clone ( ) ) ;
18841903 self . load_intrepr ( offset, tag) ;
1885- let payload_offset =
1886- offset + ( self . bindgen . sizes ( ) . payload_offset ( tag, cases. clone ( ) ) as i32 ) ;
1904+ let payload_offset = offset
1905+ + ( self
1906+ . bindgen
1907+ . sizes ( )
1908+ . payload_offset ( tag, cases. clone ( ) )
1909+ . size_wasm32 ( ) as i32 ) ;
18871910 for ty in cases {
18881911 self . push_block ( ) ;
18891912 if let Some ( ty) = ty {
@@ -1895,6 +1918,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
18951918
18961919 fn deallocate_fields ( & mut self , tys : & [ Type ] , addr : B :: Operand , offset : i32 ) {
18971920 for ( field_offset, ty) in self . bindgen . sizes ( ) . field_offsets ( tys) {
1921+ let field_offset = field_offset. size_wasm32 ( ) ;
18981922 self . deallocate ( ty, addr. clone ( ) , offset + ( field_offset as i32 ) ) ;
18991923 }
19001924 }
0 commit comments