diff options
author | Mike Pall <mike> | 2011-11-14 12:01:48 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-11-14 12:01:48 +0100 |
commit | ae79ff4e53392f80c4e64a043800c6838ab535a0 (patch) | |
tree | 1f917b84dbc2c88cf1adeae654a83323608a8300 /src/lib_ffi.c | |
parent | 4d59752217148d81f01034161672b289c3d5ba22 (diff) | |
download | luajit-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.c | 5 |
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) | |||
207 | static int ffi_call_meta(lua_State *L, CTypeID id) | 207 | static 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); |