(&'b mut self, callee: &'b Callee)
| 331 | } |
| 332 | |
| 333 | pub(crate) fn callee_sig<'b, A>(&'b mut self, callee: &'b Callee) -> Result<&'b ABISig> |
| 334 | where |
| 335 | A: ABI, |
| 336 | { |
| 337 | match callee { |
| 338 | Callee::Local(idx) | Callee::Import(idx) => { |
| 339 | if self.resolved_callees.contains_key(idx) { |
| 340 | Ok(self.resolved_callees.get(idx).unwrap()) |
| 341 | } else { |
| 342 | let types = self.translation.get_types(); |
| 343 | let types = types.as_ref(); |
| 344 | let ty = types[types.core_function_at(idx.as_u32())].unwrap_func(); |
| 345 | let converter = TypeConverter::new(self.translation, self.types); |
| 346 | let ty = converter.convert_func_type(&ty)?; |
| 347 | let sig = wasm_sig::<A>(&ty)?; |
| 348 | self.resolved_callees.insert(*idx, sig); |
| 349 | Ok(self.resolved_callees.get(idx).unwrap()) |
| 350 | } |
| 351 | } |
| 352 | Callee::FuncRef(idx) => { |
| 353 | if self.resolved_sigs.contains_key(idx) { |
| 354 | Ok(self.resolved_sigs.get(idx).unwrap()) |
| 355 | } else { |
| 356 | let sig_index = self.translation.module.types[*idx].unwrap_module_type_index(); |
| 357 | let ty = self.types[sig_index].unwrap_func(); |
| 358 | let sig = wasm_sig::<A>(ty)?; |
| 359 | self.resolved_sigs.insert(*idx, sig); |
| 360 | Ok(self.resolved_sigs.get(idx).unwrap()) |
| 361 | } |
| 362 | } |
| 363 | Callee::Builtin(b) | Callee::BuiltinWithDifferentVmctx(b, _) => Ok(b.sig()), |
| 364 | } |
| 365 | } |
| 366 | |
| 367 | /// Creates a name to reference the `builtin` provided. |
| 368 | pub fn name_builtin(&mut self, builtin: BuiltinFunctionIndex) -> UserExternalNameRef { |
nothing calls this directly
no test coverage detected