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);
  }