# HG changeset patch # User Bram Moolenaar # Date 1590864303 -7200 # Node ID d571231175b477c88cc9ca1026d0265b7c65bf8d # Parent d14c5a4a8dfaccbc4ff750fe8d6e21dea3b3092e patch 8.2.0853: ml_delete() often called with FALSE argument Commit: https://github.com/vim/vim/commit/ca70c07b72c24aae3d141e67d08f50361f051af5 Author: Bram Moolenaar Date: Sat May 30 20:30:46 2020 +0200 patch 8.2.0853: ml_delete() often called with FALSE argument Problem: ml_delete() often called with FALSE argument. Solution: Use ml_delete_flags(x, ML_DEL_MESSAGE) when argument is TRUE. diff --git a/src/buffer.c b/src/buffer.c --- a/src/buffer.c +++ b/src/buffer.c @@ -103,13 +103,13 @@ read_buffer( { // Delete the binary lines. while (--line_count >= 0) - ml_delete((linenr_T)1, FALSE); + ml_delete((linenr_T)1); } else { // Delete the converted lines. while (curbuf->b_ml.ml_line_count > line_count) - ml_delete(line_count, FALSE); + ml_delete(line_count); } // Put the cursor on the first line. curwin->w_cursor.lnum = 1; diff --git a/src/change.c b/src/change.c --- a/src/change.c +++ b/src/change.c @@ -2317,7 +2317,7 @@ del_lines(long nlines, int undo) if (curbuf->b_ml.ml_flags & ML_EMPTY) // nothing to delete break; - ml_delete(first, TRUE); + ml_delete_flags(first, ML_DEL_MESSAGE); ++n; // If we delete the last line in the file, stop diff --git a/src/diff.c b/src/diff.c --- a/src/diff.c +++ b/src/diff.c @@ -2764,7 +2764,7 @@ ex_diffgetput(exarg_T *eap) { // remember deleting the last line of the buffer buf_empty = curbuf->b_ml.ml_line_count == 1; - ml_delete(lnum, FALSE); + ml_delete(lnum); --added; } for (i = 0; i < dp->df_count[idx_from] - start_skip - end_skip; ++i) @@ -2786,7 +2786,7 @@ ex_diffgetput(exarg_T *eap) // Added the first line into an empty buffer, need to // delete the dummy empty line. buf_empty = FALSE; - ml_delete((linenr_T)2, FALSE); + ml_delete((linenr_T)2); } } } diff --git a/src/evalbuffer.c b/src/evalbuffer.c --- a/src/evalbuffer.c +++ b/src/evalbuffer.c @@ -513,7 +513,7 @@ f_deletebufline(typval_T *argvars, typva } for (lnum = first; lnum <= last; ++lnum) - ml_delete(first, TRUE); + ml_delete_flags(first, ML_DEL_MESSAGE); FOR_ALL_TAB_WINDOWS(tp, wp) if (wp->w_buffer == buf) diff --git a/src/ex_cmds.c b/src/ex_cmds.c --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -633,7 +633,7 @@ ex_sort(exarg_T *eap) // delete the original lines if appending worked if (i == count) for (i = 0; i < count; ++i) - ml_delete(eap->line1, FALSE); + ml_delete(eap->line1); else count = 0; @@ -779,7 +779,7 @@ do_move(linenr_T line1, linenr_T line2, return FAIL; for (l = line1; l <= line2; l++) - ml_delete(line1 + extra, TRUE); + ml_delete_flags(line1 + extra, ML_DEL_MESSAGE); if (!global_busy && num_lines > p_report) smsg(NGETTEXT("%ld line moved", "%ld lines moved", num_lines), @@ -3280,7 +3280,7 @@ ex_append(exarg_T *eap) if (empty) { - ml_delete(2L, FALSE); + ml_delete(2L); empty = FALSE; } } @@ -3331,7 +3331,7 @@ ex_change(exarg_T *eap) { if (curbuf->b_ml.ml_flags & ML_EMPTY) // nothing to delete break; - ml_delete(eap->line1, FALSE); + ml_delete(eap->line1); } // make sure the cursor is not beyond the end of the file now @@ -4531,7 +4531,7 @@ skip: if (u_savedel(lnum, nmatch_tl) != OK) break; for (i = 0; i < nmatch_tl; ++i) - ml_delete(lnum, (int)FALSE); + ml_delete(lnum); mark_adjust(lnum, lnum + nmatch_tl - 1, (long)MAXLNUM, -nmatch_tl); if (subflags.do_ask) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -6557,7 +6557,7 @@ ex_read(exarg_T *eap) lnum = 1; if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK) { - ml_delete(lnum, FALSE); + ml_delete(lnum); if (curwin->w_cursor.lnum > 1 && curwin->w_cursor.lnum >= lnum) --curwin->w_cursor.lnum; diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -862,7 +862,7 @@ retry: } // Delete the previously read lines. while (lnum > from) - ml_delete(lnum--, FALSE); + ml_delete(lnum--); file_rewind = FALSE; if (set_options) { @@ -2292,7 +2292,7 @@ failed: #ifdef FEAT_NETBEANS_INTG netbeansFireChanges = 0; #endif - ml_delete(curbuf->b_ml.ml_line_count, FALSE); + ml_delete(curbuf->b_ml.ml_line_count); #ifdef FEAT_NETBEANS_INTG netbeansFireChanges = 1; #endif @@ -3933,7 +3933,7 @@ move_lines(buf_T *frombuf, buf_T *tobuf) { curbuf = frombuf; for (lnum = curbuf->b_ml.ml_line_count; lnum > 0; --lnum) - if (ml_delete(lnum, FALSE) == FAIL) + if (ml_delete(lnum) == FAIL) { // Oops! We could try putting back the saved lines, but that // might fail again... @@ -4329,7 +4329,7 @@ buf_reload(buf_T *buf, int orig_mode) // Put the text back from the save buffer. First // delete any lines that readfile() added. while (!BUFEMPTY()) - if (ml_delete(buf->b_ml.ml_line_count, FALSE) == FAIL) + if (ml_delete(buf->b_ml.ml_line_count) == FAIL) break; (void)move_lines(savebuf, buf); } diff --git a/src/if_lua.c b/src/if_lua.c --- a/src/if_lua.c +++ b/src/if_lua.c @@ -1341,7 +1341,7 @@ luaV_buffer_newindex(lua_State *L) curbuf = buf; luaL_error(L, "cannot save undo information"); } - else if (ml_delete(n, FALSE) == FAIL) + else if (ml_delete(n) == FAIL) { curbuf = buf; luaL_error(L, "cannot delete line"); diff --git a/src/if_mzsch.c b/src/if_mzsch.c --- a/src/if_mzsch.c +++ b/src/if_mzsch.c @@ -2468,7 +2468,7 @@ set_buffer_line(void *data, int argc, Sc curbuf = savebuf; raise_vim_exn(_("cannot save undo information")); } - else if (ml_delete((linenr_T)n, FALSE) == FAIL) + else if (ml_delete((linenr_T)n) == FAIL) { curbuf = savebuf; raise_vim_exn(_("cannot delete line")); @@ -2597,7 +2597,7 @@ set_buffer_line_list(void *data, int arg else { for (i = 0; i < old_len; i++) - if (ml_delete((linenr_T)lo, FALSE) == FAIL) + if (ml_delete((linenr_T)lo) == FAIL) { curbuf = savebuf; raise_vim_exn(_("cannot delete line")); @@ -2665,7 +2665,7 @@ set_buffer_line_list(void *data, int arg */ for (i = 0; i < old_len - new_len; ++i) { - if (ml_delete((linenr_T)lo, FALSE) == FAIL) + if (ml_delete((linenr_T)lo) == FAIL) { curbuf = savebuf; free_array(array); diff --git a/src/if_perl.xs b/src/if_perl.xs --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -1067,7 +1067,7 @@ replace_line(linenr_T *line, linenr_T *e } else { - ml_delete(*line, FALSE); + ml_delete(*line); deleted_lines_mark(*line, 1L); --(*end); --(*line); @@ -1862,7 +1862,7 @@ Delete(vimbuf, ...) if (u_savedel(lnum, 1) == OK) { - ml_delete(lnum, 0); + ml_delete(lnum); check_cursor(); deleted_lines_mark(lnum, 1L); } diff --git a/src/if_py_both.h b/src/if_py_both.h --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -4399,7 +4399,7 @@ SetBufferLine(buf_T *buf, PyInt n, PyObj if (u_savedel((linenr_T)n, 1L) == FAIL) RAISE_UNDO_FAIL; - else if (ml_delete((linenr_T)n, FALSE) == FAIL) + else if (ml_delete((linenr_T)n) == FAIL) RAISE_DELETE_LINE_FAIL; else { @@ -4512,7 +4512,7 @@ SetBufferLineList( { for (i = 0; i < n; ++i) { - if (ml_delete((linenr_T)lo, FALSE) == FAIL) + if (ml_delete((linenr_T)lo) == FAIL) { RAISE_DELETE_LINE_FAIL; break; @@ -4588,7 +4588,7 @@ SetBufferLineList( if (!PyErr_Occurred()) { for (i = 0; i < old_len - new_len; ++i) - if (ml_delete((linenr_T)lo, FALSE) == FAIL) + if (ml_delete((linenr_T)lo) == FAIL) { RAISE_DELETE_LINE_FAIL; break; diff --git a/src/if_ruby.c b/src/if_ruby.c --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -1442,7 +1442,7 @@ buffer_delete(VALUE self, VALUE num) if (u_savedel(n, 1) == OK) { - ml_delete(n, 0); + ml_delete(n); // Changes to non-active buffers should properly refresh // SegPhault - 01/09/05 diff --git a/src/if_tcl.c b/src/if_tcl.c --- a/src/if_tcl.c +++ b/src/if_tcl.c @@ -735,7 +735,7 @@ bufselfcmd( i = n; do { - if (ml_delete((linenr_T)i, FALSE) != OK) + if (ml_delete((linenr_T)i) != OK) goto setListError; ++n; } while (n <= val2); @@ -783,7 +783,7 @@ bufselfcmd( } for (i = 0; i < n; i++) { - ml_delete((linenr_T)val1, FALSE); + ml_delete((linenr_T)val1); err = vimerror(interp); if (err != TCL_OK) break; diff --git a/src/memline.c b/src/memline.c --- a/src/memline.c +++ b/src/memline.c @@ -1386,7 +1386,7 @@ ml_recover(int checkext) * contents of the current buffer. */ while (!(curbuf->b_ml.ml_flags & ML_EMPTY)) - ml_delete((linenr_T)1, FALSE); + ml_delete((linenr_T)1); /* * Try reading the original file to obtain the values of 'fileformat', @@ -1664,7 +1664,7 @@ ml_recover(int checkext) */ while (curbuf->b_ml.ml_line_count > lnum && !(curbuf->b_ml.ml_flags & ML_EMPTY)) - ml_delete(curbuf->b_ml.ml_line_count, FALSE); + ml_delete(curbuf->b_ml.ml_line_count); curbuf->b_flags |= BF_RECOVERED; recoverymode = FALSE; @@ -3705,9 +3705,9 @@ theend: * return FAIL for failure, OK otherwise */ int -ml_delete(linenr_T lnum, int message) +ml_delete(linenr_T lnum) { - return ml_delete_flags(lnum, message ? ML_DEL_MESSAGE : 0); + return ml_delete_flags(lnum, 0); } /* diff --git a/src/normal.c b/src/normal.c --- a/src/normal.c +++ b/src/normal.c @@ -7413,7 +7413,7 @@ nv_put_opt(cmdarg_T *cap, int fix_indent // line that needs to be deleted now. if (empty && *ml_get(curbuf->b_ml.ml_line_count) == NUL) { - ml_delete(curbuf->b_ml.ml_line_count, TRUE); + ml_delete_flags(curbuf->b_ml.ml_line_count, ML_DEL_MESSAGE); deleted_lines(curbuf->b_ml.ml_line_count + 1, 1); // If the cursor was in that line, move it to the end of the last diff --git a/src/popupmenu.c b/src/popupmenu.c --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -817,7 +817,7 @@ pum_set_selected(int n, int repeat UNUSE { // Already a "wipeout" buffer, make it empty. while (!BUFEMPTY()) - ml_delete((linenr_T)1, FALSE); + ml_delete((linenr_T)1); } else { @@ -860,7 +860,7 @@ pum_set_selected(int n, int repeat UNUSE } } // delete the empty last line - ml_delete(curbuf->b_ml.ml_line_count, FALSE); + ml_delete(curbuf->b_ml.ml_line_count); // Increase the height of the preview window to show the // text, but no more than 'previewheight' lines. diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -1537,7 +1537,7 @@ popup_set_buffer_text(buf_T *buf, typval // Clear the buffer, then replace the lines. curbuf = buf; for (lnum = buf->b_ml.ml_line_count; lnum > 0; --lnum) - ml_delete(lnum, FALSE); + ml_delete(lnum); curbuf = curwin->w_buffer; // Add text to the buffer. @@ -1563,7 +1563,7 @@ popup_set_buffer_text(buf_T *buf, typval // delete the line that was in the empty buffer curbuf = buf; - ml_delete(buf->b_ml.ml_line_count, FALSE); + ml_delete(buf->b_ml.ml_line_count); curbuf = curwin->w_buffer; } diff --git a/src/proto/memline.pro b/src/proto/memline.pro --- a/src/proto/memline.pro +++ b/src/proto/memline.pro @@ -26,7 +26,7 @@ int ml_append_flags(linenr_T lnum, char_ int ml_append_buf(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile); int ml_replace(linenr_T lnum, char_u *line, int copy); int ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int has_props, int copy); -int ml_delete(linenr_T lnum, int message); +int ml_delete(linenr_T lnum); int ml_delete_flags(linenr_T lnum, int flags); void ml_setmarked(linenr_T lnum); linenr_T ml_firstmarked(void); diff --git a/src/quickfix.c b/src/quickfix.c --- a/src/quickfix.c +++ b/src/quickfix.c @@ -4499,7 +4499,7 @@ qf_fill_buffer(qf_list_T *qfl, buf_T *bu // delete all existing lines while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0) - (void)ml_delete((linenr_T)1, FALSE); + (void)ml_delete((linenr_T)1); } // Check if there is anything to display @@ -4533,7 +4533,7 @@ qf_fill_buffer(qf_list_T *qfl, buf_T *bu if (old_last == NULL) // Delete the empty line which is now at the end - (void)ml_delete(lnum + 1, FALSE); + (void)ml_delete(lnum + 1); } // correct cursor position diff --git a/src/spell.c b/src/spell.c --- a/src/spell.c +++ b/src/spell.c @@ -3810,7 +3810,7 @@ ex_spelldump(exarg_T *eap) // Delete the empty line that we started with. if (curbuf->b_ml.ml_line_count > 1) - ml_delete(curbuf->b_ml.ml_line_count, FALSE); + ml_delete(curbuf->b_ml.ml_line_count); redraw_later(NOT_VALID); } diff --git a/src/terminal.c b/src/terminal.c --- a/src/terminal.c +++ b/src/terminal.c @@ -1609,7 +1609,7 @@ add_scrollback_line_to_buffer(term_T *te { // Delete the empty line that was in the empty buffer. curbuf = buf; - ml_delete(1, FALSE); + ml_delete(1); curbuf = curwin->w_buffer; } } @@ -1683,7 +1683,7 @@ cleanup_scrollback(term_T *term) while (curbuf->b_ml.ml_line_count > term->tl_scrollback_scrolled && gap->ga_len > 0) { - ml_delete(curbuf->b_ml.ml_line_count, FALSE); + ml_delete(curbuf->b_ml.ml_line_count); line = (sb_line_T *)gap->ga_data + gap->ga_len - 1; vim_free(line->sb_cells); --gap->ga_len; @@ -3142,7 +3142,7 @@ limit_scrollback(term_T *term, garray_T { vim_free(((sb_line_T *)gap->ga_data + i)->sb_cells); if (update_buffer) - ml_delete(1, FALSE); + ml_delete(1); } curbuf = curwin->w_buffer; @@ -5148,7 +5148,7 @@ term_load_dump(typval_T *argvars, typval { buf = curbuf; while (!(curbuf->b_ml.ml_flags & ML_EMPTY)) - ml_delete((linenr_T)1, FALSE); + ml_delete((linenr_T)1); free_scrollback(curbuf->b_term); redraw_later(NOT_VALID); } @@ -5183,7 +5183,7 @@ term_load_dump(typval_T *argvars, typval } // Delete the empty line that was in the empty buffer. - ml_delete(1, FALSE); + ml_delete(1); // For term_dumpload() we are done here. if (!do_diff) @@ -5374,7 +5374,7 @@ term_swap_diff() if (p == NULL) return OK; ml_append(bot_start, p, 0, FALSE); - ml_delete(1, FALSE); + ml_delete(1); vim_free(p); } @@ -5384,7 +5384,7 @@ term_swap_diff() p = vim_strsave(ml_get(bot_start + lnum)); if (p == NULL) return OK; - ml_delete(bot_start + lnum, FALSE); + ml_delete(bot_start + lnum); ml_append(lnum - 1, p, 0, FALSE); vim_free(p); } @@ -5394,14 +5394,14 @@ term_swap_diff() if (p == NULL) return OK; ml_append(line_count - top_rows - 1, p, 0, FALSE); - ml_delete(bot_rows + 1, FALSE); + ml_delete(bot_rows + 1); vim_free(p); // move bottom title to top p = vim_strsave(ml_get(line_count - top_rows)); if (p == NULL) return OK; - ml_delete(line_count - top_rows, FALSE); + ml_delete(line_count - top_rows); ml_append(bot_rows, p, 0, FALSE); vim_free(p); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 853, +/**/ 852, /**/ 851,