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.
This commit is contained in:
@@ -100,8 +100,9 @@ public class DebugStackState extends StackState implements DebugRequestListener
|
|||||||
Proto p = call.closure.p;
|
Proto p = call.closure.p;
|
||||||
if (p != null && p.source != null)
|
if (p != null && p.source != null)
|
||||||
source = p.source.toJavaString();
|
source = p.source.toJavaString();
|
||||||
if (p.lineinfo != null && p.lineinfo.length > call.pc)
|
int pc = getCurrentPc(call);
|
||||||
line = String.valueOf(p.lineinfo[call.pc]);
|
if (p.lineinfo != null && p.lineinfo.length > pc)
|
||||||
|
line = String.valueOf(p.lineinfo[pc]);
|
||||||
// TODO: reverse lookup on function name ????
|
// TODO: reverse lookup on function name ????
|
||||||
func = call.closure.toJavaString();
|
func = call.closure.toJavaString();
|
||||||
}
|
}
|
||||||
@@ -110,8 +111,9 @@ public class DebugStackState extends StackState implements DebugRequestListener
|
|||||||
|
|
||||||
// override and fill in line number info
|
// override and fill in line number info
|
||||||
public void error(String message, int level) {
|
public void error(String message, int level) {
|
||||||
super.error(level <= 0 ? message : getFileLine(cc + 1 - level) + ": "
|
super.error(level <= 0 ?
|
||||||
+ message);
|
message :
|
||||||
|
getFileLine(cc + 1 - level) + ": " + message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// use line numbers by default
|
// use line numbers by default
|
||||||
@@ -268,13 +270,18 @@ public class DebugStackState extends StackState implements DebugRequestListener
|
|||||||
*/
|
*/
|
||||||
private int getLineNumber(CallInfo ci) {
|
private int getLineNumber(CallInfo ci) {
|
||||||
int[] lineNumbers = ci.closure.p.lineinfo;
|
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 ?
|
int line = (lineNumbers != null && lineNumbers.length > pc ?
|
||||||
lineNumbers[pc] :
|
lineNumbers[pc] :
|
||||||
-1);
|
-1);
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getCurrentPc(CallInfo ci) {
|
||||||
|
int pc = (ci != calls[cc] ? ci.pc - 1 : ci.pc);
|
||||||
|
return pc;
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------ commands coming from the debugger -------------------
|
// ------------------ commands coming from the debugger -------------------
|
||||||
|
|
||||||
public DebugResponse handleRequest(DebugRequest request) {
|
public DebugResponse handleRequest(DebugRequest request) {
|
||||||
@@ -468,9 +475,7 @@ public class DebugStackState extends StackState implements DebugRequestListener
|
|||||||
|
|
||||||
Vector variables = new Vector();
|
Vector variables = new Vector();
|
||||||
Hashtable variablesSeen = new Hashtable();
|
Hashtable variablesSeen = new Hashtable();
|
||||||
for (int i = index; i >= 0; i--) {
|
addVariables(variables, variablesSeen, index);
|
||||||
addVariables(variables, variablesSeen, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
Variable[] result = new Variable[variables.size()];
|
Variable[] result = new Variable[variables.size()];
|
||||||
for (int i = 0; i < variables.size(); i++) {
|
for (int i = 0; i < variables.size(); i++) {
|
||||||
@@ -483,8 +488,9 @@ public class DebugStackState extends StackState implements DebugRequestListener
|
|||||||
private void dumpStack(int index) {
|
private void dumpStack(int index) {
|
||||||
CallInfo callInfo = calls[index];
|
CallInfo callInfo = calls[index];
|
||||||
LocVars[] localVariables = callInfo.closure.p.locvars;
|
LocVars[] localVariables = callInfo.closure.p.locvars;
|
||||||
|
int pc = getCurrentPc(callInfo);
|
||||||
for (int i = 0; i < localVariables.length; i++) {
|
for (int i = 0; i < localVariables.length; i++) {
|
||||||
if (!isActiveVariable(callInfo.pc, localVariables[i])) {
|
if (!isActiveVariable(pc, localVariables[i])) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
DebugUtils.println("localvars["+i+"]=" + localVariables[i].varname.toJavaString());
|
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) {
|
private String getVariable(CallInfo callInfo, int index) {
|
||||||
int count = -1;
|
int count = -1;
|
||||||
LocVars[] localVariables = callInfo.closure.p.locvars;
|
LocVars[] localVariables = callInfo.closure.p.locvars;
|
||||||
|
int pc = getCurrentPc(callInfo);
|
||||||
for (int i = 0; i < localVariables.length; i++) {
|
for (int i = 0; i < localVariables.length; i++) {
|
||||||
if (!isActiveVariable(callInfo.pc, localVariables[i])) {
|
if (!isActiveVariable(pc, localVariables[i])) {
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
count++;
|
count++;
|
||||||
|
|||||||
Reference in New Issue
Block a user