From 439f14c2677306c650d95d1443860539a763162f Mon Sep 17 00:00:00 2001 From: Shu Lei Date: Tue, 6 Nov 2007 01:29:57 +0000 Subject: [PATCH] 1. refactored getCurrentPc() to retrieve the current pc for the stack frame 2. reverted the code to aggregate all visible variables. due to the lack of debugging info about the lexical scope, only local visible variables are returned for now. --- src/main/java/lua/debug/DebugStackState.java | 29 ++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/main/java/lua/debug/DebugStackState.java b/src/main/java/lua/debug/DebugStackState.java index b723a050..fd8d422d 100644 --- a/src/main/java/lua/debug/DebugStackState.java +++ b/src/main/java/lua/debug/DebugStackState.java @@ -100,18 +100,20 @@ public class DebugStackState extends StackState implements DebugRequestListener Proto p = call.closure.p; if (p != null && p.source != null) source = p.source.toJavaString(); - if (p.lineinfo != null && p.lineinfo.length > call.pc) - line = String.valueOf(p.lineinfo[call.pc]); + int pc = getCurrentPc(call); + if (p.lineinfo != null && p.lineinfo.length > pc) + line = String.valueOf(p.lineinfo[pc]); // TODO: reverse lookup on function name ???? func = call.closure.toJavaString(); } return source + ":" + line + "(" + func + ")"; } - + // override and fill in line number info public void error(String message, int level) { - super.error(level <= 0 ? message : getFileLine(cc + 1 - level) + ": " - + message); + super.error(level <= 0 ? + message : + getFileLine(cc + 1 - level) + ": " + message); } // use line numbers by default @@ -268,13 +270,18 @@ public class DebugStackState extends StackState implements DebugRequestListener */ private int getLineNumber(CallInfo ci) { int[] lineNumbers = ci.closure.p.lineinfo; - int pc = (ci != calls[cc] ? ci.pc - 1 : ci.pc); + int pc = getCurrentPc(ci); int line = (lineNumbers != null && lineNumbers.length > pc ? lineNumbers[pc] : -1); return line; } + private int getCurrentPc(CallInfo ci) { + int pc = (ci != calls[cc] ? ci.pc - 1 : ci.pc); + return pc; + } + // ------------------ commands coming from the debugger ------------------- public DebugResponse handleRequest(DebugRequest request) { @@ -468,9 +475,7 @@ public class DebugStackState extends StackState implements DebugRequestListener Vector variables = new Vector(); Hashtable variablesSeen = new Hashtable(); - for (int i = index; i >= 0; i--) { - addVariables(variables, variablesSeen, i); - } + addVariables(variables, variablesSeen, index); Variable[] result = new Variable[variables.size()]; for (int i = 0; i < variables.size(); i++) { @@ -483,8 +488,9 @@ public class DebugStackState extends StackState implements DebugRequestListener private void dumpStack(int index) { CallInfo callInfo = calls[index]; LocVars[] localVariables = callInfo.closure.p.locvars; + int pc = getCurrentPc(callInfo); for (int i = 0; i < localVariables.length; i++) { - if (!isActiveVariable(callInfo.pc, localVariables[i])) { + if (!isActiveVariable(pc, localVariables[i])) { continue; } else { DebugUtils.println("localvars["+i+"]=" + localVariables[i].varname.toJavaString()); @@ -495,8 +501,9 @@ public class DebugStackState extends StackState implements DebugRequestListener private String getVariable(CallInfo callInfo, int index) { int count = -1; LocVars[] localVariables = callInfo.closure.p.locvars; + int pc = getCurrentPc(callInfo); for (int i = 0; i < localVariables.length; i++) { - if (!isActiveVariable(callInfo.pc, localVariables[i])) { + if (!isActiveVariable(pc, localVariables[i])) { continue; } else { count++;