|
1 | 1 | pub use wit_parser::abi::{AbiVariant, WasmSignature, WasmType};
|
2 | 2 | use wit_parser::{
|
3 | 3 | align_to_arch, Alignment, ArchitectureSize, ElementInfo, Enum, Flags, FlagsRepr, Function,
|
4 |
| - Handle, Int, Record, Resolve, Result_, SizeAlign, Tuple, Type, TypeDefKind, TypeId, |
5 |
| - Variant, |
| 4 | + Handle, Int, Record, Resolve, Result_, SizeAlign, Tuple, Type, TypeDefKind, TypeId, Variant, |
6 | 5 | };
|
7 | 6 |
|
8 | 7 | // Helper macro for defining instructions without having to have tons of
|
@@ -970,38 +969,38 @@ impl<'a, B: Bindgen> Generator<'a, B> {
|
970 | 969 |
|
971 | 970 | // If necessary we may need to prepare a return pointer for
|
972 | 971 | // this ABI.
|
973 |
| - let dealloc_size_align = |
974 |
| - if let Some((params_size, params_align)) = params_size_align { |
975 |
| - let ElementInfo { size, align } = |
976 |
| - self.bindgen.sizes().record(func.result.iter()); |
977 |
| - self.emit(&Instruction::AsyncMalloc { size, align }); |
978 |
| - let ptr = self.stack.pop().unwrap(); |
| 972 | + let dealloc_size_align = if let Some((params_size, params_align)) = |
| 973 | + params_size_align |
| 974 | + { |
| 975 | + let ElementInfo { size, align } = |
| 976 | + self.bindgen.sizes().record(func.result.iter()); |
| 977 | + self.emit(&Instruction::AsyncMalloc { size, align }); |
| 978 | + let ptr = self.stack.pop().unwrap(); |
| 979 | + self.return_pointer = Some(ptr.clone()); |
| 980 | + self.stack.push(ptr); |
| 981 | + |
| 982 | + assert_eq!(self.stack.len(), 2); |
| 983 | + self.emit(&Instruction::AsyncCallWasm { |
| 984 | + name: &format!("[async]{}", func.name), |
| 985 | + size: params_size, |
| 986 | + align: params_align, |
| 987 | + }); |
| 988 | + Some((size, align)) |
| 989 | + } else { |
| 990 | + if self.variant == AbiVariant::GuestImport && sig.retptr { |
| 991 | + let ElementInfo { size, align } = self.bindgen.sizes().params(&func.result); |
| 992 | + let ptr = self.bindgen.return_pointer(size, align); |
979 | 993 | self.return_pointer = Some(ptr.clone());
|
980 | 994 | self.stack.push(ptr);
|
| 995 | + } |
981 | 996 |
|
982 |
| - assert_eq!(self.stack.len(), 2); |
983 |
| - self.emit(&Instruction::AsyncCallWasm { |
984 |
| - name: &format!("[async]{}", func.name), |
985 |
| - size: params_size, |
986 |
| - align: params_align, |
987 |
| - }); |
988 |
| - Some((size, align)) |
989 |
| - } else { |
990 |
| - if self.variant == AbiVariant::GuestImport && sig.retptr { |
991 |
| - let ElementInfo { size, align } = |
992 |
| - self.bindgen.sizes().params(&func.result); |
993 |
| - let ptr = self.bindgen.return_pointer(size, align); |
994 |
| - self.return_pointer = Some(ptr.clone()); |
995 |
| - self.stack.push(ptr); |
996 |
| - } |
997 |
| - |
998 |
| - assert_eq!(self.stack.len(), sig.params.len()); |
999 |
| - self.emit(&Instruction::CallWasm { |
1000 |
| - name: &func.name, |
1001 |
| - sig: &sig, |
1002 |
| - }); |
1003 |
| - None |
1004 |
| - }; |
| 997 | + assert_eq!(self.stack.len(), sig.params.len()); |
| 998 | + self.emit(&Instruction::CallWasm { |
| 999 | + name: &func.name, |
| 1000 | + sig: &sig, |
| 1001 | + }); |
| 1002 | + None |
| 1003 | + }; |
1005 | 1004 |
|
1006 | 1005 | if !(sig.retptr || self.async_) {
|
1007 | 1006 | // With no return pointer in use we can simply lift the
|
@@ -1143,11 +1142,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
|
1143 | 1142 | nth: sig.params.len() - 1,
|
1144 | 1143 | });
|
1145 | 1144 | let ptr = self.stack.pop().unwrap();
|
1146 |
| - self.write_params_to_memory( |
1147 |
| - &func.result, |
1148 |
| - ptr, |
1149 |
| - Default::default(), |
1150 |
| - ); |
| 1145 | + self.write_params_to_memory(&func.result, ptr, Default::default()); |
1151 | 1146 | }
|
1152 | 1147 |
|
1153 | 1148 | // For a guest import this is a function defined in
|
@@ -1214,11 +1209,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
|
1214 | 1209 |
|
1215 | 1210 | self.emit(&Instruction::GetArg { nth: 0 });
|
1216 | 1211 | let addr = self.stack.pop().unwrap();
|
1217 |
| - for (offset, ty) in self |
1218 |
| - .bindgen |
1219 |
| - .sizes() |
1220 |
| - .field_offsets(&func.result) |
1221 |
| - { |
| 1212 | + for (offset, ty) in self.bindgen.sizes().field_offsets(&func.result) { |
1222 | 1213 | self.deallocate(ty, addr.clone(), offset);
|
1223 | 1214 | }
|
1224 | 1215 | self.emit(&Instruction::Return { func, amt: 0 });
|
|
0 commit comments