private void insertByOffsetEx(int offset, ExpressionStack stack, List<Exprent> exprlist, int copyOffset) {

    int base = VarExprent.STACK_BASE + stack.size();

    LinkedList<VarExprent> lst = new LinkedList<>();

    for (int i = -1; i >= offset; i--) {
      Exprent varEx = stack.pop();
      VarExprent varNew = new VarExprent(base + i + 1, varEx.getExprType(), varProcessor);
      varNew.setStack(true);
      exprlist.add(new AssignmentExprent(varNew, varEx, null));
      lst.add(0, (VarExprent)varNew.copy());
    }

    Exprent exprent = lst.get(lst.size() + copyOffset).copy();
    VarExprent var = new VarExprent(base + offset, exprent.getExprType(), varProcessor);
    var.setStack(true);
    exprlist.add(new AssignmentExprent(var, exprent, null));
    lst.add(0, (VarExprent)var.copy());

    for (VarExprent expr : lst) {
      stack.push(expr);
    }
  }
private void insertByOffsetEx(int offset, ExpressionStack stack, List<Exprent> exprlist, int copyOffset)