From e5f4cb1ccb3bfef5d40a2329d6aa36c1ba74a709 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 24 Oct 2015 17:59:44 +0200 Subject: [PATCH] FFI: Fix ipairs() recording. Thanks to Vyacheslav Egorov. --- src/lj_ffrecord.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index 69f71ab2..30832251 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c @@ -366,11 +366,12 @@ static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd) static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd) { - if (!(LJ_52 && recff_metacall(J, rd, MM_ipairs))) { - TRef tab = J->base[0]; - if (tref_istab(tab)) { + TRef tr = J->base[0]; + if (!((LJ_52 || (LJ_HASFFI && tref_iscdata(tr))) && + recff_metacall(J, rd, MM_ipairs))) { + if (tref_istab(tr)) { J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); - J->base[1] = tab; + J->base[1] = tr; J->base[2] = lj_ir_kint(J, 0); rd->nres = 3; } /* else: Interpreter will throw. */