aboutsummaryrefslogtreecommitdiff
path: root/src/lib_ffi.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-01-06 23:30:04 +0100
committerMike Pall <mike>2011-01-06 23:30:04 +0100
commitfb0a18ca0bbc96aac105d903e1db92d31f1d4d3c (patch)
tree019c7f7f80e2b078ce24db5cae8db0b461ad7810 /src/lib_ffi.c
parent97875c4fa98dcdd0447ae0d4b73b591bfcec6f12 (diff)
downloadluajit-fb0a18ca0bbc96aac105d903e1db92d31f1d4d3c.tar.gz
luajit-fb0a18ca0bbc96aac105d903e1db92d31f1d4d3c.tar.bz2
luajit-fb0a18ca0bbc96aac105d903e1db92d31f1d4d3c.zip
FFI: Add support for calling C functions.
Diffstat (limited to 'src/lib_ffi.c')
-rw-r--r--src/lib_ffi.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib_ffi.c b/src/lib_ffi.c
index 18a22ce1..c80f3fb6 100644
--- a/src/lib_ffi.c
+++ b/src/lib_ffi.c
@@ -21,6 +21,7 @@
21#include "lj_cparse.h" 21#include "lj_cparse.h"
22#include "lj_cdata.h" 22#include "lj_cdata.h"
23#include "lj_cconv.h" 23#include "lj_cconv.h"
24#include "lj_ccall.h"
24#include "lj_ff.h" 25#include "lj_ff.h"
25#include "lj_lib.h" 26#include "lj_lib.h"
26 27
@@ -148,10 +149,13 @@ static int lj_cf_ffi_new(lua_State *L);
148LJLIB_CF(ffi_meta___call) LJLIB_REC(cdata_call) 149LJLIB_CF(ffi_meta___call) LJLIB_REC(cdata_call)
149{ 150{
150 GCcdata *cd = ffi_checkcdata(L, 1); 151 GCcdata *cd = ffi_checkcdata(L, 1);
152 int ret;
151 if (cd->typeid == CTID_CTYPEID) 153 if (cd->typeid == CTID_CTYPEID)
152 return lj_cf_ffi_new(L); 154 return lj_cf_ffi_new(L);
153 lj_err_caller(L, LJ_ERR_FFI_NYICALL); 155 if ((ret = lj_ccall_func(L, cd)) < 0)
154 return 0; /* unreachable */ 156 lj_err_callerv(L, LJ_ERR_FFI_BADCALL,
157 strdata(lj_ctype_repr(L, cd->typeid, NULL)));
158 return ret;
155} 159}
156 160
157/* Pointer arithmetic. */ 161/* Pointer arithmetic. */