Skip to content

Commit a72632a

Browse files
committed
Manage Float and Double FFI types in structs
1 parent 070f1e8 commit a72632a

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/ffi.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,18 @@ impl ForeignFunctionTable {
436436
}
437437
libffi::raw::FFI_TYPE_SINT64 => read_and_push_int!(i64),
438438
libffi::raw::FFI_TYPE_POINTER => read_and_push_int!(i64),
439+
libffi::raw::FFI_TYPE_FLOAT => {
440+
field_ptr = field_ptr.add(field_ptr.align_offset(std::mem::align_of::<f32>()));
441+
let n = std::ptr::read(field_ptr as *mut f32);
442+
returns.push(Value::Float(f32::from(n).into()));
443+
field_ptr = field_ptr.add(std::mem::size_of::<f32>());
444+
}
445+
libffi::raw::FFI_TYPE_DOUBLE => {
446+
field_ptr = field_ptr.add(field_ptr.align_offset(std::mem::align_of::<f64>()));
447+
let n = std::ptr::read(field_ptr as *mut f64);
448+
returns.push(Value::Float(f64::from(n)));
449+
field_ptr = field_ptr.add(std::mem::size_of::<f64>());
450+
}
439451
libffi::raw::FFI_TYPE_STRUCT => {
440452
let substruct = struct_type.atom_fields[i].as_str();
441453
let struct_type = self

0 commit comments

Comments
 (0)