FFI: Handle __pairs/__ipairs metamethods for cdata objects.

This commit is contained in:
Mike Pall
2012-09-03 21:10:10 +02:00
parent 90ec1f90d0
commit 0648fd47cb
5 changed files with 47 additions and 7 deletions

View File

@@ -278,12 +278,16 @@ LJLIB_ASM(next)
return FFH_UNREACHABLE;
}
#ifdef LUAJIT_ENABLE_LUA52COMPAT
#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI
static int ffh_pairs(lua_State *L, MMS mm)
{
TValue *o = lj_lib_checkany(L, 1);
cTValue *mo = lj_meta_lookup(L, o, mm);
if (!tvisnil(mo)) {
if (
#if !defined(LUAJIT_ENABLE_LUA52COMPAT)
tviscdata(o) &&
#endif
!tvisnil(mo)) {
L->top = o+1; /* Only keep one argument. */
copyTV(L, L->base-1, mo); /* Replace callable. */
return FFH_TAILCALL;