From a72632ae85520c359eb7c2615ecbbb4bde94d296 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Arroyo=20Calle?= Date: Thu, 6 Jun 2024 22:18:17 +0200 Subject: [PATCH] Manage Float and Double FFI types in structs --- src/ffi.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ffi.rs b/src/ffi.rs index a8ffd7442..418accced 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -436,6 +436,18 @@ impl ForeignFunctionTable { } libffi::raw::FFI_TYPE_SINT64 => read_and_push_int!(i64), libffi::raw::FFI_TYPE_POINTER => read_and_push_int!(i64), + libffi::raw::FFI_TYPE_FLOAT => { + field_ptr = field_ptr.add(field_ptr.align_offset(std::mem::align_of::())); + let n = std::ptr::read(field_ptr as *mut f32); + returns.push(Value::Float(f32::from(n).into())); + field_ptr = field_ptr.add(std::mem::size_of::()); + } + libffi::raw::FFI_TYPE_DOUBLE => { + field_ptr = field_ptr.add(field_ptr.align_offset(std::mem::align_of::())); + let n = std::ptr::read(field_ptr as *mut f64); + returns.push(Value::Float(f64::from(n))); + field_ptr = field_ptr.add(std::mem::size_of::()); + } libffi::raw::FFI_TYPE_STRUCT => { let substruct = struct_type.atom_fields[i].as_str(); let struct_type = self