diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallFrame.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallFrame.class index 0f0f9fd7..c1b30b49 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallFrame.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallFrame.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallStack.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallStack.class index cf3ca53d..d2113fbb 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallStack.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$CallStack.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$DebugInfo.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$DebugInfo.class index 37476d23..f95bc558 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$DebugInfo.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$DebugInfo.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$NameWhat.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$NameWhat.class index fbabae78..922dc755 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$NameWhat.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$NameWhat.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getinfo.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getinfo.class index 59925f45..a1f43ab1 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getinfo.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getinfo.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getlocal.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getlocal.class index 5581bc5c..ceccb23b 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getlocal.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getlocal.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getmetatable.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getmetatable.class index ad0bb2a7..6b82319b 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getmetatable.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getmetatable.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getregistry.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getregistry.class index a875b0af..a6af9ca2 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getregistry.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getregistry.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getupvalue.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getupvalue.class index 74efd475..1c0c60a9 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getupvalue.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getupvalue.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getuservalue.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getuservalue.class index 1a01d921..de567cd2 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$getuservalue.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$getuservalue.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$sethook.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$sethook.class index 205e7137..cea02ea0 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$sethook.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$sethook.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setlocal.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setlocal.class index b19b2c61..f4c70abc 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setlocal.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setlocal.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setmetatable.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setmetatable.class index ea528527..361a4cb9 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setmetatable.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setmetatable.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setupvalue.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setupvalue.class index 628adb3a..bc729843 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setupvalue.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setupvalue.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setuservalue.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setuservalue.class index 7662e64e..8065b180 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$setuservalue.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$setuservalue.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$traceback.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$traceback.class index bffeffae..409adba5 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$traceback.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$traceback.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvalueid.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvalueid.class index c38266a9..7df095f8 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvalueid.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvalueid.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvaluejoin.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvaluejoin.class index 74e22acf..369c497d 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvaluejoin.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib$upvaluejoin.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib.class b/core/src/main/java/org/luaj/vm2/libs/DebugLib.class index f0f1615a..d34529b3 100644 Binary files a/core/src/main/java/org/luaj/vm2/libs/DebugLib.class and b/core/src/main/java/org/luaj/vm2/libs/DebugLib.class differ diff --git a/core/src/main/java/org/luaj/vm2/libs/DebugLib.java b/core/src/main/java/org/luaj/vm2/libs/DebugLib.java index 3be24b01..29b37373 100644 --- a/core/src/main/java/org/luaj/vm2/libs/DebugLib.java +++ b/core/src/main/java/org/luaj/vm2/libs/DebugLib.java @@ -173,10 +173,16 @@ public class DebugLib extends TwoArgFunction { // find the stack info DebugLib.CallFrame frame; if ( func.isnumber() ) { - frame = callstack.getCallFrame(func.toint()); - if (frame == null) - return NONE; - func = frame.f; + int level = func.toint(); + if (level == 0) { + frame = null; + func = this; + } else { + frame = callstack.getCallFrame(level); + if (frame == null) + return NONE; + func = frame.f; + } } else if ( func.isfunction() ) { frame = callstack.findCallFrame(func); } else { @@ -453,12 +459,14 @@ public class DebugLib extends TwoArgFunction { if (s.inhook || s.hookfunc == null) return; s.inhook = true; try { + callstack().onCall(s.hookfunc.checkfunction()); s.hookfunc.call(type, arg); } catch (LuaError e) { throw e; } catch (RuntimeException e) { throw new LuaError(e); } finally { + callstack().onReturn(); s.inhook = false; } } diff --git a/jse/src/test/java/org/luaj/vm2/FragmentsTest.java b/jse/src/test/java/org/luaj/vm2/FragmentsTest.java index 202204e1..50db64fd 100644 --- a/jse/src/test/java/org/luaj/vm2/FragmentsTest.java +++ b/jse/src/test/java/org/luaj/vm2/FragmentsTest.java @@ -140,6 +140,28 @@ public class FragmentsTest extends TestSuite { "return sum\n"); } + public void testDebugGetInfoLevelZeroReturnsGetInfoFunction() { + runFragment( + LuaValue.TRUE, + "return debug.getinfo(0, 'f').func == debug.getinfo\n"); + } + + public void testDebugGetInfoInsideHookSeesHookFunction() { + runFragment( + LuaValue.TRUE, + "local ok = false\n" + + "local hook\n" + + "hook = function()\n" + + " local info = debug.getinfo(1, 'f')\n" + + " ok = info ~= nil and info.func == hook\n" + + " debug.sethook()\n" + + "end\n" + + "debug.sethook(hook, 'c')\n" + + "local function foo() end\n" + + "foo()\n" + + "return ok\n"); + } + public void testLongIntegerLiteralPrecision() { runFragment( LuaValue.varargsOf(new LuaValue[] {