summaryrefslogtreecommitdiff
path: root/src/lib_ffi.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-11-14 12:01:48 +0100
committerMike Pall <mike>2011-11-14 12:01:48 +0100
commitae79ff4e53392f80c4e64a043800c6838ab535a0 (patch)
tree1f917b84dbc2c88cf1adeae654a83323608a8300 /src/lib_ffi.c
parent4d59752217148d81f01034161672b289c3d5ba22 (diff)
downloadluajit-ae79ff4e53392f80c4e64a043800c6838ab535a0.tar.gz
luajit-ae79ff4e53392f80c4e64a043800c6838ab535a0.tar.bz2
luajit-ae79ff4e53392f80c4e64a043800c6838ab535a0.zip
FFI: Resolve __call metamethod for pointers, too.
Diffstat (limited to 'src/lib_ffi.c')
-rw-r--r--src/lib_ffi.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib_ffi.c b/src/lib_ffi.c
index 82942e44..af500118 100644
--- a/src/lib_ffi.c
+++ b/src/lib_ffi.c
@@ -207,7 +207,10 @@ LJLIB_CF(ffi_meta___concat) LJLIB_REC(cdata_arith MM_concat)
207static int ffi_call_meta(lua_State *L, CTypeID id) 207static int ffi_call_meta(lua_State *L, CTypeID id)
208{ 208{
209 CTState *cts = ctype_cts(L); 209 CTState *cts = ctype_cts(L);
210 cTValue *tv = lj_ctype_meta(cts, id, MM_call); 210 CType *ct = ctype_raw(cts, id);
211 cTValue *tv;
212 if (ctype_isptr(ct->info)) id = ctype_cid(ct->info);
213 tv = lj_ctype_meta(cts, id, MM_call);
211 if (!tv) 214 if (!tv)
212 lj_err_callerv(L, LJ_ERR_FFI_BADCALL, strdata(lj_ctype_repr(L, id, NULL))); 215 lj_err_callerv(L, LJ_ERR_FFI_BADCALL, strdata(lj_ctype_repr(L, id, NULL)));
213 return lj_meta_tailcall(L, tv); 216 return lj_meta_tailcall(L, tv);