diff --git a/lib/bc.lua b/lib/bc.lua index 366617c8..f4ee8e8a 100644 --- a/lib/bc.lua +++ b/lib/bc.lua @@ -125,9 +125,16 @@ local function bctargets(func) end -- Dump bytecode instructions of a function. -local function bcdump(func, out) +local function bcdump(func, out, all) if not out then out = stdout end local fi = funcinfo(func) + if all and fi.children then + for n=-1,-1000000000,-1 do + local k = funck(func, n) + if not k then break end + if type(k) == "proto" then bcdump(k, out, true) end + end + end out:write(format("-- BYTECODE -- %s-%d\n", fi.loc, fi.lastlinedefined)) local target = bctargets(func) for pc=1,1000000000 do diff --git a/src/lib_jit.c b/src/lib_jit.c index 31b27ccb..66b3856a 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c @@ -193,6 +193,8 @@ LJLIB_CF(jit_util_funcinfo) setintfield(L, t, "currentline", lj_debug_line(pt, pc)); lua_pushboolean(L, (pt->flags & PROTO_VARARG)); lua_setfield(L, -2, "isvararg"); + lua_pushboolean(L, (pt->flags & PROTO_CHILD)); + lua_setfield(L, -2, "children"); setstrV(L, L->top++, proto_chunkname(pt)); lua_setfield(L, -2, "source"); lj_debug_pushloc(L, pt, pc);