summaryrefslogtreecommitdiff
path: root/ext/ffi_c/libffi/src/raw_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffi_c/libffi/src/raw_api.c')
-rw-r--r--ext/ffi_c/libffi/src/raw_api.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/ext/ffi_c/libffi/src/raw_api.c b/ext/ffi_c/libffi/src/raw_api.c
index ce21372..276cb22 100644
--- a/ext/ffi_c/libffi/src/raw_api.c
+++ b/ext/ffi_c/libffi/src/raw_api.c
@@ -88,6 +88,10 @@ ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args)
break;
#endif
+ case FFI_TYPE_COMPLEX:
+ *args = (raw++)->ptr;
+ break;
+
case FFI_TYPE_POINTER:
*args = (void*) &(raw++)->ptr;
break;
@@ -112,6 +116,11 @@ ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args)
}
else
#endif
+ if ((*tp)->type == FFI_TYPE_COMPLEX)
+ {
+ *args = (raw++)->ptr;
+ }
+ else
{
*args = (void*) raw;
raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*);
@@ -167,6 +176,10 @@ ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw)
break;
#endif
+ case FFI_TYPE_COMPLEX:
+ (raw++)->ptr = *args;
+ break;
+
case FFI_TYPE_POINTER:
(raw++)->ptr = **(void***) args;
break;