(
&mut self,
resolve: &Resolve,
func: &Function,
interface: Option<&WorldKey>,
)
| 1230 | } |
| 1231 | |
| 1232 | fn export( |
| 1233 | &mut self, |
| 1234 | resolve: &Resolve, |
| 1235 | func: &Function, |
| 1236 | interface: Option<&WorldKey>, |
| 1237 | ) -> String { |
| 1238 | self.visit_futures_and_streams(false, resolve, func, interface); |
| 1239 | |
| 1240 | let async_ = self.opts.async_.is_async(resolve, interface, func, false); |
| 1241 | |
| 1242 | let (variant, prefix) = if async_ { |
| 1243 | (AbiVariant::GuestExportAsync, "[async-lift]") |
| 1244 | } else { |
| 1245 | (AbiVariant::GuestExport, "") |
| 1246 | }; |
| 1247 | |
| 1248 | let sig = resolve.wasm_signature(variant, func); |
| 1249 | let core_module_name = interface.map(|v| resolve.name_world_key(v)); |
| 1250 | let export_name = func.legacy_core_export_name(core_module_name.as_deref()); |
| 1251 | let name = self.func_name(resolve, interface, func); |
| 1252 | |
| 1253 | let params = sig |
| 1254 | .params |
| 1255 | .iter() |
| 1256 | .enumerate() |
| 1257 | .map(|(i, param)| format!("arg{i} {}", wasm_type(*param))) |
| 1258 | .collect::<Vec<_>>() |
| 1259 | .join(", "); |
| 1260 | |
| 1261 | let results = match &sig.results[..] { |
| 1262 | [] => "", |
| 1263 | [result] => wasm_type(*result), |
| 1264 | _ => unreachable!(), |
| 1265 | }; |
| 1266 | |
| 1267 | let unpin_params = |
| 1268 | sig.indirect_params || abi::guest_export_params_have_allocations(resolve, func); |
| 1269 | |
| 1270 | let param_names = (0..sig.params.len()).map(|i| format!("arg{i}")).collect(); |
| 1271 | let mut generator = FunctionGenerator::new( |
| 1272 | self, |
| 1273 | Some(&name), |
| 1274 | interface, |
| 1275 | None, |
| 1276 | "INVALID", |
| 1277 | param_names, |
| 1278 | unpin_params, |
| 1279 | false, |
| 1280 | ); |
| 1281 | abi::call( |
| 1282 | resolve, |
| 1283 | variant, |
| 1284 | LiftLower::LiftArgsLowerResults, |
| 1285 | func, |
| 1286 | &mut generator, |
| 1287 | async_, |
| 1288 | ); |
| 1289 | let code = generator.src; |
no test coverage detected