diff options
Diffstat (limited to 'ext/ffi_c/libffi/src/raw_api.c')
-rw-r--r-- | ext/ffi_c/libffi/src/raw_api.c | 13 |
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; |