Browse Source

Add recursive dump option to jit.bc.dump().

Mike Pall 14 years ago
parent
commit
9da94d1355
2 changed files with 10 additions and 1 deletions
  1. 8 1
      lib/bc.lua
  2. 2 0
      src/lib_jit.c

+ 8 - 1
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

+ 2 - 0
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);