(&self, args: &[AbiValue])
| 145 | } |
| 146 | |
| 147 | pub fn invoke(&self, args: &[AbiValue]) -> Result<Option<AbiValue>, JitArgumentError> { |
| 148 | if self.sig.args.len() != args.len() { |
| 149 | return Err(JitArgumentError::WrongNumberOfArguments); |
| 150 | } |
| 151 | |
| 152 | let cif_args = self |
| 153 | .sig |
| 154 | .args |
| 155 | .iter() |
| 156 | .zip(args.iter()) |
| 157 | .map(|(ty, val)| type_check(ty, val).map(|_| val)) |
| 158 | .map(|v| v.map(AbiValue::to_libffi_arg)) |
| 159 | .collect::<Result<Vec<_>, _>>()?; |
| 160 | Ok(unsafe { self.invoke_raw(&cif_args) }) |
| 161 | } |
| 162 | |
| 163 | unsafe fn invoke_raw(&self, cif_args: &[libffi::middle::Arg<'_>]) -> Option<AbiValue> { |
| 164 | unsafe { |
no test coverage detected