private static void merge(InsnArg arg, LocalVar var) { if (arg != null && arg.isRegister()) { RegisterArg reg = (RegisterArg) arg; if (var.getRegNum() == reg.getRegNum()) { reg.mergeDebugInfo(var.getType(), var.getName()); } } }
private void startVar(LocalVar var, int addr, int line) { int regNum = var.getRegNum(); LocalVar prev = locals[regNum]; if (prev != null && !prev.isEnd()) { prev.end(addr, line); setVar(prev); } var.start(addr, line); locals[regNum] = var; }
private void setVar(LocalVar var) { int start = var.getStartAddr(); int end = var.getEndAddr(); for (int i = start; i <= end; i++) { InsnNode insn = insnByOffset[i]; if (insn != null) { fillLocals(insn, var); } } merge(activeRegisters[var.getRegNum()], var); }