Patch 8.2.0500
Problem:    Using the same loop in many places.
Solution:   Define more FOR_ALL macros. (Yegappan Lakshmanan, closes #5339)
Files:      src/arglist.c, src/autocmd.c, src/buffer.c, src/change.c,
            src/channel.c, src/cmdexpand.c, src/diff.c, src/eval.c,
            src/evalbuffer.c, src/evalfunc.c, src/evalvars.c,
            src/evalwindow.c, src/ex_cmds2.c, src/filepath.c, src/globals.h,
            src/gui.c, src/if_py_both.h, src/if_ruby.c, src/insexpand.c,
            src/list.c, src/misc2.c, src/netbeans.c, src/popupwin.c,
            src/quickfix.c, src/screen.c, src/sign.c, src/spell.c,
            src/spellfile.c, src/spellsuggest.c, src/tag.c, src/terminal.c,
            src/userfunc.c, src/window.c


*** ../vim-8.2.0499/src/arglist.c       2020-02-01 23:04:20.120422629 +0100
--- src/arglist.c       2020-04-02 18:38:45.110510356 +0200
***************
*** 1046,1052 ****
            // 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)
                {
                    if (wpnext->w_arg_idx == i)
                    {
--- 1046,1052 ----
            // Move the already present window to below the current window
            if (curwin->w_arg_idx != i)
            {
!               FOR_ALL_WINDOWS(wpnext)
                {
                    if (wpnext->w_arg_idx == i)
                    {
*** ../vim-8.2.0499/src/autocmd.c       2020-01-26 22:43:27.484098902 +0100
--- src/autocmd.c       2020-04-02 18:42:55.505574595 +0200
***************
*** 235,240 ****
--- 235,244 ----
  
  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,462 ****
      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)
            if (ap->buflocal_nr == buf->b_fnum)
            {
                au_remove_pat(ap);
--- 460,466 ----
      for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
                                            event = (event_T)((int)event + 1))
        // loop over all autocommand patterns
!       FOR_ALL_AUTOCMD_PATTERNS(event, ap)
            if (ap->buflocal_nr == buf->b_fnum)
            {
                au_remove_pat(ap);
***************
*** 519,525 ****
        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)
                if (ap->group == i && ap->pat != NULL)
                {
                    give_warning((char_u *)_("W19: Deleting augroup that is 
still in use"), TRUE);
--- 523,529 ----
        for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
                                            event = (event_T)((int)event + 1))
        {
!           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,1047 ****
       */
      if (*pat == NUL)
      {
!       for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next)
        {
            if (forceit)  // delete the AutoPat, if it's in the current group
            {
--- 1045,1051 ----
       */
      if (*pat == NUL)
      {
!       FOR_ALL_AUTOCMD_PATTERNS(event, ap)
        {
            if (forceit)  // delete the AutoPat, if it's in the current group
            {
***************
*** 2400,2406 ****
      forward_slash(fname);
  #endif
  
!     for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next)
        if (ap->pat != NULL && ap->cmds != NULL
              && (ap->buflocal_nr == 0
                ? match_file_pat(NULL, &ap->reg_prog,
--- 2404,2410 ----
      forward_slash(fname);
  #endif
  
!     FOR_ALL_AUTOCMD_PATTERNS(event, ap)
        if (ap->pat != NULL && ap->cmds != NULL
              && (ap->buflocal_nr == 0
                ? match_file_pat(NULL, &ap->reg_prog,
*** ../vim-8.2.0499/src/buffer.c        2020-03-27 20:58:33.345005916 +0100
--- src/buffer.c        2020-04-02 18:38:45.110510356 +0200
***************
*** 2911,2917 ****
  {
      wininfo_T *wip;
  
!     for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
        if (wip->wi_win == win)
            break;
      if (wip == NULL)
--- 2911,2917 ----
  {
      wininfo_T *wip;
  
!     FOR_ALL_BUF_WININFO(buf, wip)
        if (wip->wi_win == win)
            break;
      if (wip == NULL)
***************
*** 3004,3010 ****
  {
      wininfo_T *wip;
  
!     for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
        if (wip->wi_win == curwin
  #ifdef FEAT_DIFF
                && (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
--- 3004,3010 ----
  {
      wininfo_T *wip;
  
!     FOR_ALL_BUF_WININFO(buf, wip)
        if (wip->wi_win == curwin
  #ifdef FEAT_DIFF
                && (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
***************
*** 3019,3025 ****
  #ifdef FEAT_DIFF
        if (skip_diff_buffer)
        {
!           for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
                if (!wininfo_other_tab_diff(wip))
                    break;
        }
--- 3019,3025 ----
  #ifdef FEAT_DIFF
        if (skip_diff_buffer)
        {
!           FOR_ALL_BUF_WININFO(buf, wip)
                if (!wininfo_other_tab_diff(wip))
                    break;
        }
***************
*** 3132,3138 ****
      if (vim_strchr(eap->arg, 't'))
      {
        ga_init2(&buflist, sizeof(buf_T *), 50);
!       for (buf = firstbuf; buf != NULL; buf = buf->b_next)
        {
            if (ga_grow(&buflist, 1) == OK)
                ((buf_T **)buflist.ga_data)[buflist.ga_len++] = buf;
--- 3132,3138 ----
      if (vim_strchr(eap->arg, 't'))
      {
        ga_init2(&buflist, sizeof(buf_T *), 50);
!       FOR_ALL_BUFFERS(buf)
        {
            if (ga_grow(&buflist, 1) == OK)
                ((buf_T **)buflist.ga_data)[buflist.ga_len++] = buf;
*** ../vim-8.2.0499/src/change.c        2020-02-26 22:05:57.094386589 +0100
--- src/change.c        2020-04-02 18:38:45.110510356 +0200
***************
*** 172,179 ****
        linenr_T    prev_lnum;
        linenr_T    prev_lnume;
  
!       for (li = buf->b_recorded_changes->lv_first; li != NULL;
!                                                             li = li->li_next)
        {
            prev_lnum = (linenr_T)dict_get_number(
                                      li->li_tv.vval.v_dict, (char_u *)"lnum");
--- 172,178 ----
        linenr_T    prev_lnum;
        linenr_T    prev_lnume;
  
!       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,369 ****
      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)
      {
        varnumber_T lnum;
  
--- 361,367 ----
      argv[0].v_type = VAR_NUMBER;
      argv[0].vval.v_number = buf->b_fnum; // a:bufnr
  
!     FOR_ALL_LIST_ITEMS(buf->b_recorded_changes, li)
      {
        varnumber_T lnum;
  
*** ../vim-8.2.0499/src/channel.c       2020-03-28 18:06:25.751664246 +0100
--- src/channel.c       2020-04-02 18:45:02.641089649 +0200
***************
*** 61,66 ****
--- 61,72 ----
  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,482 ****
      // point.
      ++safe_to_invoke_callback;
  
!     for (ch = first_channel; ch != NULL; ch = ch->ch_next)
        if (!channel_still_useful(ch)
                                 && (ch->ch_copyID & mask) != (copyID & mask))
        {
--- 482,488 ----
      // point.
      ++safe_to_invoke_callback;
  
!     FOR_ALL_CHANNELS(ch)
        if (!channel_still_useful(ch)
                                 && (ch->ch_copyID & mask) != (copyID & mask))
        {
***************
*** 520,527 ****
      ch_part_T part;
  
      if (fd != INVALID_FD)
!       for (channel = first_channel; channel != NULL;
!                                                  channel = channel->ch_next)
        {
            for (part = PART_SOCK; part < PART_IN; ++part)
                if (channel->ch_part[part].ch_fd == fd)
--- 526,532 ----
      ch_part_T part;
  
      if (fd != INVALID_FD)
!       FOR_ALL_CHANNELS(channel)
        {
            for (part = PART_SOCK; part < PART_IN; ++part)
                if (channel->ch_part[part].ch_fd == fd)
***************
*** 662,668 ****
  {
      channel_T *channel;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
        channel_gui_register(channel);
  }
  
--- 667,673 ----
  {
      channel_T *channel;
  
!     FOR_ALL_CHANNELS(channel)
        channel_gui_register(channel);
  }
  
***************
*** 1569,1575 ****
      channel_T *channel;
      ch_part_T part;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
        for (part = PART_SOCK; part < PART_COUNT; ++part)
        {
            chanpart_T  *ch_part = &channel->ch_part[part];
--- 1574,1580 ----
      channel_T *channel;
      ch_part_T part;
  
!     FOR_ALL_CHANNELS(channel)
        for (part = PART_SOCK; part < PART_COUNT; ++part)
        {
            chanpart_T  *ch_part = &channel->ch_part[part];
***************
*** 1610,1616 ****
  {
      channel_T *channel;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
        channel_write_input(channel);
  }
  
--- 1615,1621 ----
  {
      channel_T *channel;
  
!     FOR_ALL_CHANNELS(channel)
        channel_write_input(channel);
  }
  
***************
*** 1625,1631 ****
  
      // 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)
      {
        chanpart_T  *in_part = &channel->ch_part[PART_IN];
        linenr_T    lnum;
--- 1630,1636 ----
  
      // There could be more than one channel for the buffer, loop over all of
      // them.
!     FOR_ALL_CHANNELS(channel)
      {
        chanpart_T  *in_part = &channel->ch_part[PART_IN];
        linenr_T    lnum;
***************
*** 2604,2610 ****
        // 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)
        {
            chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
--- 2609,2615 ----
        // Find channels reading from this buffer and adjust their
        // next-to-read line number.
        buffer->b_write_to_channel = TRUE;
!       FOR_ALL_CHANNELS(ch)
        {
            chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
***************
*** 3180,3186 ****
      channel_T *channel;
  
      ch_log(NULL, "channel_free_all()");
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
        channel_clear(channel);
  }
  #endif
--- 3185,3191 ----
      channel_T *channel;
  
      ch_log(NULL, "channel_free_all()");
!     FOR_ALL_CHANNELS(channel)
        channel_clear(channel);
  }
  #endif
***************
*** 3202,3208 ****
      int               maxfd = maxfd_arg;
      channel_T *ch;
  
!     for (ch = first_channel; ch != NULL; ch = ch->ch_next)
      {
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
--- 3207,3213 ----
      int               maxfd = maxfd_arg;
      channel_T *ch;
  
!     FOR_ALL_CHANNELS(ch)
      {
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
***************
*** 3227,3233 ****
      int               nfd = nfd_in;
      channel_T *ch;
  
!     for (ch = first_channel; ch != NULL; ch = ch->ch_next)
      {
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
--- 3232,3238 ----
      int               nfd = nfd_in;
      channel_T *ch;
  
!     FOR_ALL_CHANNELS(ch)
      {
        chanpart_T  *in_part = &ch->ch_part[PART_IN];
  
***************
*** 3821,3827 ****
      ch_part_T part;
      sock_T    fd;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
      {
        if (only_keep_open && !channel->ch_keep_open)
            continue;
--- 3826,3832 ----
      ch_part_T part;
      sock_T    fd;
  
!     FOR_ALL_CHANNELS(channel)
      {
        if (only_keep_open && !channel->ch_keep_open)
            continue;
***************
*** 3854,3860 ****
  {
      channel_T *channel;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
        if (channel->ch_keep_open)
            return TRUE;
      return FALSE;
--- 3859,3865 ----
  {
      channel_T *channel;
  
!     FOR_ALL_CHANNELS(channel)
        if (channel->ch_keep_open)
            return TRUE;
      return FALSE;
***************
*** 4234,4240 ****
      struct    pollfd *fds = fds_in;
      ch_part_T part;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
--- 4239,4245 ----
      struct    pollfd *fds = fds_in;
      ch_part_T part;
  
!     FOR_ALL_CHANNELS(channel)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
***************
*** 4281,4287 ****
      int               idx;
      chanpart_T        *in_part;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
--- 4286,4292 ----
      int               idx;
      chanpart_T        *in_part;
  
!     FOR_ALL_CHANNELS(channel)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
***************
*** 4332,4338 ****
      fd_set    *wfds = wfds_in;
      ch_part_T part;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
--- 4337,4343 ----
      fd_set    *wfds = wfds_in;
      ch_part_T part;
  
!     FOR_ALL_CHANNELS(channel)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
***************
*** 4381,4387 ****
      ch_part_T part;
      chanpart_T        *in_part;
  
!     for (channel = first_channel; channel != NULL; channel = channel->ch_next)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
--- 4386,4392 ----
      ch_part_T part;
      chanpart_T        *in_part;
  
!     FOR_ALL_CHANNELS(channel)
      {
        for (part = PART_SOCK; part < PART_IN; ++part)
        {
***************
*** 5471,5477 ****
  {
      job_T     *job;
  
!     for (job = first_job; job != NULL; job = job->jv_next)
        if (job_still_useful(job))
        {
            ch_log(NULL, "GUI not forking because a job is running");
--- 5476,5482 ----
  {
      job_T     *job;
  
!     FOR_ALL_JOBS(job)
        if (job_still_useful(job))
        {
            ch_log(NULL, "GUI not forking because a job is running");
***************
*** 5570,5576 ****
      char_u    *s;
  
      range_list_materialize(l);
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        s = tv_get_string_chk(&li->li_tv);
        if (s == NULL)
--- 5575,5581 ----
      char_u    *s;
  
      range_list_materialize(l);
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        s = tv_get_string_chk(&li->li_tv);
        if (s == NULL)
***************
*** 5695,5701 ****
      int               did_free = FALSE;
      job_T     *job;
  
!     for (job = first_job; job != NULL; job = job->jv_next)
        if ((job->jv_copyID & mask) != (copyID & mask)
                                                    && !job_still_useful(job))
        {
--- 5700,5706 ----
      int               did_free = FALSE;
      job_T     *job;
  
!     FOR_ALL_JOBS(job)
        if ((job->jv_copyID & mask) != (copyID & mask)
                                                    && !job_still_useful(job))
        {
***************
*** 5781,5787 ****
  {
      job_T     *job;
  
!     for (job = first_job; job != NULL; job = job->jv_next)
        if (job->jv_status == JOB_STARTED && job->jv_stoponexit != NULL)
            mch_signal_job(job, job->jv_stoponexit);
  }
--- 5786,5792 ----
  {
      job_T     *job;
  
!     FOR_ALL_JOBS(job)
        if (job->jv_status == JOB_STARTED && job->jv_stoponexit != NULL)
            mch_signal_job(job, job->jv_stoponexit);
  }
***************
*** 5795,5801 ****
  {
      job_T         *job;
  
!     for (job = first_job; job != NULL; job = job->jv_next)
        // 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))
--- 5800,5806 ----
  {
      job_T         *job;
  
!     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,6595 ****
      job_T     *job;
      typval_T  tv;
  
!     for (job = first_job; job != NULL; job = job->jv_next)
      {
        tv.v_type = VAR_JOB;
        tv.vval.v_job = job;
--- 6594,6600 ----
      job_T     *job;
      typval_T  tv;
  
!     FOR_ALL_JOBS(job)
      {
        tv.v_type = VAR_JOB;
        tv.vval.v_job = job;
*** ../vim-8.2.0499/src/cmdexpand.c     2020-03-01 01:05:46.195710214 +0100
--- src/cmdexpand.c     2020-04-02 18:38:45.114510343 +0200
***************
*** 2587,2593 ****
  
      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)
      {
        if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL)
            continue;  // Skip non-string items and empty strings
--- 2587,2593 ----
  
      ga_init2(&ga, (int)sizeof(char *), 3);
      // Loop over the items in the list.
!     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
*** ../vim-8.2.0499/src/diff.c  2019-12-01 20:51:25.000000000 +0100
--- src/diff.c  2020-04-02 18:45:50.644905251 +0200
***************
*** 90,95 ****
--- 90,98 ----
  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,1863 ****
  #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)
        if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
            break;
      if (dp == NULL || lnum < dp->df_lnum[idx])
--- 1860,1866 ----
  #endif
  
      // search for a change that includes "lnum" in the list of diffblocks.
!     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,2075 ****
      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)
        if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx])
            break;
      if (dp == NULL)
--- 2072,2078 ----
      towin->w_topfill = 0;
  
      // search for a change that includes "lnum" in the list of diffblocks.
!     FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp)
        if (lnum <= dp->df_lnum[fromidx] + dp->df_count[fromidx])
            break;
      if (dp == NULL)
***************
*** 2374,2380 ****
      }
  
      // search for a change that includes "lnum" in the list of diffblocks.
!     for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
        if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
            break;
      if (dp == NULL || diff_check_sanity(curtab, dp) == FAIL)
--- 2377,2383 ----
      }
  
      // search for a change that includes "lnum" in the list of diffblocks.
!     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,2514 ****
      if (curtab->tp_first_diff == NULL)
        return TRUE;
  
!     for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
      {
        // If this change is below the line there can't be any further match.
        if (dp->df_lnum[idx] - diff_context > lnum)
--- 2511,2517 ----
      if (curtab->tp_first_diff == NULL)
        return TRUE;
  
!     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,3007 ****
      if (curtab->tp_first_diff == NULL)                // no diffs today
        return lnum1;
  
!     for (dp = curtab->tp_first_diff; dp != NULL; dp = dp->df_next)
      {
        if (dp->df_lnum[idx1] > lnum1)
            return lnum1 - baseline;
--- 3004,3010 ----
      if (curtab->tp_first_diff == NULL)                // no diffs today
        return lnum1;
  
!     FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp)
      {
        if (dp->df_lnum[idx1] > lnum1)
            return lnum1 - baseline;
***************
*** 3070,3076 ****
        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)
        if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
            break;
  
--- 3073,3079 ----
        ex_diffupdate(NULL);            // update after a big change
  
      // search for a change that includes "lnum" in the list of diffblocks.
!     FOR_ALL_DIFFBLOCKS_IN_TAB(curtab, dp)
        if (lnum <= dp->df_lnum[idx] + dp->df_count[idx])
            break;
  
*** ../vim-8.2.0499/src/eval.c  2020-04-01 22:10:56.432201238 +0200
--- src/eval.c  2020-04-02 18:38:45.114510343 +0200
***************
*** 3973,3983 ****
        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)
        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)
                abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
  #endif
--- 3973,3983 ----
        abort = abort || set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
  #ifdef FEAT_PROP_POPUP
!     FOR_ALL_POPUPWINS(wp)
        abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
      FOR_ALL_TABPAGES(tp)
!       FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
                abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
                                                                  NULL, NULL);
  #endif
*** ../vim-8.2.0499/src/evalbuffer.c    2020-03-01 14:04:42.224689018 +0100
--- src/evalbuffer.c    2020-04-02 18:38:45.114510343 +0200
***************
*** 117,123 ****
  {
      wininfo_T *wip;
  
!     for (wip = curbuf->b_wininfo; wip != NULL; wip = wip->wi_next)
      {
        if (wip->wi_win != NULL)
        {
--- 117,123 ----
  {
      wininfo_T *wip;
  
!     FOR_ALL_BUF_WININFO(curbuf, wip)
      {
        if (wip->wi_win != NULL)
        {
***************
*** 572,582 ****
      windows = list_alloc();
      if (windows != NULL)
      {
!       for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
            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)
                if (wp->w_buffer == buf)
                    list_append_number(windows, (varnumber_T)wp->w_id);
  
--- 572,582 ----
      windows = list_alloc();
      if (windows != NULL)
      {
!       FOR_ALL_POPUPWINS(wp)
            if (wp->w_buffer == buf)
                list_append_number(windows, (varnumber_T)wp->w_id);
        FOR_ALL_TABPAGES(tp)
!           FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
                if (wp->w_buffer == buf)
                    list_append_number(windows, (varnumber_T)wp->w_id);
  
*** ../vim-8.2.0499/src/evalfunc.c      2020-04-01 22:10:56.432201238 +0200
--- src/evalfunc.c      2020-04-02 18:38:45.114510343 +0200
***************
*** 2831,2838 ****
                    if (lv_len > 0)
                    {
                        range_list_materialize(list);
!                       for (li = list->lv_first; li != NULL;
!                                                        li = li->li_next)
                            copy_tv(&li->li_tv, &pt->pt_argv[i++]);
                    }
                }
--- 2831,2837 ----
                    if (lv_len > 0)
                    {
                        range_list_materialize(list);
!                       FOR_ALL_LIST_ITEMS(list, li)
                            copy_tv(&li->li_tv, &pt->pt_argv[i++]);
                    }
                }
***************
*** 5021,5027 ****
  
      l = argvars[0].vval.v_list;
      range_list_materialize(l);
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        msg_puts((char *)tv_get_string(&li->li_tv));
        msg_putchar('\n');
--- 5020,5026 ----
  
      l = argvars[0].vval.v_list;
      range_list_materialize(l);
!     FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li)
      {
        msg_puts((char *)tv_get_string(&li->li_tv));
        msg_putchar('\n');
*** ../vim-8.2.0499/src/evalvars.c      2020-03-30 22:51:20.647982632 +0200
--- src/evalvars.c      2020-04-02 18:38:45.114510343 +0200
***************
*** 1698,1704 ****
                    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)
                        item_lock(&li->li_tv, deep - 1, lock);
            }
            break;
--- 1698,1704 ----
                    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_ALL_LIST_ITEMS(l, li)
                        item_lock(&li->li_tv, deep - 1, lock);
            }
            break;
*** ../vim-8.2.0499/src/evalwindow.c    2020-03-20 21:15:47.918287657 +0100
--- src/evalwindow.c    2020-04-02 18:38:45.118510327 +0200
***************
*** 106,119 ****
  #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)
             if (wp->w_id == id)
             {
                 if (tpp != NULL)
                     *tpp = tp;
                 return wp;
             }
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp->w_id == id)
        {
            if (tpp != NULL)
--- 106,119 ----
  #ifdef FEAT_PROP_POPUP
      // popup windows are in separate lists
       FOR_ALL_TABPAGES(tp)
!        FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
             if (wp->w_id == id)
             {
                 if (tpp != NULL)
                     *tpp = tp;
                 return wp;
             }
!     FOR_ALL_POPUPWINS(wp)
        if (wp->w_id == id)
        {
            if (tpp != NULL)
***************
*** 188,194 ****
            if (wp->w_id == nr)
                return wp;
        // check global popup windows
!       for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
            if (wp->w_id == nr)
                return wp;
  #endif
--- 188,194 ----
            if (wp->w_id == nr)
                return wp;
        // check global popup windows
!       FOR_ALL_POPUPWINS(wp)
            if (wp->w_id == nr)
                return wp;
  #endif
*** ../vim-8.2.0499/src/ex_cmds2.c      2020-02-14 13:21:55.646197062 +0100
--- src/ex_cmds2.c      2020-04-02 18:38:45.118510327 +0200
***************
*** 303,309 ****
      // buffers in other tabs
      FOR_ALL_TABPAGES(tp)
        if (tp != curtab)
!           for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
                add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
  
      // any other buffer
--- 303,309 ----
      // buffers in other tabs
      FOR_ALL_TABPAGES(tp)
        if (tp != curtab)
!           FOR_ALL_WINDOWS_IN_TAB(tp, wp)
                add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
  
      // any other buffer
***************
*** 477,483 ****
        // great speed improvement.
        save_ei = au_event_disable(",Syntax");
  
!       for (buf = firstbuf; buf != NULL; buf = buf->b_next)
            buf->b_flags &= ~BF_SYN_SET;
        buf = curbuf;
      }
--- 477,483 ----
        // great speed improvement.
        save_ei = au_event_disable(",Syntax");
  
!       FOR_ALL_BUFFERS(buf)
            buf->b_flags &= ~BF_SYN_SET;
        buf = curbuf;
      }
*** ../vim-8.2.0499/src/filepath.c      2020-03-19 13:08:41.502917820 +0100
--- src/filepath.c      2020-04-02 18:38:45.118510327 +0200
***************
*** 1917,1923 ****
        if (list == NULL)
            return;
        range_list_materialize(list);
!       for (li = list->lv_first; li != NULL; li = li->li_next)
            if (tv_get_string_chk(&li->li_tv) == NULL)
                return;
      }
--- 1917,1923 ----
        if (list == NULL)
            return;
        range_list_materialize(list);
!       FOR_ALL_LIST_ITEMS(list, li)
            if (tv_get_string_chk(&li->li_tv) == NULL)
                return;
      }
*** ../vim-8.2.0499/src/globals.h       2020-03-28 21:38:02.124802294 +0100
--- src/globals.h       2020-04-02 18:45:28.196991562 +0200
***************
*** 676,681 ****
--- 676,686 ----
        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,721 ****
--- 721,729 ----
  
  #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,1474 ****
--- 1477,1485 ----
  // 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,1824 ****
--- 1833,1838 ----
  # 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)
*** ../vim-8.2.0499/src/gui.c   2020-03-28 20:44:37.554078887 +0100
--- src/gui.c   2020-04-02 18:38:45.118510327 +0200
***************
*** 4189,4195 ****
      // avoid that moving components around generates events
      ++hold_gui_events;
  
!     for (wp = firstwin; wp != NULL; wp = W_NEXT(wp))
      {
        if (wp->w_buffer == NULL)       // just in case
            continue;
--- 4189,4195 ----
      // avoid that moving components around generates events
      ++hold_gui_events;
  
!     FOR_ALL_WINDOWS(wp)
      {
        if (wp->w_buffer == NULL)       // just in case
            continue;
*** ../vim-8.2.0499/src/if_py_both.h    2020-01-29 21:27:17.578406709 +0100
--- src/if_py_both.h    2020-04-02 18:38:45.118510327 +0200
***************
*** 786,792 ****
        }
  
        range_list_materialize(list);
!       for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
        {
            if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict)))
            {
--- 786,792 ----
        }
  
        range_list_materialize(list);
!       FOR_ALL_LIST_ITEMS(list, curr)
        {
            if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict)))
            {
***************
*** 3035,3041 ****
                    return NULL;
                }
                curtv = argv;
!               for (li = argslist->lv_first; li != NULL; li = li->li_next)
                    copy_tv(&li->li_tv, curtv++);
            }
            list_unref(argslist);
--- 3035,3041 ----
                    return NULL;
                }
                curtv = argv;
!               FOR_ALL_LIST_ITEMS(argslist, li)
                    copy_tv(&li->li_tv, curtv++);
            }
            list_unref(argslist);
*** ../vim-8.2.0499/src/if_ruby.c       2020-03-29 20:51:03.081780739 +0200
--- src/if_ruby.c       2020-04-02 18:38:45.118510327 +0200
***************
*** 1147,1153 ****
  
        if (list != NULL)
        {
!           for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
                rb_ary_push(result, vim_to_ruby(&curr->li_tv));
        }
      }
--- 1147,1153 ----
  
        if (list != NULL)
        {
!           FOR_ALL_LIST_ITEMS(list, curr)
                rb_ary_push(result, vim_to_ruby(&curr->li_tv));
        }
      }
*** ../vim-8.2.0499/src/insexpand.c     2020-01-27 22:09:35.796838619 +0100
--- src/insexpand.c     2020-04-02 18:38:45.118510327 +0200
***************
*** 2331,2337 ****
  
      // 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)
      {
        if (ins_compl_add_tv(&li->li_tv, dir) == OK)
            // if dir was BACKWARD then honor it just once
--- 2331,2337 ----
  
      // Go through the List with matches and add each of them.
      range_list_materialize(list);
!     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,2519 ****
      {
        what_flag = 0;
        range_list_materialize(what_list);
!       for (item = what_list->lv_first; item != NULL; item = item->li_next)
        {
            char_u *what = tv_get_string(&item->li_tv);
  
--- 2513,2519 ----
      {
        what_flag = 0;
        range_list_materialize(what_list);
!       FOR_ALL_LIST_ITEMS(what_list, item)
        {
            char_u *what = tv_get_string(&item->li_tv);
  
*** ../vim-8.2.0499/src/list.c  2020-03-28 21:38:02.128802283 +0100
--- src/list.c  2020-04-02 18:38:45.118510327 +0200
***************
*** 1109,1115 ****
      char_u    *s;
  
      range_list_materialize(list);
!     for (li = list->lv_first; li != NULL; li = li->li_next)
      {
        for (s = tv_get_string(&li->li_tv); *s != NUL; ++s)
        {
--- 1109,1115 ----
      char_u    *s;
  
      range_list_materialize(list);
!     FOR_ALL_LIST_ITEMS(list, li)
      {
        for (s = tv_get_string(&li->li_tv); *s != NUL; ++s)
        {
***************
*** 1207,1213 ****
        else
            char2bytes = mb_char2bytes;
  
!       for (li = l->lv_first; li != NULL; li = li->li_next)
        {
            buf[(*char2bytes)(tv_get_number(&li->li_tv), buf)] = NUL;
            ga_concat(&ga, buf);
--- 1207,1213 ----
        else
            char2bytes = mb_char2bytes;
  
!       FOR_ALL_LIST_ITEMS(l, li)
        {
            buf[(*char2bytes)(tv_get_number(&li->li_tv), buf)] = NUL;
            ga_concat(&ga, buf);
***************
*** 1216,1222 ****
      }
      else if (ga_grow(&ga, list_len(l) + 1) == OK)
      {
!       for (li = l->lv_first; li != NULL; li = li->li_next)
            ga_append(&ga, tv_get_number(&li->li_tv));
        ga_append(&ga, NUL);
      }
--- 1216,1222 ----
      }
      else if (ga_grow(&ga, list_len(l) + 1) == OK)
      {
!       FOR_ALL_LIST_ITEMS(l, li)
            ga_append(&ga, tv_get_number(&li->li_tv));
        ga_append(&ga, NUL);
      }
***************
*** 1579,1585 ****
        if (sort)
        {
            // sort(): ptrs will be the list to sort
!           for (li = l->lv_first; li != NULL; li = li->li_next)
            {
                ptrs[i].item = li;
                ptrs[i].idx = i;
--- 1579,1585 ----
        if (sort)
        {
            // sort(): ptrs will be the list to sort
!           FOR_ALL_LIST_ITEMS(l, li)
            {
                ptrs[i].item = li;
                ptrs[i].idx = i;
*** ../vim-8.2.0499/src/misc2.c 2020-03-26 16:27:34.942445362 +0100
--- src/misc2.c 2020-04-02 18:38:45.118510327 +0200
***************
*** 4348,4354 ****
      if (*argv == NULL)
        return FAIL;
      *argc = 0;
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        s = tv_get_string_chk(&li->li_tv);
        if (s == NULL)
--- 4348,4354 ----
      if (*argv == NULL)
        return FAIL;
      *argc = 0;
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        s = tv_get_string_chk(&li->li_tv);
        if (s == NULL)
*** ../vim-8.2.0499/src/netbeans.c      2019-12-05 20:01:26.000000000 +0100
--- src/netbeans.c      2020-04-02 18:38:45.118510327 +0200
***************
*** 2982,2988 ****
      if (!NETBEANS_OPEN)
        return FALSE;
  
!     for (p = curbuf->b_signlist; p != NULL; p = p->se_next)
        if (p->se_id >= GUARDEDOFFSET)
            for (lnum = top + 1; lnum < bot; lnum++)
                if (lnum == p->se_lnum)
--- 2982,2988 ----
      if (!NETBEANS_OPEN)
        return FALSE;
  
!     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,3101 ****
      if (!NETBEANS_OPEN)
        return;
  
!     for (p = curbuf->b_signlist; p != NULL; p = p->se_next)
      {
        if (p->se_lnum == lnum && p->se_next && p->se_next->se_lnum == lnum)
        {
--- 3095,3101 ----
      if (!NETBEANS_OPEN)
        return;
  
!     FOR_ALL_SIGNS_IN_BUF(curbuf, p)
      {
        if (p->se_lnum == lnum && p->se_next && p->se_next->se_lnum == lnum)
        {
*** ../vim-8.2.0499/src/popupwin.c      2020-03-14 15:27:52.438171444 +0100
--- src/popupwin.c      2020-04-02 18:38:45.122510313 +0200
***************
*** 835,842 ****
            listitem_T *li;
  
            ok = TRUE;
!           for (li = di->di_tv.vval.v_list->lv_first; li != NULL;
!                                                             li = li->li_next)
            {
                if (li->li_tv.v_type != VAR_LIST
                        || li->li_tv.vval.v_list == NULL
--- 835,841 ----
            listitem_T *li;
  
            ok = TRUE;
!           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,973 ****
      linenr_T    lnum = 0;
      char_u    *p;
  
!     for (li = l->lv_first; li != NULL; li = li->li_next)
        if (li->li_tv.v_type == VAR_STRING)
        {
            p = li->li_tv.vval.v_string;
--- 966,972 ----
      linenr_T    lnum = 0;
      char_u    *p;
  
!     FOR_ALL_LIST_ITEMS(l, li)
        if (li->li_tv.v_type == VAR_STRING)
        {
            p = li->li_tv.vval.v_string;
***************
*** 989,995 ****
      dict_T    *dict;
  
      // first add the text lines
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        if (li->li_tv.v_type != VAR_DICT)
        {
--- 988,994 ----
      dict_T    *dict;
  
      // first add the text lines
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        if (li->li_tv.v_type != VAR_DICT)
        {
***************
*** 1022,1028 ****
            plist = di->di_tv.vval.v_list;
            if (plist != NULL)
            {
!               for (pli = plist->lv_first; pli != NULL; pli = pli->li_next)
                {
                    if (pli->li_tv.v_type != VAR_DICT)
                    {
--- 1021,1027 ----
            plist = di->di_tv.vval.v_list;
            if (plist != NULL)
            {
!               FOR_ALL_LIST_ITEMS(plist, pli)
                {
                    if (pli->li_tv.v_type != VAR_DICT)
                    {
***************
*** 2881,2892 ****
        {
            win_T *twp;
  
!            for (twp = tp->tp_first_popupwin; twp != NULL; twp = twp->w_next)
!                if (twp->w_id == id)
!                    break;
!            if (twp != NULL)
!                break;
!            ++i;
        }
        if (tp == NULL)
            i = -1;  // must be global
--- 2880,2891 ----
        {
            win_T *twp;
  
!           FOR_ALL_POPUPWINS_IN_TAB(tp, twp)
!               if (twp->w_id == id)
!                   break;
!           if (twp != NULL)
!               break;
!           ++i;
        }
        if (tp == NULL)
            i = -1;  // must be global
***************
*** 2954,2962 ****
  {
      win_T *wp;
  
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_popup_handled &= ~handled_flag;
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        wp->w_popup_handled &= ~handled_flag;
  }
  
--- 2953,2961 ----
  {
      win_T *wp;
  
!     FOR_ALL_POPUPWINS(wp)
        wp->w_popup_handled &= ~handled_flag;
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        wp->w_popup_handled &= ~handled_flag;
  }
  
***************
*** 2975,2981 ****
  
      found_zindex = lowest ? INT_MAX : 0;
      found_wp = NULL;
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if ((wp->w_popup_handled & handled_flag) == 0
                && (wp->w_popup_flags & POPF_HIDDEN) == 0
                && (lowest ? wp->w_zindex < found_zindex
--- 2974,2980 ----
  
      found_zindex = lowest ? INT_MAX : 0;
      found_wp = NULL;
!     FOR_ALL_POPUPWINS(wp)
        if ((wp->w_popup_handled & handled_flag) == 0
                && (wp->w_popup_flags & POPF_HIDDEN) == 0
                && (lowest ? wp->w_zindex < found_zindex
***************
*** 2984,2990 ****
            found_zindex = wp->w_zindex;
            found_wp = wp;
        }
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if ((wp->w_popup_handled & handled_flag) == 0
                && (wp->w_popup_flags & POPF_HIDDEN) == 0
                && (lowest ? wp->w_zindex < found_zindex
--- 2983,2989 ----
            found_zindex = wp->w_zindex;
            found_wp = wp;
        }
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        if ((wp->w_popup_handled & handled_flag) == 0
                && (wp->w_popup_flags & POPF_HIDDEN) == 0
                && (lowest ? wp->w_zindex < found_zindex
***************
*** 3157,3163 ****
        return;
      cells = wp->w_popup_mask_cells;
  
!     for (lio = wp->w_popup_mask->lv_first; lio != NULL; lio = lio->li_next)
      {
        int cols, cole;
        int lines, linee;
--- 3156,3162 ----
        return;
      cells = wp->w_popup_mask_cells;
  
!     FOR_ALL_LIST_ITEMS(wp->w_popup_mask, lio)
      {
        int cols, cole;
        int lines, linee;
***************
*** 3215,3221 ****
        int             lines, linee;
        int             col, line;
  
!       for (lio = wp->w_popup_mask->lv_first; lio != NULL; lio = lio->li_next)
        {
            li = lio->li_tv.vval.v_list->lv_first;
            cols = tv_get_number(&li->li_tv);
--- 3214,3220 ----
        int             lines, linee;
        int             col, line;
  
!       FOR_ALL_LIST_ITEMS(wp->w_popup_mask, lio)
        {
            li = lio->li_tv.vval.v_list->lv_first;
            cols = tv_get_number(&li->li_tv);
***************
*** 3325,3336 ****
  
      // Check if any popup window buffer has changed and if any popup connected
      // to a text property has become visible.
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp->w_popup_flags & POPF_HIDDEN)
            popup_mask_refresh |= check_popup_unhidden(wp);
        else if (popup_need_position_adjust(wp))
            popup_mask_refresh = TRUE;
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp->w_popup_flags & POPF_HIDDEN)
            popup_mask_refresh |= check_popup_unhidden(wp);
        else if (popup_need_position_adjust(wp))
--- 3324,3335 ----
  
      // Check if any popup window buffer has changed and if any popup connected
      // to a text property has become visible.
!     FOR_ALL_POPUPWINS(wp)
        if (wp->w_popup_flags & POPF_HIDDEN)
            popup_mask_refresh |= check_popup_unhidden(wp);
        else if (popup_need_position_adjust(wp))
            popup_mask_refresh = TRUE;
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        if (wp->w_popup_flags & POPF_HIDDEN)
            popup_mask_refresh |= check_popup_unhidden(wp);
        else if (popup_need_position_adjust(wp))
***************
*** 3838,3844 ****
      win_T *wp;
  
      // Preview window popup is always local to tab page.
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp->w_p_pvw)
            return wp;
      return NULL;
--- 3837,3843 ----
      win_T *wp;
  
      // Preview window popup is always local to tab page.
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        if (wp->w_p_pvw)
            return wp;
      return NULL;
***************
*** 3854,3860 ****
      win_T *wp;
  
      // info window popup is always local to tab page.
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp->w_popup_flags & POPF_INFO)
            return wp;
      return NULL;
--- 3853,3859 ----
      win_T *wp;
  
      // info window popup is always local to tab page.
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        if (wp->w_popup_flags & POPF_INFO)
            return wp;
      return NULL;
*** ../vim-8.2.0499/src/quickfix.c      2020-03-14 17:21:30.667427405 +0100
--- src/quickfix.c      2020-04-02 18:38:45.122510313 +0200
***************
*** 6911,6917 ****
        qf_store_title(qfl, title);
      }
  
!     for (li = list->lv_first; li != NULL; li = li->li_next)
      {
        if (li->li_tv.v_type != VAR_DICT)
            continue; // Skip non-dict items
--- 6911,6917 ----
        qf_store_title(qfl, title);
      }
  
!     FOR_ALL_LIST_ITEMS(list, li)
      {
        if (li->li_tv.v_type != VAR_DICT)
            continue; // Skip non-dict items
*** ../vim-8.2.0499/src/screen.c        2020-03-28 20:44:37.554078887 +0100
--- src/screen.c        2020-04-02 18:38:45.122510313 +0200
***************
*** 2572,2582 ****
        win_free_lsize(aucmd_win);
  #ifdef FEAT_PROP_POPUP
      // global popup windows
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        win_free_lsize(wp);
      // tab-local popup windows
      FOR_ALL_TABPAGES(tp)
!       for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            win_free_lsize(wp);
  #endif
  
--- 2572,2582 ----
        win_free_lsize(aucmd_win);
  #ifdef FEAT_PROP_POPUP
      // global popup windows
!     FOR_ALL_POPUPWINS(wp)
        win_free_lsize(wp);
      // tab-local popup windows
      FOR_ALL_TABPAGES(tp)
!       FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
            win_free_lsize(wp);
  #endif
  
***************
*** 2614,2620 ****
        outofmem = TRUE;
  #ifdef FEAT_PROP_POPUP
      // global popup windows
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (win_alloc_lines(wp) == FAIL)
        {
            outofmem = TRUE;
--- 2614,2620 ----
        outofmem = TRUE;
  #ifdef FEAT_PROP_POPUP
      // global popup windows
!     FOR_ALL_POPUPWINS(wp)
        if (win_alloc_lines(wp) == FAIL)
        {
            outofmem = TRUE;
***************
*** 2622,2628 ****
        }
      // tab-local popup windows
      FOR_ALL_TABPAGES(tp)
!       for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            if (win_alloc_lines(wp) == FAIL)
            {
                outofmem = TRUE;
--- 2622,2628 ----
        }
      // tab-local popup windows
      FOR_ALL_TABPAGES(tp)
!       FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
            if (win_alloc_lines(wp) == FAIL)
            {
                outofmem = TRUE;
*** ../vim-8.2.0499/src/sign.c  2020-02-19 17:12:48.907095284 +0100
--- src/sign.c  2020-04-02 18:38:45.122510313 +0200
***************
*** 57,62 ****
--- 57,65 ----
  # define SIGNCMD_LAST 6
  };
  
+ #define FOR_ALL_SIGNS(sp)     \
+     for ((sp) = first_sign; (sp) != NULL; (sp) = (sp)->sn_next)
+ 
  static hashtab_T      sg_table;       // sign group (signgroup_T) hashtable
  static int            next_sign_id = 1; // next sign id in the global group
  
***************
*** 294,300 ****
  {
      sign_T    *sp;
  
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (sp->sn_typenr == typenr)
            return sp;
      return NULL;
--- 297,303 ----
  {
      sign_T    *sp;
  
!     FOR_ALL_SIGNS(sp)
        if (sp->sn_typenr == typenr)
            return sp;
      return NULL;
***************
*** 308,314 ****
  {
      sign_T    *sp;
  
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (sp->sn_typenr == typenr)
            return sp->sn_name;
      return (char_u *)_("[Deleted]");
--- 311,317 ----
  {
      sign_T    *sp;
  
!     FOR_ALL_SIGNS(sp)
        if (sp->sn_typenr == typenr)
            return sp->sn_name;
      return (char_u *)_("[Deleted]");
***************
*** 880,886 ****
  
      if (sp_prev != NULL)
        *sp_prev = NULL;
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
      {
        if (STRCMP(sp->sn_name, name) == 0)
            break;
--- 883,889 ----
  
      if (sp_prev != NULL)
        *sp_prev = NULL;
!     FOR_ALL_SIGNS(sp)
      {
        if (STRCMP(sp->sn_name, name) == 0)
            break;
***************
*** 1153,1159 ****
      if (sign_group != NULL && (*sign_group == '*' || *sign_group == '\0'))
        return FAIL;
  
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (STRCMP(sp->sn_name, sign_name) == 0)
            break;
      if (sp == NULL)
--- 1156,1162 ----
      if (sign_group != NULL && (*sign_group == '*' || *sign_group == '\0'))
        return FAIL;
  
!     FOR_ALL_SIGNS(sp)
        if (STRCMP(sp->sn_name, sign_name) == 0)
            break;
      if (sp == NULL)
***************
*** 1830,1836 ****
  {
      sign_T    *sp;
  
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (sp->sn_icon != NULL)
            sp->sn_image = gui_mch_register_sign(sp->sn_icon);
  }
--- 1833,1839 ----
  {
      sign_T    *sp;
  
!     FOR_ALL_SIGNS(sp)
        if (sp->sn_icon != NULL)
            sp->sn_image = gui_mch_register_sign(sp->sn_icon);
  }
***************
*** 1911,1917 ****
  {
      sign_T    *sp;
  
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (sp->sn_typenr == typenr)
            return sp->sn_image;
      return NULL;
--- 1914,1920 ----
  {
      sign_T    *sp;
  
!     FOR_ALL_SIGNS(sp)
        if (sp->sn_typenr == typenr)
            return sp->sn_image;
      return NULL;
***************
*** 1950,1956 ****
  
      // Complete with name of signs already defined
      current_idx = 0;
!     for (sp = first_sign; sp != NULL; sp = sp->sn_next)
        if (current_idx++ == idx)
            return sp->sn_name;
      return NULL;
--- 1953,1959 ----
  
      // Complete with name of signs already defined
      current_idx = 0;
!     FOR_ALL_SIGNS(sp)
        if (current_idx++ == idx)
            return sp->sn_name;
      return NULL;
***************
*** 2212,2218 ****
      listitem_T        *li;
      int               retval;
  
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        retval = -1;
        if (li->li_tv.v_type == VAR_DICT)
--- 2215,2221 ----
      listitem_T        *li;
      int               retval;
  
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        retval = -1;
        if (li->li_tv.v_type == VAR_DICT)
***************
*** 2547,2553 ****
      }
  
      // Process the List of sign attributes
!     for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next)
      {
        sign_id = -1;
        if (li->li_tv.v_type == VAR_DICT)
--- 2550,2556 ----
      }
  
      // Process the List of sign attributes
!     FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li)
      {
        sign_id = -1;
        if (li->li_tv.v_type == VAR_DICT)
***************
*** 2569,2575 ****
      listitem_T        *li;
      int               retval;
  
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        retval = -1;
        name = tv_get_string_chk(&li->li_tv);
--- 2572,2578 ----
      listitem_T        *li;
      int               retval;
  
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        retval = -1;
        name = tv_get_string_chk(&li->li_tv);
***************
*** 2765,2771 ****
        return;
      }
  
!     for (li = argvars[0].vval.v_list->lv_first; li != NULL; li = li->li_next)
      {
        retval = -1;
        if (li->li_tv.v_type == VAR_DICT)
--- 2768,2774 ----
        return;
      }
  
!     FOR_ALL_LIST_ITEMS(argvars[0].vval.v_list, li)
      {
        retval = -1;
        if (li->li_tv.v_type == VAR_DICT)
*** ../vim-8.2.0499/src/spell.c 2020-02-21 21:30:33.871979710 +0100
--- src/spell.c 2020-04-02 18:38:45.122510313 +0200
***************
*** 2031,2037 ****
                dont_use_region = TRUE;
  
            // Check if we loaded this language before.
!           for (slang = first_lang; slang != NULL; slang = slang->sl_next)
                if (fullpathcmp(lang, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
                    break;
        }
--- 2031,2037 ----
                dont_use_region = TRUE;
  
            // Check if we loaded this language before.
!           FOR_ALL_SPELL_LANGS(slang)
                if (fullpathcmp(lang, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
                    break;
        }
***************
*** 2048,2054 ****
                dont_use_region = TRUE;
  
            // Check if we loaded this language before.
!           for (slang = first_lang; slang != NULL; slang = slang->sl_next)
                if (STRICMP(lang, slang->sl_name) == 0)
                    break;
        }
--- 2048,2054 ----
                dont_use_region = TRUE;
  
            // Check if we loaded this language before.
!           FOR_ALL_SPELL_LANGS(slang)
                if (STRICMP(lang, slang->sl_name) == 0)
                    break;
        }
***************
*** 2083,2089 ****
        /*
         * Loop over the languages, there can be several files for "lang".
         */
!       for (slang = first_lang; slang != NULL; slang = slang->sl_next)
            if (filename ? fullpathcmp(lang, slang->sl_fname, FALSE, TRUE)
                                                                    == FPC_SAME
                         : STRICMP(lang, slang->sl_name) == 0)
--- 2083,2089 ----
        /*
         * Loop over the languages, there can be several files for "lang".
         */
!       FOR_ALL_SPELL_LANGS(slang)
            if (filename ? fullpathcmp(lang, slang->sl_fname, FALSE, TRUE)
                                                                    == FPC_SAME
                         : STRICMP(lang, slang->sl_name) == 0)
***************
*** 2162,2168 ****
        }
  
        // Check if it was loaded already.
!       for (slang = first_lang; slang != NULL; slang = slang->sl_next)
            if (fullpathcmp(spf_name, slang->sl_fname, FALSE, TRUE)
                                                                == FPC_SAME)
                break;
--- 2162,2168 ----
        }
  
        // Check if it was loaded already.
!       FOR_ALL_SPELL_LANGS(slang)
            if (fullpathcmp(spf_name, slang->sl_fname, FALSE, TRUE)
                                                                == FPC_SAME)
                break;
*** ../vim-8.2.0499/src/spellfile.c     2020-03-23 22:12:15.496961030 +0100
--- src/spellfile.c     2020-04-02 18:38:45.122510313 +0200
***************
*** 296,301 ****
--- 296,307 ----
  #define CF_WORD               0x01
  #define CF_UPPER      0x02
  
+ /*
+  * Loop through all the siblings of a node (including the node)
+  */
+ #define FOR_ALL_NODE_SIBLINGS(node, np) \
+     for ((np) = (node); (np) != NULL; (np) = (np)->wn_sibling)
+ 
  static int set_spell_finish(spelltab_T        *new_st);
  static int write_spell_prefcond(FILE *fd, garray_T *gap);
  static int read_region_section(FILE *fd, slang_T *slang, int len);
***************
*** 1737,1743 ****
      slang_T   *slang;
      int               didit = FALSE;
  
!     for (slang = first_lang; slang != NULL; slang = slang->sl_next)
      {
        if (fullpathcmp(fname, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
        {
--- 1743,1749 ----
      slang_T   *slang;
      int               didit = FALSE;
  
!     FOR_ALL_SPELL_LANGS(slang)
      {
        if (fullpathcmp(fname, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
        {
***************
*** 2081,2087 ****
  {
      wordnode_T        *np;
  
!     for (np = node; np != NULL; np = np->wn_sibling)
      {
        np->wn_u1.index = FALSE;
        spell_clear_flags(np->wn_child);
--- 2087,2093 ----
  {
      wordnode_T        *np;
  
!     FOR_ALL_NODE_SIBLINGS(node, np)
      {
        np->wn_u1.index = FALSE;
        spell_clear_flags(np->wn_child);
***************
*** 4427,4433 ****
        {
            --node->wn_refs;
            copyprev = prev;
!           for (copyp = node; copyp != NULL; copyp = copyp->wn_sibling)
            {
                // Allocate a new node and copy the info.
                np = get_wordnode(spin);
--- 4433,4439 ----
        {
            --node->wn_refs;
            copyprev = prev;
!           FOR_ALL_NODE_SIBLINGS(node, copyp)
            {
                // Allocate a new node and copy the info.
                np = get_wordnode(spin);
***************
*** 4618,4624 ****
  
      if (--node->wn_refs == 0)
      {
!       for (np = node; np != NULL; np = np->wn_sibling)
        {
            if (np->wn_child != NULL)
                cnt += deref_wordnode(spin, np->wn_child);
--- 4624,4630 ----
  
      if (--node->wn_refs == 0)
      {
!       FOR_ALL_NODE_SIBLINGS(node, np)
        {
            if (np->wn_child != NULL)
                cnt += deref_wordnode(spin, np->wn_child);
***************
*** 4761,4767 ****
       */
      node->wn_u1.hashkey[0] = len;
      nr = 0;
!     for (np = node; np != NULL; np = np->wn_sibling)
      {
        if (np->wn_byte == NUL)
            // end node: use wn_flags, wn_region and wn_affixID
--- 4767,4773 ----
       */
      node->wn_u1.hashkey[0] = len;
      nr = 0;
!     FOR_ALL_NODE_SIBLINGS(node, np)
      {
        if (np->wn_byte == NUL)
            // end node: use wn_flags, wn_region and wn_affixID
***************
*** 5252,5258 ****
      wordnode_T        *np;
  
      if (node != NULL)
!       for (np = node; np != NULL; np = np->wn_sibling)
        {
            np->wn_u1.index = 0;
            np->wn_u2.wnode = NULL;
--- 5258,5264 ----
      wordnode_T        *np;
  
      if (node != NULL)
!       FOR_ALL_NODE_SIBLINGS(node, np)
        {
            np->wn_u1.index = 0;
            np->wn_u2.wnode = NULL;
***************
*** 5296,5302 ****
      node->wn_u1.index = idx;
  
      // Count the number of siblings.
!     for (np = node; np != NULL; np = np->wn_sibling)
        ++siblingcount;
  
      // Write the sibling count.
--- 5302,5308 ----
      node->wn_u1.index = idx;
  
      // Count the number of siblings.
!     FOR_ALL_NODE_SIBLINGS(node, np)
        ++siblingcount;
  
      // Write the sibling count.
***************
*** 5304,5310 ****
        putc(siblingcount, fd);                         // <siblingcount>
  
      // Write each sibling byte and optionally extra info.
!     for (np = node; np != NULL; np = np->wn_sibling)
      {
        if (np->wn_byte == 0)
        {
--- 5310,5316 ----
        putc(siblingcount, fd);                         // <siblingcount>
  
      // Write each sibling byte and optionally extra info.
!     FOR_ALL_NODE_SIBLINGS(node, np)
      {
        if (np->wn_byte == 0)
        {
***************
*** 5392,5398 ****
      newindex += siblingcount + 1;
  
      // Recursively dump the children of each sibling.
!     for (np = node; np != NULL; np = np->wn_sibling)
        if (np->wn_byte != 0 && np->wn_child->wn_u2.wnode == node)
            newindex = put_node(fd, np->wn_child, newindex, regionmask,
                                                                  prefixtree);
--- 5398,5404 ----
      newindex += siblingcount + 1;
  
      // Recursively dump the children of each sibling.
!     FOR_ALL_NODE_SIBLINGS(node, np)
        if (np->wn_byte != 0 && np->wn_child->wn_u2.wnode == node)
            newindex = put_node(fd, np->wn_child, newindex, regionmask,
                                                                  prefixtree);
***************
*** 5447,5453 ****
       * of the code for the soundfolding stuff.
       * It might have been done already by spell_reload_one().
       */
!     for (slang = first_lang; slang != NULL; slang = slang->sl_next)
        if (fullpathcmp(wfname, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
            break;
      if (slang == NULL)
--- 5453,5459 ----
       * of the code for the soundfolding stuff.
       * It might have been done already by spell_reload_one().
       */
!     FOR_ALL_SPELL_LANGS(slang)
        if (fullpathcmp(wfname, slang->sl_fname, FALSE, TRUE) == FPC_SAME)
            break;
      if (slang == NULL)
***************
*** 5666,5672 ****
      int               nr;
      int               prev_nr;
  
!     for (p = node; p != NULL; p = p->wn_sibling)
      {
        if (p->wn_byte == NUL)
        {
--- 5672,5678 ----
      int               nr;
      int               prev_nr;
  
!     FOR_ALL_NODE_SIBLINGS(node, p)
      {
        if (p->wn_byte == NUL)
        {
*** ../vim-8.2.0499/src/spellsuggest.c  2020-03-15 18:15:00.150875063 +0100
--- src/spellsuggest.c  2020-04-02 18:38:45.122510313 +0200
***************
*** 887,893 ****
      if (list != NULL)
      {
        // Loop over the items in the list.
!       for (li = list->lv_first; li != NULL; li = li->li_next)
            if (li->li_tv.v_type == VAR_LIST)
            {
                // Get the word and the score from the items.
--- 887,893 ----
      if (list != NULL)
      {
        // Loop over the items in the list.
!       FOR_ALL_LIST_ITEMS(list, li)
            if (li->li_tv.v_type == VAR_LIST)
            {
                // Get the word and the score from the items.
*** ../vim-8.2.0499/src/tag.c   2020-03-09 08:17:47.934476791 +0100
--- src/tag.c   2020-04-02 18:38:45.122510313 +0200
***************
*** 1358,1364 ****
      }
      taglist = rettv.vval.v_list;
  
!     for (item = taglist->lv_first; item != NULL; item = item->li_next)
      {
        char_u          *mfp;
        char_u          *res_name, *res_fname, *res_cmd, *res_kind;
--- 1358,1364 ----
      }
      taglist = rettv.vval.v_list;
  
!     FOR_ALL_LIST_ITEMS(taglist, item)
      {
        char_u          *mfp;
        char_u          *res_name, *res_fname, *res_cmd, *res_kind;
***************
*** 4191,4197 ****
      int               fnum;
  
      // Add one entry at a time to the tag stack
!     for (li = l->lv_first; li != NULL; li = li->li_next)
      {
        if (li->li_tv.v_type != VAR_DICT || li->li_tv.vval.v_dict == NULL)
            continue;                           // Skip non-dict items
--- 4191,4197 ----
      int               fnum;
  
      // Add one entry at a time to the tag stack
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        if (li->li_tv.v_type != VAR_DICT || li->li_tv.vval.v_dict == NULL)
            continue;                           // Skip non-dict items
*** ../vim-8.2.0499/src/terminal.c      2020-03-28 22:37:10.141196670 +0100
--- src/terminal.c      2020-04-02 18:38:45.126510297 +0200
***************
*** 183,188 ****
--- 183,191 ----
  #define MAX_ROW 999999            // used for tl_dirty_row_end to update all 
rows
  #define KEY_BUF_LEN 200
  
+ #define FOR_ALL_TERMS(term)   \
+     for ((term) = first_term; (term) != NULL; (term) = (term)->tl_next)
+ 
  /*
   * Functions with separate implementation for MS-Windows and Unix-like 
systems.
   */
***************
*** 626,633 ****
        listitem_T      *item;
  
        ga_init2(&ga, 1, 100);
!       for (item = argvar->vval.v_list->lv_first;
!                                       item != NULL; item = item->li_next)
        {
            char_u *s = tv_get_string_chk(&item->li_tv);
            char_u *p;
--- 629,635 ----
        listitem_T      *item;
  
        ga_init2(&ga, 1, 100);
!       FOR_ALL_LIST_ITEMS(argvar->vval.v_list, item)
        {
            char_u *s = tv_get_string_chk(&item->li_tv);
            char_u *p;
***************
*** 1892,1898 ****
      term_T  *term;
      int           next_due = next_due_arg;
  
!     for (term = first_term; term != NULL; term = term->tl_next)
      {
        if (term->tl_timer_set && !term->tl_normal_mode)
        {
--- 1894,1900 ----
      term_T  *term;
      int           next_due = next_due_arg;
  
!     FOR_ALL_TERMS(term)
      {
        if (term->tl_timer_set && !term->tl_normal_mode)
        {
***************
*** 2175,2181 ****
      if (l != NULL)
      {
        type = get_reg_type(c, &reglen);
!       for (item = l->lv_first; item != NULL; item = item->li_next)
        {
            char_u *s = tv_get_string(&item->li_tv);
  #ifdef MSWIN
--- 2177,2183 ----
      if (l != NULL)
      {
        type = get_reg_type(c, &reglen);
!       FOR_ALL_LIST_ITEMS(l, item)
        {
            char_u *s = tv_get_string(&item->li_tv);
  #ifdef MSWIN
***************
*** 5701,5707 ****
        return;
  
      l = rettv->vval.v_list;
!     for (tp = first_term; tp != NULL; tp = tp->tl_next)
        if (tp != NULL && tp->tl_buffer != NULL)
            if (list_append_number(l,
                                   (varnumber_T)tp->tl_buffer->b_fnum) == FAIL)
--- 5703,5709 ----
        return;
  
      l = rettv->vval.v_list;
!     FOR_ALL_TERMS(tp)
        if (tp != NULL && tp->tl_buffer != NULL)
            if (list_append_number(l,
                                   (varnumber_T)tp->tl_buffer->b_fnum) == FAIL)
***************
*** 6077,6083 ****
  {
      term_T    *term;
  
!     for (term = first_term; term != NULL; term = term->tl_next)
        if (term->tl_job == ch->ch_job)
        {
            if (term->tl_eof_chars != NULL)
--- 6079,6085 ----
  {
      term_T    *term;
  
!     FOR_ALL_TERMS(term)
        if (term->tl_job == ch->ch_job)
        {
            if (term->tl_eof_chars != NULL)
*** ../vim-8.2.0499/src/userfunc.c      2020-04-02 18:34:28.767520143 +0200
--- src/userfunc.c      2020-04-02 18:38:45.126510297 +0200
***************
*** 792,798 ****
      vars_clear(&fc->l_avars.dv_hashtab);
  
      // Free the a:000 variables.
!     for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
        clear_tv(&li->li_tv);
  
      free_funccal(fc);
--- 792,798 ----
      vars_clear(&fc->l_avars.dv_hashtab);
  
      // Free the a:000 variables.
!     FOR_ALL_LIST_ITEMS(&fc->l_varlist, li)
        clear_tv(&li->li_tv);
  
      free_funccal(fc);
***************
*** 851,857 ****
        free_fc = FALSE;
  
        // Make a copy of the a:000 items, since we didn't do that above.
!       for (li = fc->l_varlist.lv_first; li != NULL; li = li->li_next)
            copy_tv(&li->li_tv, &li->li_tv);
      }
  
--- 851,857 ----
        free_fc = FALSE;
  
        // Make a copy of the a:000 items, since we didn't do that above.
!       FOR_ALL_LIST_ITEMS(&fc->l_varlist, li)
            copy_tv(&li->li_tv, &li->li_tv);
      }
  
***************
*** 1640,1646 ****
      int               r = 0;
  
      range_list_materialize(l);
!     for (item = l->lv_first; item != NULL; item = item->li_next)
      {
        if (argc == MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc))
        {
--- 1640,1646 ----
      int               r = 0;
  
      range_list_materialize(l);
!     FOR_ALL_LIST_ITEMS(args->vval.v_list, item)
      {
        if (argc == MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc))
        {
*** ../vim-8.2.0499/src/window.c        2020-02-03 22:15:22.206649093 +0100
--- src/window.c        2020-04-02 18:38:45.126510297 +0200
***************
*** 1428,1437 ****
  #ifdef FEAT_PROP_POPUP
      win_T     *wp;
  
!     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
!     for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
        if (wp == win)
            return TRUE;
  #endif
--- 1428,1437 ----
  #ifdef FEAT_PROP_POPUP
      win_T     *wp;
  
!     FOR_ALL_POPUPWINS(wp)
        if (wp == win)
            return TRUE;
!     FOR_ALL_POPUPWINS_IN_TAB(curtab, wp)
        if (wp == win)
            return TRUE;
  #endif
***************
*** 1473,1479 ****
                return TRUE;
        }
  #ifdef FEAT_PROP_POPUP
!       for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
            if (wp == win)
                return TRUE;
  #endif
--- 1473,1479 ----
                return TRUE;
        }
  #ifdef FEAT_PROP_POPUP
!       FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
            if (wp == win)
                return TRUE;
  #endif
***************
*** 2276,2282 ****
      {
        nexttp = tp->tp_next;
        if (tp != curtab)
!           for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
                if (wp->w_buffer == buf
                    && !(wp->w_closing || wp->w_buffer->b_locked > 0))
                {
--- 2276,2282 ----
      {
        nexttp = tp->tp_next;
        if (tp != curtab)
!           FOR_ALL_WINDOWS_IN_TAB(tp, wp)
                if (wp->w_buffer == buf
                    && !(wp->w_closing || wp->w_buffer->b_locked > 0))
                {
***************
*** 4785,4791 ****
      FOR_ALL_TABPAGES(tp)
        if (tp != curtab)
        {
!           for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
                if (wp->w_buffer == buf)
                    break;
            if (wp != NULL)
--- 4785,4791 ----
      FOR_ALL_TABPAGES(tp)
        if (tp != curtab)
        {
!           FOR_ALL_WINDOWS_IN_TAB(tp, wp)
                if (wp->w_buffer == buf)
                    break;
            if (wp != NULL)
***************
*** 4968,4974 ****
      // Remove the window from the b_wininfo lists, it may happen that the
      // freed memory is re-used for another window.
      FOR_ALL_BUFFERS(buf)
!       for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
            if (wip->wi_win == wp)
                wip->wi_win = NULL;
  
--- 4968,4974 ----
      // Remove the window from the b_wininfo lists, it may happen that the
      // freed memory is re-used for another window.
      FOR_ALL_BUFFERS(buf)
!       FOR_ALL_BUF_WININFO(buf, wip)
            if (wip->wi_win == wp)
                wip->wi_win = NULL;
  
*** ../vim-8.2.0499/src/version.c       2020-04-02 18:34:28.767520143 +0200
--- src/version.c       2020-04-02 18:50:10.035899565 +0200
***************
*** 740,741 ****
--- 740,743 ----
  {   /* Add new patch number below this line */
+ /**/
+     500,
  /**/

-- 
ARTHUR:          But if he was dying, he wouldn't bother to carve
                 "Aaaaarrrrrrggghhh".  He'd just say it.
BROTHER MAYNARD: It's down there carved in stone.
GALAHAD:         Perhaps he was dictating.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202004021651.032GphZD030443%40masaka.moolenaar.net.

Raspunde prin e-mail lui