summaryrefslogtreecommitdiffstats
path: root/ffi.c
diff options
context:
space:
mode:
Diffstat (limited to 'ffi.c')
-rw-r--r--ffi.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ffi.c b/ffi.c
index 8c99f3d9..7734d1dd 100644
--- a/ffi.c
+++ b/ffi.c
@@ -1822,6 +1822,7 @@ val ffi_call_wrap(val ffi_call_desc, val fptr, val args_in)
struct txr_ffi_type *rtft = ffi_type_struct(rtype);
void *rc = alloca(rtft->size);
int in_pass_needed = 0;
+ val ret;
for (i = 0; i < n; i++) {
val type = pop(&types);
@@ -1834,6 +1835,8 @@ val ffi_call_wrap(val ffi_call_desc, val fptr, val args_in)
ffi_call(&tfcd->cif, coerce(void (*)(void), fp), rc, values);
+ ret = rtft->get(rtft, convert(mem_t *, rc), self);
+
if (in_pass_needed) {
types = tfcd->argtypes;
args = args_in;
@@ -1846,7 +1849,7 @@ val ffi_call_wrap(val ffi_call_desc, val fptr, val args_in)
}
}
- return rtft->get(rtft, convert(mem_t *, rc), self);
+ return ret;
}
static void ffi_closure_dispatch(ffi_cif *cif, void *cret,