diff options
author | Mike Pall <mike> | 2011-01-06 23:30:04 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-01-06 23:30:04 +0100 |
commit | fb0a18ca0bbc96aac105d903e1db92d31f1d4d3c (patch) | |
tree | 019c7f7f80e2b078ce24db5cae8db0b461ad7810 /src/lib_ffi.c | |
parent | 97875c4fa98dcdd0447ae0d4b73b591bfcec6f12 (diff) | |
download | luajit-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.c | 8 |
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); | |||
148 | LJLIB_CF(ffi_meta___call) LJLIB_REC(cdata_call) | 149 | LJLIB_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. */ |