@Nullable
  private static Location previousLocation(Frame<? extends Value> frame, Location location, AbstractInsnNode insn) throws AnalyzerException {
    int insnType = insn.getType();
    if (insnType == AbstractInsnNode.LABEL || insnType == AbstractInsnNode.LINE || insnType == AbstractInsnNode.FRAME) {
      return location;
    }
    int opCode = insn.getOpcode();
    if (location.local && !((opCode >= Opcodes.ISTORE && opCode <= Opcodes.ASTORE) || opCode == Opcodes.IINC)) {
      return location;
    }
    Frame<SourceValue> preFrame = makePreFrame(frame);
    preFrame.execute(insn, ourInterpreter);
    if (location.local) {
      SourceValue preVal = preFrame.getLocal(location.slot);
      if (preVal instanceof PreValue val) {
        return new Location(val.local, val.slot);
      }
    }
    else {
      SourceValue preVal = preFrame.getStack(location.slot);
      if (preVal instanceof PreValue val) {
        return new Location(val.local, val.slot);
      }
    }
    return null;
  }
@Nullable
  private static Location previousLocation(Frame<? extends Value> frame, Location location, AbstractInsnNode insn)