Patch 8.1.1006
Problem: Repeated code in quickfix support.
Solution: Move code to functions. (Yegappan Lakshmanan, closes #4091)
Files: src/quickfix.c
*** ../vim-8.1.1006/src/quickfix.c 2019-03-02 07:57:12.236395037 +0100
--- src/quickfix.c 2019-03-13 06:47:54.581059538 +0100
***************
*** 172,178 ****
static win_T *qf_find_win(qf_info_T *qi);
static buf_T *qf_find_buf(qf_info_T *qi);
static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
! static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last);
static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u
*resulting_dir);
static void wipe_dummy_buffer(buf_T *buf, char_u *dirname_start);
static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
--- 172,178 ----
static win_T *qf_find_win(qf_info_T *qi);
static buf_T *qf_find_buf(qf_info_T *qi);
static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last);
! static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last);
static buf_T *load_dummy_buffer(char_u *fname, char_u *dirname_start, char_u
*resulting_dir);
static void wipe_dummy_buffer(buf_T *buf, char_u *dirname_start);
static void unload_dummy_buffer(buf_T *buf, char_u *dirname_start);
***************
*** 1803,1808 ****
--- 1803,1817 ----
}
/*
+ * Return a pointer to the current list in the specified quickfix stack
+ */
+ static qf_list_T *
+ qf_get_curlist(qf_info_T *qi)
+ {
+ return &qi->qf_lists[qi->qf_curlist];
+ }
+
+ /*
* Prepare for adding a new quickfix list. If the current list is in the
* middle of the stack, then all the following lists are freed and then
* the new list is added.
***************
*** 1830,1836 ****
}
else
qi->qf_curlist = qi->qf_listcount++;
! qfl = &qi->qf_lists[qi->qf_curlist];
vim_memset(qfl, 0, (size_t)(sizeof(qf_list_T)));
qf_store_title(qfl, qf_title);
qfl->qfl_type = qi->qfl_type;
--- 1839,1845 ----
}
else
qi->qf_curlist = qi->qf_listcount++;
! qfl = qf_get_curlist(qi);
vim_memset(qfl, 0, (size_t)(sizeof(qf_list_T)));
qf_store_title(qfl, qf_title);
qfl->qfl_type = qi->qfl_type;
***************
*** 2726,2731 ****
--- 2735,2750 ----
}
/*
+ * Set the location list for the specified window to 'qi'.
+ */
+ static void
+ win_set_loclist(win_T *wp, qf_info_T *qi)
+ {
+ wp->w_llist = qi;
+ qi->qf_refcount++;
+ }
+
+ /*
* Find a help window or open one. If 'newwin' is TRUE, then open a new help
* window.
*/
***************
*** 2766,2775 ****
// location list. If the user asks to open a new window, then the new
// window will get a copy of the location list.
if (IS_LL_STACK(qi) && !newwin)
! {
! curwin->w_llist = qi;
! qi->qf_refcount++;
! }
}
if (!p_im)
--- 2785,2791 ----
// location list. If the user asks to open a new window, then the new
// window will get a copy of the location list.
if (IS_LL_STACK(qi) && !newwin)
! win_set_loclist(curwin, qi);
}
if (!p_im)
***************
*** 2848,2859 ****
swb_flags = 0;
RESET_BINDING(curwin);
if (ll_ref != NULL)
- {
// The new window should use the location list from the
// location list window
! curwin->w_llist = ll_ref;
! ll_ref->qf_refcount++;
! }
return OK;
}
--- 2864,2872 ----
swb_flags = 0;
RESET_BINDING(curwin);
if (ll_ref != NULL)
// The new window should use the location list from the
// location list window
! win_set_loclist(curwin, ll_ref);
return OK;
}
***************
*** 2894,2904 ****
// If the location list for the window is not set, then set it
// to the location list from the location window
if (win->w_llist == NULL)
! {
! win->w_llist = ll_ref;
! if (ll_ref != NULL)
! ll_ref->qf_refcount++;
! }
}
/*
--- 2907,2913 ----
// If the location list for the window is not set, then set it
// to the location list from the location window
if (win->w_llist == NULL)
! win_set_loclist(win, ll_ref);
}
/*
***************
*** 3022,3028 ****
int prev_winid,
int *opened_window)
{
! qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
qfltype_T qfl_type = qfl->qfl_type;
int retval = OK;
int old_qf_curlist = qi->qf_curlist;
--- 3031,3037 ----
int prev_winid,
int *opened_window)
{
! qf_list_T *qfl = qf_get_curlist(qi);
qfltype_T qfl_type = qfl->qfl_type;
int retval = OK;
int old_qf_curlist = qi->qf_curlist;
***************
*** 3146,3152 ****
if (!msg_scrolled)
update_topline_redraw();
sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
! qi->qf_lists[qi->qf_curlist].qf_count,
qf_ptr->qf_cleared ? _(" (line deleted)") : "",
(char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
// Add the message, skipping leading whitespace and newlines.
--- 3155,3161 ----
if (!msg_scrolled)
update_topline_redraw();
sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
! qf_get_curlist(qi)->qf_count,
qf_ptr->qf_cleared ? _(" (line deleted)") : "",
(char *)qf_types(qf_ptr->qf_type, qf_ptr->qf_nr));
// Add the message, skipping leading whitespace and newlines.
***************
*** 3311,3317 ****
incr_quickfix_busy();
! qfl = &qi->qf_lists[qi->qf_curlist];
qf_ptr = qfl->qf_ptr;
old_qf_ptr = qf_ptr;
--- 3320,3326 ----
incr_quickfix_busy();
! qfl = qf_get_curlist(qi);
qf_ptr = qfl->qf_ptr;
old_qf_ptr = qf_ptr;
***************
*** 3512,3518 ****
emsg(_(e_trailing));
return;
}
! qfl = &qi->qf_lists[qi->qf_curlist];
if (plus)
{
i = qfl->qf_index;
--- 3521,3527 ----
emsg(_(e_trailing));
return;
}
! qfl = qf_get_curlist(qi);
if (plus)
{
i = qfl->qf_index;
***************
*** 3900,3906 ****
return;
}
! qfl = &qi->qf_lists[qi->qf_curlist];
// Look for an existing quickfix window.
win = qf_find_win(qi);
--- 3909,3915 ----
return;
}
! qfl = qf_get_curlist(qi);
// Look for an existing quickfix window.
win = qf_find_win(qi);
***************
*** 4120,4133 ****
return;
}
! qfl = &qi->qf_lists[qi->qf_curlist];
qf_set_title_var(qfl);
// Save the current index here, as updating the quickfix buffer may free
// the quickfix list
lnum = qfl->qf_index;
// Fill the buffer with the quickfix list.
! qf_fill_buffer(qi, curbuf, NULL);
decr_quickfix_busy();
--- 4129,4142 ----
return;
}
! qfl = qf_get_curlist(qi);
qf_set_title_var(qfl);
// Save the current index here, as updating the quickfix buffer may free
// the quickfix list
lnum = qfl->qf_index;
// Fill the buffer with the quickfix list.
! qf_fill_buffer(qfl, curbuf, NULL);
decr_quickfix_busy();
***************
*** 4195,4201 ****
// In the location list window, use the referenced location list
qi = wp->w_llist_ref;
! return qi->qf_lists[qi->qf_curlist].qf_index;
}
/*
--- 4204,4210 ----
// In the location list window, use the referenced location list
qi = wp->w_llist_ref;
! return qf_get_curlist(qi)->qf_index;
}
/*
***************
*** 4208,4214 ****
int old_qf_index) // previous qf_index or zero
{
win_T *win;
! int qf_index = qi->qf_lists[qi->qf_curlist].qf_index;
// Put the cursor on the current error in the quickfix window, so that
// it's viewable.
--- 4217,4223 ----
int old_qf_index) // previous qf_index or zero
{
win_T *win;
! int qf_index = qf_get_curlist(qi)->qf_index;
// Put the cursor on the current error in the quickfix window, so that
// it's viewable.
***************
*** 4306,4312 ****
{
curwin_save = curwin;
curwin = win;
! qf_set_title_var(&qi->qf_lists[qi->qf_curlist]);
curwin = curwin_save;
}
}
--- 4315,4321 ----
{
curwin_save = curwin;
curwin = win;
! qf_set_title_var(qf_get_curlist(qi));
curwin = curwin_save;
}
}
***************
*** 4333,4339 ****
qf_update_win_titlevar(qi);
! qf_fill_buffer(qi, buf, old_last);
++CHANGEDTICK(buf);
if (old_last == NULL)
--- 4342,4348 ----
qf_update_win_titlevar(qi);
! qf_fill_buffer(qf_get_curlist(qi), buf, old_last);
++CHANGEDTICK(buf);
if (old_last == NULL)
***************
*** 4433,4439 ****
* ml_delete() is used and autocommands will be triggered.
*/
static void
! qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last)
{
linenr_T lnum;
qfline_T *qfp;
--- 4442,4448 ----
* ml_delete() is used and autocommands will be triggered.
*/
static void
! qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last)
{
linenr_T lnum;
qfline_T *qfp;
***************
*** 4453,4461 ****
}
// Check if there is anything to display
! if (!qf_stack_empty(qi))
{
- qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
char_u dirname[MAXPATHL];
*dirname = NUL;
--- 4462,4469 ----
}
// Check if there is anything to display
! if (qfl != NULL)
{
char_u dirname[MAXPATHL];
*dirname = NUL;
***************
*** 4551,4557 ****
{
int curlist;
! if (qi->qf_lists[qi->qf_curlist].qf_id != save_qfid)
{
curlist = qf_id2nr(qi, save_qfid);
if (curlist < 0)
--- 4559,4565 ----
{
int curlist;
! if (qf_get_curlist(qi)->qf_id != save_qfid)
{
curlist = qf_id2nr(qi, save_qfid);
if (curlist < 0)
***************
*** 4769,4779 ****
goto cleanup;
}
if (res >= 0)
! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
curbuf->b_fname, TRUE, curbuf);
--- 4777,4787 ----
goto cleanup;
}
if (res >= 0)
! qf_list_changed(qf_get_curlist(qi));
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qf_get_curlist(qi)->qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
curbuf->b_fname, TRUE, curbuf);
***************
*** 4808,4814 ****
return 0;
}
! qfl = &qi->qf_lists[qi->qf_curlist];
for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count && qfp != NULL;
++i, qfp = qfp->qf_next)
{
--- 4816,4822 ----
return 0;
}
! qfl = qf_get_curlist(qi);
for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count && qfp != NULL;
++i, qfp = qfp->qf_next)
{
***************
*** 4845,4851 ****
return 0;
}
! return qi->qf_lists[qi->qf_curlist].qf_index;
}
/*
--- 4853,4859 ----
return 0;
}
! return qf_get_curlist(qi)->qf_index;
}
/*
***************
*** 4869,4875 ****
return 1;
}
! qfl = &qi->qf_lists[qi->qf_curlist];
qfp = qfl->qf_start;
// check if the list has valid errors
--- 4877,4883 ----
return 1;
}
! qfl = qf_get_curlist(qi);
qfp = qfl->qf_start;
// check if the list has valid errors
***************
*** 4985,4991 ****
// For cfdo and lfdo commands, jump to the nth valid file entry.
if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
|| eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
! errornr = qf_get_nth_valid_entry(&qi->qf_lists[qi->qf_curlist],
eap->addr_count > 0 ? (int)eap->line1 : 1,
eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo);
--- 4993,4999 ----
// For cfdo and lfdo commands, jump to the nth valid file entry.
if (eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo
|| eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo)
! errornr = qf_get_nth_valid_entry(qf_get_curlist(qi),
eap->addr_count > 0 ? (int)eap->line1 : 1,
eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo);
***************
*** 5114,5121 ****
}
}
if (res >= 0)
! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
--- 5122,5129 ----
}
}
if (res >= 0)
! qf_list_changed(qf_get_curlist(qi));
! save_qfid = qf_get_curlist(qi)->qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
***************
*** 5236,5244 ****
}
/*
! * Check whether a quickfix/location list valid. Autocmds may remove or change
! * a quickfix list when vimgrep is running. If the list is not found, create a
! * new list.
*/
static int
vgr_qflist_valid(
--- 5244,5252 ----
}
/*
! * Check whether a quickfix/location list is valid. Autocmds may remove or
! * change a quickfix list when vimgrep is running. If the list is not found,
! * create a new list.
*/
static int
vgr_qflist_valid(
***************
*** 5479,5485 ****
// Remember the current quickfix list identifier, so that we can check for
// autocommands changing the current quickfix list.
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
seconds = (time_t)0;
for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
--- 5487,5493 ----
// Remember the current quickfix list identifier, so that we can check for
// autocommands changing the current quickfix list.
! save_qfid = qf_get_curlist(qi)->qf_id;
seconds = (time_t)0;
for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
***************
*** 5515,5521 ****
decr_quickfix_busy();
goto theend;
}
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
if (buf == NULL)
{
--- 5523,5529 ----
decr_quickfix_busy();
goto theend;
}
! save_qfid = qf_get_curlist(qi)->qf_id;
if (buf == NULL)
{
***************
*** 5595,5601 ****
FreeWild(fcount, fnames);
! qfl = &qi->qf_lists[qi->qf_curlist];
qfl->qf_nonevalid = FALSE;
qfl->qf_ptr = qfl->qf_start;
qfl->qf_index = 1;
--- 5603,5609 ----
FreeWild(fcount, fnames);
! qfl = qf_get_curlist(qi);
qfl->qf_nonevalid = FALSE;
qfl->qf_ptr = qfl->qf_start;
qfl->qf_index = 1;
***************
*** 6602,6608 ****
// If the current list is modified and it is displayed in the quickfix
// window, then Update it.
! if (qi->qf_lists[qi->qf_curlist].qf_id == qfl->qf_id)
qf_win_pos_update(qi, old_qfidx);
return OK;
--- 6610,6616 ----
// If the current list is modified and it is displayed in the quickfix
// window, then Update it.
! if (qf_get_curlist(qi)->qf_id == qfl->qf_id)
qf_win_pos_update(qi, old_qfidx);
return OK;
***************
*** 6668,6674 ****
{
// If the quickfix/location list window is open, then clear it
if (qi->qf_curlist < qi->qf_listcount)
! qf_free(&qi->qf_lists[qi->qf_curlist]);
qf_update_buffer(qi, NULL);
}
--- 6676,6682 ----
{
// If the quickfix/location list window is open, then clear it
if (qi->qf_curlist < qi->qf_listcount)
! qf_free(qf_get_curlist(qi));
qf_update_buffer(qi, NULL);
}
***************
*** 6700,6709 ****
qfwin->w_llist_ref = new_ll;
if (wp != qfwin)
! {
! wp->w_llist = new_ll;
! new_ll->qf_refcount++;
! }
}
}
--- 6708,6714 ----
qfwin->w_llist_ref = new_ll;
if (wp != qfwin)
! win_set_loclist(wp, new_ll);
}
}
***************
*** 6745,6751 ****
{
retval = qf_add_entries(qi, qi->qf_curlist, list, title, action);
if (retval == OK)
! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
}
decr_quickfix_busy();
--- 6750,6756 ----
{
retval = qf_add_entries(qi, qi->qf_curlist, list, title, action);
if (retval == OK)
! qf_list_changed(qf_get_curlist(qi));
}
decr_quickfix_busy();
***************
*** 6900,6910 ****
return;
}
if (res >= 0)
! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
if (au_name != NULL)
{
buf_T *curbuf_old = curbuf;
--- 6905,6915 ----
return;
}
if (res >= 0)
! qf_list_changed(qf_get_curlist(qi));
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qf_get_curlist(qi)->qf_id;
if (au_name != NULL)
{
buf_T *curbuf_old = curbuf;
***************
*** 6991,7001 ****
goto cleanup;
}
if (res >= 0)
! qf_list_changed(&qi->qf_lists[qi->qf_curlist]);
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qi->qf_lists[qi->qf_curlist].qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
curbuf->b_fname, TRUE, curbuf);
--- 6996,7006 ----
goto cleanup;
}
if (res >= 0)
! qf_list_changed(qf_get_curlist(qi));
// Remember the current quickfix list identifier, so that we can
// check for autocommands changing the current quickfix list.
! save_qfid = qf_get_curlist(qi)->qf_id;
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
curbuf->b_fname, TRUE, curbuf);
***************
*** 7259,7265 ****
vim_regfree(regmatch.regprog);
! qfl = &qi->qf_lists[qi->qf_curlist];
qfl->qf_nonevalid = FALSE;
qfl->qf_ptr = qfl->qf_start;
qfl->qf_index = 1;
--- 7264,7270 ----
vim_regfree(regmatch.regprog);
! qfl = qf_get_curlist(qi);
qfl->qf_nonevalid = FALSE;
qfl->qf_ptr = qfl->qf_start;
qfl->qf_index = 1;
*** ../vim-8.1.1006/src/version.c 2019-03-11 08:05:02.203622705 +0100
--- src/version.c 2019-03-13 06:47:34.877223961 +0100
***************
*** 781,782 ****
--- 781,784 ----
{ /* Add new patch number below this line */
+ /**/
+ 1006,
/**/
--
Never go to the toilet in a paperless office.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.