From: Mike Pall Date: Tue, 16 Jun 2026 09:38:02 +0000 (+0200) Subject: Optionally return PC position in jit.util.tracesnap(). X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;ds=inline;p=thirdparty%2FLuaJIT.git Optionally return PC position in jit.util.tracesnap(). Suggested by Sergey Bronnikov. #1472 --- diff --git a/src/lib_jit.c b/src/lib_jit.c index af3e0a6f..e6c5271f 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c @@ -340,11 +340,12 @@ LJLIB_CF(jit_util_tracek) return 0; } -/* local snap = jit.util.tracesnap(tr, sn) */ +/* local snap = jit.util.tracesnap(tr, sn[, getpos]) */ LJLIB_CF(jit_util_tracesnap) { GCtrace *T = jit_checktrace(L); SnapNo sn = (SnapNo)lj_lib_checkint(L, 2); + int getpos = (L->base+2 < L->top && tvistruecond(L->base+2)); if (T && sn < T->nsnap) { SnapShot *snap = &T->snap[sn]; SnapEntry *map = &T->snapmap[snap->mapofs]; @@ -357,6 +358,12 @@ LJLIB_CF(jit_util_tracesnap) for (n = 0; n < nent; n++) setintV(lj_tab_setint(L, t, (int32_t)(n+2)), (int32_t)map[n]); setintV(lj_tab_setint(L, t, (int32_t)(nent+2)), (int32_t)SNAP(255, 0, 0)); + if (getpos) { + const BCIns *pc = snap_pc(&map[nent]), *startpc = pc; + while (bc_op(*startpc) < BC_FUNCF) startpc--; + setintV(L->top++, (int)(pc - startpc)); + return 2; + } return 1; } return 0;