Commit 484e07df authored by Skylot's avatar Skylot

Fix setting variable name from debug info

parent a55f4c59
......@@ -78,8 +78,7 @@ public class DebugInfoParser {
int nameId = section.readUleb128() - 1;
int type = section.readUleb128() - 1;
LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, DexNode.NO_INDEX);
var.start(addr, line);
locals[regNum] = var;
startVar(var, locals, insnByOffset, addr, line);
break;
}
case DBG_START_LOCAL_EXTENDED: {
......@@ -88,15 +87,17 @@ public class DebugInfoParser {
int type = section.readUleb128() - 1;
int sign = section.readUleb128() - 1;
LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, sign);
var.start(addr, line);
locals[regNum] = var;
startVar(var, locals, insnByOffset, addr, line);
break;
}
case DBG_RESTART_LOCAL: {
int regNum = section.readUleb128();
LocalVarInfo var = locals[regNum];
if (var != null)
if (var != null) {
var.end(addr, line);
setVar(var, insnByOffset);
var.start(addr, line);
}
break;
}
case DBG_END_LOCAL: {
......@@ -141,6 +142,17 @@ public class DebugInfoParser {
}
}
private void startVar(LocalVarInfo var, LocalVarInfo[] locals, InsnNode[] insnByOffset, int addr, int line) {
int regNum = var.getRegNum();
LocalVarInfo prev = locals[regNum];
if (prev != null && !prev.isEnd()) {
prev.end(addr, line);
setVar(prev, insnByOffset);
}
var.start(addr, line);
locals[regNum] = var;
}
private void setVar(LocalVarInfo var, InsnNode[] insnByOffset) {
int start = var.getStartAddr();
int end = var.getEndAddr();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment