Fixed issue: #86

This commit is contained in:
UnlegitDqrk
2026-03-02 13:31:34 +01:00
parent db392c4763
commit 572fd95692
21 changed files with 34 additions and 4 deletions

View File

@@ -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;
}
}

View File

@@ -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[] {