diff options
-rw-r--r-- | src/arglist.c | 2 | ||||
-rw-r--r-- | src/autocmd.c | 12 | ||||
-rw-r--r-- | src/buffer.c | 8 | ||||
-rw-r--r-- | src/change.c | 6 | ||||
-rw-r--r-- | src/channel.c | 51 | ||||
-rw-r--r-- | src/cmdexpand.c | 2 | ||||
-rw-r--r-- | src/diff.c | 15 | ||||
-rw-r--r-- | src/eval.c | 4 | ||||
-rw-r--r-- | src/evalbuffer.c | 6 | ||||
-rw-r--r-- | src/evalfunc.c | 5 | ||||
-rw-r--r-- | src/evalvars.c | 2 | ||||
-rw-r--r-- | src/evalwindow.c | 6 | ||||
-rw-r--r-- | src/ex_cmds2.c | 4 | ||||
-rw-r--r-- | src/filepath.c | 2 | ||||
-rw-r--r-- | src/globals.h | 14 | ||||
-rw-r--r-- | src/gui.c | 2 | ||||
-rw-r--r-- | src/if_py_both.h | 4 | ||||
-rw-r--r-- | src/if_ruby.c | 2 | ||||
-rw-r--r-- | src/insexpand.c | 4 | ||||
-rw-r--r-- | src/list.c | 8 | ||||
-rw-r--r-- | src/misc2.c | 2 | ||||
-rw-r--r-- | src/netbeans.c | 4 | ||||
-rw-r--r-- | src/popupwin.c | 41 | ||||
-rw-r--r-- | src/quickfix.c | 2 | ||||
-rw-r--r-- | src/screen.c | 8 | ||||
-rw-r--r-- | src/sign.c | 25 | ||||
-rw-r--r-- | src/spell.c | 8 | ||||
-rw-r--r-- | src/spellfile.c | 28 | ||||
-rw-r--r-- | src/spellsuggest.c | 2 | ||||
-rw-r--r-- | src/tag.c | 4 | ||||
-rw-r--r-- | src/terminal.c | 14 | ||||
-rw-r--r-- | src/userfunc.c | 6 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/window.c | 12 |
34 files changed, 176 insertions, 141 deletions
diff --git a/src/arglist.c b/src/arglist.c index ad404d8ae9..8e0f4d2e8e 100644 --- a/src/arglist.c +++ b/src/arglist.c @@ -1046,7 +1046,7 @@ do_arg_all( // Move the already present window to below the current window if (curwin->w_arg_idx != i) { - for (wpnext = firstwin; wpnext != NULL; wpnext = wpnext->w_next) + FOR_ALL_WINDOWS(wpnext) { if (wpnext->w_arg_idx == i) { diff --git a/src/autocmd.c b/src/autocmd.c index dce23b8978..d6945f3062 100644 --- a/src/autocmd.c +++ b/src/autocmd.c @@ -235,6 +235,10 @@ struct AutoPatCmd_S static AutoPatCmd *active_apc_list = NULL; // stack of active autocommands +// Macro to loop over all the patterns for an autocmd event +#define FOR_ALL_AUTOCMD_PATTERNS(event, ap) \ + for ((ap) = first_autopat[(int)(event)]; (ap) != NULL; (ap) = (ap)->next) + /* * augroups stores a list of autocmd group names. */ @@ -456,7 +460,7 @@ aubuflocal_remove(buf_T *buf) for (event = (event_T)0; (int)event < (int)NUM_EVENTS; event = (event_T)((int)event + 1)) // loop over all autocommand patterns - for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) + FOR_ALL_AUTOCMD_PATTERNS(event, ap) if (ap->buflocal_nr == buf->b_fnum) { au_remove_pat(ap); @@ -519,7 +523,7 @@ au_del_group(char_u *name) for (event = (event_T)0; (int)event < (int)NUM_EVENTS; event = (event_T)((int)event + 1)) { - for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) + FOR_ALL_AUTOCMD_PATTERNS(event, ap) if (ap->group == i && ap->pat != NULL) { give_warning((char_u *)_("W19: Deleting augroup that is still in use"), TRUE); @@ -1041,7 +1045,7 @@ do_autocmd_event( */ if (*pat == NUL) { - for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) + FOR_ALL_AUTOCMD_PATTERNS(event, ap) { if (forceit) // delete the AutoPat, if it's in the current group { @@ -2400,7 +2404,7 @@ has_autocmd(event_T event, char_u *sfname, buf_T *buf) forward_slash(fname); #endif - for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) + FOR_ALL_AUTOCMD_PATTERNS(event, ap) if (ap->pat != NULL && ap->cmds != NULL && (ap->buflocal_nr == 0 ? match_file_pat(NULL, &ap->reg_prog, diff --git a/src/buffer.c b/src/buffer.c index cec33b0a45..8201157547 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2911,7 +2911,7 @@ buflist_setfpos( { wininfo_T *wip; - for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) + FOR_ALL_BUF_WININFO(buf, wip) if (wip->wi_win == win) break; if (wip == NULL) @@ -3004,7 +3004,7 @@ find_wininfo( { wininfo_T *wip; - for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) + FOR_ALL_BUF_WININFO(buf, wip) if (wip->wi_win == curwin #ifdef FEAT_DIFF && (!skip_diff_buffer || !wininfo_other_tab_diff(wip)) @@ -3019,7 +3019,7 @@ find_wininfo( #ifdef FEAT_DIFF if (skip_diff_buffer) { - for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next) + FOR_ALL_BUF_WININFO(buf, wip) if (!wininfo_other_tab_diff(wip)) break; } @@ -3132,7 +3132,7 @@ buflist_list(exarg_T *eap) if (vim_strchr(eap->arg, 't')) { ga_init2(&buflist, sizeof(buf_T *), 50); - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) { if (ga_grow(&buflist, 1) == OK) ((buf_T **)buflist.ga_data)[buflist.ga_len++] = buf; diff --git a/src/change.c b/src/change.c index 3ee719812f..cfba90b3ca 100644 --- a/src/change.c +++ b/src/change.c @@ -172,8 +172,7 @@ check_recorded_changes( linenr_T prev_lnum; linenr_T prev_lnume; - for (li = buf->b_recorded_changes->lv_first; li != NULL; - li = li->li_next) + FOR_ALL_LIST_ITEMS(buf->b_recorded_changes, li) { prev_lnum = (linenr_T)dict_get_number( li->li_tv.vval.v_dict, (char_u *)"lnum"); @@ -362,8 +361,7 @@ invoke_listeners(buf_T *buf) argv[0].v_type = VAR_NUMBER; argv[0].vval.v_number = buf->b_fnum; // a:bufnr - - for (li = buf->b_recorded_changes->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(buf->b_recorded_changes, li) { varnumber_T lnum; diff --git a/src/channel.c b/src/channel.c index 4db40c9ddc..1dfb28f854 100644 --- a/src/channel.c +++ b/src/channel.c @@ -61,6 +61,12 @@ static ch_part_T channel_part_send(channel_T *channel); static ch_part_T channel_part_read(channel_T *channel); static void free_job_options(jobopt_T *opt); +#define FOR_ALL_CHANNELS(ch) \ + for ((ch) = first_channel; (ch) != NULL; (ch) = (ch)->ch_next) + +#define FOR_ALL_JOBS(job) \ + for ((job) = first_job; (job) != NULL; (job) = (job)->jv_next) + // Whether a redraw is needed for appending a line to a buffer. static int channel_need_redraw = FALSE; @@ -476,7 +482,7 @@ free_unused_channels_contents(int copyID, int mask) // point. ++safe_to_invoke_callback; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) if (!channel_still_useful(ch) && (ch->ch_copyID & mask) != (copyID & mask)) { @@ -520,8 +526,7 @@ channel_fd2channel(sock_T fd, ch_part_T *partp) ch_part_T part; if (fd != INVALID_FD) - for (channel = first_channel; channel != NULL; - channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) if (channel->ch_part[part].ch_fd == fd) @@ -662,7 +667,7 @@ channel_gui_register_all(void) { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_gui_register(channel); } @@ -1569,7 +1574,7 @@ channel_buffer_free(buf_T *buf) channel_T *channel; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) for (part = PART_SOCK; part < PART_COUNT; ++part) { chanpart_T *ch_part = &channel->ch_part[part]; @@ -1610,7 +1615,7 @@ channel_write_any_lines(void) { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_write_input(channel); } @@ -1625,7 +1630,7 @@ channel_write_new_lines(buf_T *buf) // There could be more than one channel for the buffer, loop over all of // them. - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { chanpart_T *in_part = &channel->ch_part[PART_IN]; linenr_T lnum; @@ -2604,7 +2609,7 @@ append_to_buffer(buf_T *buffer, char_u *msg, channel_T *channel, ch_part_T part) // Find channels reading from this buffer and adjust their // next-to-read line number. buffer->b_write_to_channel = TRUE; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3180,7 +3185,7 @@ channel_free_all(void) channel_T *channel; ch_log(NULL, "channel_free_all()"); - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) channel_clear(channel); } #endif @@ -3202,7 +3207,7 @@ channel_fill_wfds(int maxfd_arg, fd_set *wfds) int maxfd = maxfd_arg; channel_T *ch; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3227,7 +3232,7 @@ channel_fill_poll_write(int nfd_in, struct pollfd *fds) int nfd = nfd_in; channel_T *ch; - for (ch = first_channel; ch != NULL; ch = ch->ch_next) + FOR_ALL_CHANNELS(ch) { chanpart_T *in_part = &ch->ch_part[PART_IN]; @@ -3821,7 +3826,7 @@ channel_handle_events(int only_keep_open) ch_part_T part; sock_T fd; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { if (only_keep_open && !channel->ch_keep_open) continue; @@ -3854,7 +3859,7 @@ channel_any_keep_open() { channel_T *channel; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) if (channel->ch_keep_open) return TRUE; return FALSE; @@ -4234,7 +4239,7 @@ channel_poll_setup(int nfd_in, void *fds_in, int *towait) struct pollfd *fds = fds_in; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4281,7 +4286,7 @@ channel_poll_check(int ret_in, void *fds_in) int idx; chanpart_T *in_part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4332,7 +4337,7 @@ channel_select_setup( fd_set *wfds = wfds_in; ch_part_T part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -4381,7 +4386,7 @@ channel_select_check(int ret_in, void *rfds_in, void *wfds_in) ch_part_T part; chanpart_T *in_part; - for (channel = first_channel; channel != NULL; channel = channel->ch_next) + FOR_ALL_CHANNELS(channel) { for (part = PART_SOCK; part < PART_IN; ++part) { @@ -5471,7 +5476,7 @@ job_any_running() { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if (job_still_useful(job)) { ch_log(NULL, "GUI not forking because a job is running"); @@ -5570,7 +5575,7 @@ win32_build_cmd(list_T *l, garray_T *gap) char_u *s; range_list_materialize(l); - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) { s = tv_get_string_chk(&li->li_tv); if (s == NULL) @@ -5695,7 +5700,7 @@ free_unused_jobs_contents(int copyID, int mask) int did_free = FALSE; job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if ((job->jv_copyID & mask) != (copyID & mask) && !job_still_useful(job)) { @@ -5781,7 +5786,7 @@ job_stop_on_exit(void) { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) if (job->jv_status == JOB_STARTED && job->jv_stoponexit != NULL) mch_signal_job(job, job->jv_stoponexit); } @@ -5795,7 +5800,7 @@ has_pending_job(void) { job_T *job; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) // Only should check if the channel has been closed, if the channel is // open the job won't exit. if ((job->jv_status == JOB_STARTED && !job_channel_still_useful(job)) @@ -6589,7 +6594,7 @@ job_info_all(list_T *l) job_T *job; typval_T tv; - for (job = first_job; job != NULL; job = job->jv_next) + FOR_ALL_JOBS(job) { tv.v_type = VAR_JOB; tv.vval.v_job = job; diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 1f70dc58e4..4f9b3cad0c 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -2587,7 +2587,7 @@ ExpandUserList( ga_init2(&ga, (int)sizeof(char *), 3); // Loop over the items in the list. - for (li = retlist->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(retlist, li) { if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL) continue; // Skip non-string items and empty strings diff --git a/src/diff.c b/src/diff.c index f996904543..3d61d49d1c 100644 --- a/src/diff.c +++ b/src/diff.c @@ -90,6 +90,9 @@ static int parse_diff_ed(char_u *line, linenr_T *lnum_orig, long *count_orig, li static int parse_diff_unified(char_u *line, linenr_T *lnum_orig, long *count_orig, linenr_T *lnum_new, long *count_new); static int xdiff_out(void *priv, mmbuffer_t *mb, int nbuf); +#define FOR_ALL_DIFFBLOCKS_IN_TAB(tp, dp) \ + for ((dp) = (tp)->tp_first_diff; (dp) != NULL; (dp) = (dp)->df_next) + /* * Called when deleting or unloading a buffer: No longer make a diff with it. */ @@ -1857,7 +1860,7 @@ diff_check(win_T *wp, linenr_T lnum) #endif // search for a change that includes "lnum" in the list of diffblocks. - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) if (lnum <= dp->df_lnum[idx] + dp->df_count[idx]) break; if (dp == NULL || lnum < dp->df_lnum[idx]) @@ -2069,7 +2072,7 @@ diff_set_topline(win_T *fromwin, win_T *towin) towin->w_topfill = 0; // search for a change that includes "lnum" in the list of diffblocks. - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx]) break; if (dp == NULL) @@ -2374,7 +2377,7 @@ diff_find_change( } // search for a change that includes "lnum" in the list of diffblocks. - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) if (lnum <= dp->df_lnum[idx] + dp->df_count[idx]) break; if (dp == NULL || diff_check_sanity(curtab, dp) == FAIL) @@ -2508,7 +2511,7 @@ diff_infold(win_T *wp, linenr_T lnum) if (curtab->tp_first_diff == NULL) return TRUE; - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) { // If this change is below the line there can't be any further match. if (dp->df_lnum[idx] - diff_context > lnum) @@ -3001,7 +3004,7 @@ diff_get_corresponding_line_int( if (curtab->tp_first_diff == NULL) // no diffs today return lnum1; - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) { if (dp->df_lnum[idx1] > lnum1) return lnum1 - baseline; @@ -3070,7 +3073,7 @@ diff_lnum_win(linenr_T lnum, win_T *wp) ex_diffupdate(NULL); // update after a big change // search for a change that includes "lnum" in the list of diffblocks. - for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next) + FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp) if (lnum <= dp->df_lnum[idx] + dp->df_count[idx]) break; diff --git a/src/eval.c b/src/eval.c index 78673759c1..6d666e6121 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3973,11 +3973,11 @@ garbage_collect(int testing) abort = abort || set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID, NULL, NULL); #ifdef FEAT_PROP_POPUP - for (wp = first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS(wp) abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID, NULL, NULL); FOR_ALL_TABPAGES(tp) - for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS_IN_TAB(tp, wp) abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID, NULL, NULL); #endif diff --git a/src/evalbuffer.c b/src/evalbuffer.c index de6af6ad13..2c20939bd4 100644 --- a/src/evalbuffer.c +++ b/src/evalbuffer.c @@ -117,7 +117,7 @@ find_win_for_curbuf(void) { wininfo_T *wip; - for (wip = curbuf->b_wininfo; wip != NULL; wip = wip->wi_next) + FOR_ALL_BUF_WININFO(curbuf, wip) { if (wip->wi_win != NULL) { @@ -572,11 +572,11 @@ get_buffer_info(buf_T *buf) windows = list_alloc(); if (windows != NULL) { - for (wp = first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS(wp) if (wp->w_buffer == buf) list_append_number(windows, (varnumber_T)wp->w_id); FOR_ALL_TABPAGES(tp) - for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS_IN_TAB(tp, wp) if (wp->w_buffer == buf) list_append_number(windows, (varnumber_T)wp->w_id); diff --git a/src/evalfunc.c b/src/evalfunc.c index 6832bf1714..0db848cb35 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -2831,8 +2831,7 @@ common_function(typval_T *argvars, typval_T *rettv, int is_funcref) if (lv_len > 0) { range_list_materialize(list); - for (li = list->lv_first; li != NULL; - li = li->li_next) + FOR_ALL_LIST_ITEMS(list, li) copy_tv(&li->li_tv, &pt->pt_argv[i++]); } } @@ -5021,7 +5020,7 @@ f_inputlist(typval_T *argvars, typval_T *rettv) l = argvars[0].vval.v_list; range_list_materialize(l); - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li) { msg_puts((char *)tv_get_string(&li->li_tv)); msg_putchar('\n'); diff --git a/src/evalvars.c b/src/evalvars.c index 35d038db37..7e408864ff 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -1698,7 +1698,7 @@ item_lock(typval_T *tv, int deep, int lock) l->lv_lock &= ~VAR_LOCKED; if ((deep < 0 || deep > 1) && l->lv_first != &range_list_item) // recursive: lock/unlock the items the List contains - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) item_lock(&li->li_tv, deep - 1, lock); } break; diff --git a/src/evalwindow.c b/src/evalwindow.c index 534a047e69..ab4ba838f5 100644 --- a/src/evalwindow.c +++ b/src/evalwindow.c @@ -106,14 +106,14 @@ win_id2wp_tp(int id, tabpage_T **tpp) #ifdef FEAT_PROP_POPUP // popup windows are in separate lists FOR_ALL_TABPAGES(tp) - for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS_IN_TAB(tp, wp) if (wp->w_id == id) { if (tpp != NULL) *tpp = tp; return wp; } - for (wp = first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS(wp) if (wp->w_id == id) { if (tpp != NULL) @@ -188,7 +188,7 @@ find_win_by_nr( if (wp->w_id == nr) return wp; // check global popup windows - for (wp = first_popupwin; wp != NULL; wp = wp->w_next) + FOR_ALL_POPUPWINS(wp) if (wp->w_id == nr) return wp; #endif diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index bbaff391e4..59f04a59a8 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -303,7 +303,7 @@ check_changed_any( // buffers in other tabs FOR_ALL_TABPAGES(tp) if (tp != curtab) - for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next) + FOR_ALL_WINDOWS_IN_TAB(tp, wp) add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum); // any other buffer @@ -477,7 +477,7 @@ ex_listdo(exarg_T *eap) // great speed improvement. save_ei = au_event_disable(",Syntax"); - for (buf = firstbuf; buf != NULL; buf = buf->b_next) + FOR_ALL_BUFFERS(buf) buf->b_flags &= ~BF_SYN_SET; buf = curbuf; } diff --git a/src/filepath.c b/src/filepath.c index 49b814fab7..37455a2569 100644 --- a/src/filepath.c +++ b/src/filepath.c @@ -1917,7 +1917,7 @@ f_writefile(typval_T *argvars, typval_T *rettv) if (list == NULL) return; range_list_materialize(list); - for (li = list->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(list, li) if (tv_get_string_chk(&li->li_tv) == NULL) return; } diff --git a/src/globals.h b/src/globals.h index 290f07dd5e..ac48a793d1 100644 --- a/src/globals.h +++ b/src/globals.h @@ -676,6 +676,11 @@ EXTERN win_T *prevwin INIT(= NULL); // previous window for ((wp) = ((tp) == curtab) \ ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) +#define FOR_ALL_POPUPWINS(wp) \ + for ((wp) = first_popupwin; (wp) != NULL; (wp) = (wp)->w_next) +#define FOR_ALL_POPUPWINS_IN_TAB(tp, wp) \ + for ((wp) = (tp)->tp_first_popupwin; (wp) != NULL; (wp) = (wp)->w_next) + EXTERN win_T *curwin; // currently active window @@ -716,6 +721,9 @@ EXTERN buf_T *curbuf INIT(= NULL); // currently active buffer #define FOR_ALL_BUFFERS(buf) for (buf = firstbuf; buf != NULL; buf = buf->b_next) +#define FOR_ALL_BUF_WININFO(buf, wip) \ + for ((wip) = (buf)->b_wininfo; (wip) != NULL; (wip) = (wip)->wi_next) + // Iterate through all the signs placed in a buffer #define FOR_ALL_SIGNS_IN_BUF(buf, sign) \ for (sign = buf->b_signlist; sign != NULL; sign = sign->se_next) @@ -1469,6 +1477,9 @@ EXTERN disptick_T display_tick INIT(= 0); // Line in which spell checking wasn't highlighted because it touched the // cursor position in Insert mode. EXTERN linenr_T spell_redraw_lnum INIT(= 0); + +#define FOR_ALL_SPELL_LANGS(slang) \ + for ((slang) = first_lang; (slang) != NULL; (slang) = slang->sl_next) #endif #ifdef FEAT_CONCEAL @@ -1822,3 +1833,6 @@ EXTERN int did_repeated_msg INIT(= 0); # define REPEATED_MSG_LOOKING 1 # define REPEATED_MSG_SAFESTATE 2 #endif + +#define FOR_ALL_LIST_ITEMS(l, li) \ + for ((li) = (l)->lv_first; (li) != NULL; (li) = (li)->li_next) @@ -4189,7 +4189,7 @@ gui_update_scrollbars( // avoid that moving components around generates events ++hold_gui_events; - for (wp = firstwin; wp != NULL; wp = W_NEXT(wp)) + FOR_ALL_WINDOWS(wp) { if (wp->w_buffer == NULL) // just in case continue; diff --git a/src/if_py_both.h b/src/if_py_both.h index c4d82e7f71..0d70de2309 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -786,7 +786,7 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict) } range_list_materialize(list); - for (curr = list->lv_first; curr != NULL; curr = curr->li_next) + FOR_ALL_LIST_ITEMS(list, curr) { if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict))) { @@ -3035,7 +3035,7 @@ FunctionConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs) return NULL; } curtv = argv; - for (li = argslist->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(argslist, li) copy_tv(&li->li_tv, curtv++); } list_unref(argslist); diff --git a/src/if_ruby.c b/src/if_ruby.c index 80481e7d24..9b6d388a3c 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -1147,7 +1147,7 @@ vim_to_ruby(typval_T *tv) if (list != NULL) { - for (curr = list->lv_first; curr != NULL; curr = curr->li_next) + FOR_ALL_LIST_ITEMS(list, curr) rb_ary_push(result, vim_to_ruby(&curr->li_tv)); } } diff --git a/src/insexpand.c b/src/insexpand.c index 0b2435f4ce..259acb91a5 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -2331,7 +2331,7 @@ ins_compl_add_list(list_T *list) // Go through the List with matches and add each of them. range_list_materialize(list); - for (li = list->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(list, li) { if (ins_compl_add_tv(&li->li_tv, dir) == OK) // if dir was BACKWARD then honor it just once @@ -2513,7 +2513,7 @@ get_complete_info(list_T *what_list, dict_T *retdict) { what_flag = 0; range_list_materialize(what_list); - for (item = what_list->lv_first; item != NULL; item = item->li_next) + FOR_ALL_LIST_ITEMS(what_list, item) { char_u *what = tv_get_string(&item->li_tv); diff --git a/src/list.c b/src/list.c index 918626e169..a7f4d40f7e 100644 --- a/src/list.c +++ b/src/list.c @@ -1109,7 +1109,7 @@ write_list(FILE *fd, list_T *list, int binary) char_u *s; range_list_materialize(list); - for (li = list->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(list, li) { for (s = tv_get_string(&li->li_tv); *s != NUL; ++s) { @@ -1207,7 +1207,7 @@ f_list2str(typval_T *argvars, typval_T *rettv) else char2bytes = mb_char2bytes; - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) { buf[(*char2bytes)(tv_get_number(&li->li_tv), buf)] = NUL; ga_concat(&ga, buf); @@ -1216,7 +1216,7 @@ f_list2str(typval_T *argvars, typval_T *rettv) } else if (ga_grow(&ga, list_len(l) + 1) == OK) { - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) ga_append(&ga, tv_get_number(&li->li_tv)); ga_append(&ga, NUL); } @@ -1579,7 +1579,7 @@ do_sort_uniq(typval_T *argvars, typval_T *rettv, int sort) if (sort) { // sort(): ptrs will be the list to sort - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) { ptrs[i].item = li; ptrs[i].idx = i; diff --git a/src/misc2.c b/src/misc2.c index 864d1fd40b..4918189275 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -4348,7 +4348,7 @@ build_argv_from_list(list_T *l, char ***argv, int *argc) if (*argv == NULL) return FAIL; *argc = 0; - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) { s = tv_get_string_chk(&li->li_tv); if (s == NULL) diff --git a/src/netbeans.c b/src/netbeans.c index f55f388e8a..4d79a2eafa 100644 --- a/src/netbeans.c +++ b/src/netbeans.c @@ -2982,7 +2982,7 @@ netbeans_is_guarded(linenr_T top, linenr_T bot) if (!NETBEANS_OPEN) return FALSE; - for (p = curbuf->b_signlist; p != NULL; p = p->se_next) + FOR_ALL_SIGNS_IN_BUF(curbuf, p) if (p->se_id >= GUARDEDOFFSET) for (lnum = top + 1; lnum < bot; lnum++) if (lnum == p->se_lnum) @@ -3095,7 +3095,7 @@ netbeans_gutter_click(linenr_T lnum) if (!NETBEANS_OPEN) return; - for (p = curbuf->b_signlist; p != NULL; p = p->se_next) + FOR_ALL_SIGNS_IN_BUF(curbuf, p) { if (p->se_lnum == lnum && p->se_next && p->se_next->se_lnum == lnum) { diff --git a/src/popupwin.c b/src/popupwin.c index 947dd91bc1..3a0dcb96aa 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -835,8 +835,7 @@ apply_general_options(win_T *wp, dict_T *dict) listitem_T *li; ok = TRUE; - for (li = di->di_tv.vval.v_list->lv_first; li != NULL; - li = li->li_next) + FOR_ALL_LIST_ITEMS(di->di_tv.vval.v_list, li) { if (li->li_tv.v_type != VAR_LIST || li->li_tv.vval.v_list == NULL @@ -967,7 +966,7 @@ add_popup_strings(buf_T *buf, list_T *l) linenr_T lnum = 0; char_u *p; - for (li = l->lv_first; li != NULL; li = li->li_next) + FOR_ALL_LIST_ITEMS(l, li) if (li->li_tv.v_type == VAR_STRING) { p = li->li_tv.vval.v_string; @@ -989,7 +988,7 @@ add_popup_dicts(buf_T *buf, list_T *l) dict_T *dict; // first add the text lines |