From ddba10c18008ead9a337490b51cfc46e5a423bb6 Mon Sep 17 00:00:00 2001 From: Enrico Horn Date: Sat, 17 Jul 2021 23:41:01 +0200 Subject: [PATCH] Bring debuglib.getlocal Implementation closer to native --- .../src/main/java/org/luaj/vm2/lib/DebugLib.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/luaj-core/src/main/java/org/luaj/vm2/lib/DebugLib.java b/luaj-core/src/main/java/org/luaj/vm2/lib/DebugLib.java index 5a2200e5..db138151 100644 --- a/luaj-core/src/main/java/org/luaj/vm2/lib/DebugLib.java +++ b/luaj-core/src/main/java/org/luaj/vm2/lib/DebugLib.java @@ -249,10 +249,17 @@ public class DebugLib extends TwoArgFunction { public Varargs invoke(Varargs args) { int a = 1; LuaThread thread = args.isthread(a)? args.checkthread(a++): globals.running; - int level = args.checkint(a++); - int local = args.checkint(a++); - CallFrame f = callstack(thread).getCallFrame(level); - return f != null? f.getLocal(local): NONE; + LuaValue func = args.arg(a++); + int local = args.checkint(a); + + if (func.isfunction()) + return func.checkclosure().p.getlocalname(local, 0); + + // find the stack info + DebugLib.CallFrame frame = callstack(thread).getCallFrame(func.checkint()); + if (frame == null) + return argerror(a, "level out of range"); + return frame.getLocal(local); } }