Commit 484e07df authored by Skylot's avatar Skylot

Fix setting variable name from debug info

parent a55f4c59
...@@ -78,8 +78,7 @@ public class DebugInfoParser { ...@@ -78,8 +78,7 @@ public class DebugInfoParser {
int nameId = section.readUleb128() - 1; int nameId = section.readUleb128() - 1;
int type = section.readUleb128() - 1; int type = section.readUleb128() - 1;
LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, DexNode.NO_INDEX); LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, DexNode.NO_INDEX);
var.start(addr, line); startVar(var, locals, insnByOffset, addr, line);
locals[regNum] = var;
break; break;
} }
case DBG_START_LOCAL_EXTENDED: { case DBG_START_LOCAL_EXTENDED: {
...@@ -88,15 +87,17 @@ public class DebugInfoParser { ...@@ -88,15 +87,17 @@ public class DebugInfoParser {
int type = section.readUleb128() - 1; int type = section.readUleb128() - 1;
int sign = section.readUleb128() - 1; int sign = section.readUleb128() - 1;
LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, sign); LocalVarInfo var = new LocalVarInfo(dex, regNum, nameId, type, sign);
var.start(addr, line); startVar(var, locals, insnByOffset, addr, line);
locals[regNum] = var;
break; break;
} }
case DBG_RESTART_LOCAL: { case DBG_RESTART_LOCAL: {
int regNum = section.readUleb128(); int regNum = section.readUleb128();
LocalVarInfo var = locals[regNum]; LocalVarInfo var = locals[regNum];
if (var != null) if (var != null) {
var.end(addr, line);
setVar(var, insnByOffset);
var.start(addr, line); var.start(addr, line);
}
break; break;
} }
case DBG_END_LOCAL: { case DBG_END_LOCAL: {
...@@ -141,6 +142,17 @@ public class DebugInfoParser { ...@@ -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) { private void setVar(LocalVarInfo var, InsnNode[] insnByOffset) {
int start = var.getStartAddr(); int start = var.getStartAddr();
int end = var.getEndAddr(); 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