summaryrefslogtreecommitdiff
path: root/src/lib_base.c
diff options
context:
space:
mode:
authorMike Pall <mike>2012-09-03 21:10:10 +0200
committerMike Pall <mike>2012-09-03 21:11:08 +0200
commit0648fd47cb5560cf1a44a211a75997863e8470dd (patch)
tree794077cf10c0f9dcb05c406904342880025311e3 /src/lib_base.c
parent90ec1f90d0c31ab9398e971665c1e33d3158f9c0 (diff)
downloadluajit-0648fd47cb5560cf1a44a211a75997863e8470dd.tar.gz
luajit-0648fd47cb5560cf1a44a211a75997863e8470dd.tar.bz2
luajit-0648fd47cb5560cf1a44a211a75997863e8470dd.zip
FFI: Handle __pairs/__ipairs metamethods for cdata objects.
Diffstat (limited to 'src/lib_base.c')
-rw-r--r--src/lib_base.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lib_base.c b/src/lib_base.c
index 9702c5b4..824fc0e7 100644
--- a/src/lib_base.c
+++ b/src/lib_base.c
@@ -278,12 +278,16 @@ LJLIB_ASM(next)
278 return FFH_UNREACHABLE; 278 return FFH_UNREACHABLE;
279} 279}
280 280
281#ifdef LUAJIT_ENABLE_LUA52COMPAT 281#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI
282static int ffh_pairs(lua_State *L, MMS mm) 282static int ffh_pairs(lua_State *L, MMS mm)
283{ 283{
284 TValue *o = lj_lib_checkany(L, 1); 284 TValue *o = lj_lib_checkany(L, 1);
285 cTValue *mo = lj_meta_lookup(L, o, mm); 285 cTValue *mo = lj_meta_lookup(L, o, mm);
286 if (!tvisnil(mo)) { 286 if (
287#if !defined(LUAJIT_ENABLE_LUA52COMPAT)
288 tviscdata(o) &&
289#endif
290 !tvisnil(mo)) {
287 L->top = o+1; /* Only keep one argument. */ 291 L->top = o+1; /* Only keep one argument. */
288 copyTV(L, L->base-1, mo); /* Replace callable. */ 292 copyTV(L, L->base-1, mo); /* Replace callable. */
289 return FFH_TAILCALL; 293 return FFH_TAILCALL;