Patch 8.2.0523
Problem:    Loops are repeated.
Solution:   Use FOR_ALL_ macros. (Yegappan Lakshmanan, closes #5882)
Files:      src/buffer.c, src/drawscreen.c, src/evalfunc.c, src/evalwindow.c,
            src/globals.h, src/gui_athena.c, src/gui_gtk.c, src/gui_motif.c,
            src/gui_w32.c, src/list.c, src/menu.c, src/popupmenu.c,
            src/popupwin.c, src/quickfix.c, src/syntax.c, src/time.c,
            src/userfunc.c, src/vim9compile.c


*** ../vim-8.2.0522/src/buffer.c        2020-04-02 18:50:42.415773144 +0200
--- src/buffer.c        2020-04-06 21:53:54.969444566 +0200
***************
*** 52,57 ****
--- 52,60 ----
  # define dev_T unsigned
  #endif
  
+ #define FOR_ALL_BUFS_FROM_LAST(buf) \
+     for ((buf) = lastbuf; (buf) != NULL; (buf) = (buf)->b_prev)
+ 
  #if defined(FEAT_QUICKFIX)
  static char *msg_loclist = N_("[Location List]");
  static char *msg_qflist = N_("[Quickfix List]");
***************
*** 415,421 ****
  
      // Assume that we more often have a recent buffer, start with the last
      // one.
!     for (bp = lastbuf; bp != NULL; bp = bp->b_prev)
        if (bp == buf)
            return TRUE;
      return FALSE;
--- 418,424 ----
  
      // Assume that we more often have a recent buffer, start with the last
      // one.
!     FOR_ALL_BUFS_FROM_LAST(bp)
        if (bp == buf)
            return TRUE;
      return FALSE;
***************
*** 2510,2516 ****
      buf_T     *buf;
  
      // Start at the last buffer, expect to find a match sooner.
!     for (buf = lastbuf; buf != NULL; buf = buf->b_prev)
        if ((buf->b_flags & BF_DUMMY) == 0 && !otherfile_buf(buf, ffname
  #ifdef UNIX
                    , stp
--- 2513,2519 ----
      buf_T     *buf;
  
      // Start at the last buffer, expect to find a match sooner.
!     FOR_ALL_BUFS_FROM_LAST(buf)
        if ((buf->b_flags & BF_DUMMY) == 0 && !otherfile_buf(buf, ffname
  #ifdef UNIX
                    , stp
***************
*** 2593,2599 ****
                    return -1;
                }
  
!               for (buf = lastbuf; buf != NULL; buf = buf->b_prev)
                    if (buf->b_p_bl == find_listed
  #ifdef FEAT_DIFF
                            && (!diffmode || diff_mode_buf(buf))
--- 2596,2602 ----
                    return -1;
                }
  
!               FOR_ALL_BUFS_FROM_LAST(buf)
                    if (buf->b_p_bl == find_listed
  #ifdef FEAT_DIFF
                            && (!diffmode || diff_mode_buf(buf))
*** ../vim-8.2.0522/src/drawscreen.c    2020-04-05 18:56:02.229436604 +0200
--- src/drawscreen.c    2020-04-06 21:52:07.761758954 +0200
***************
*** 963,969 ****
      int               button_attr = syn_name2attr((char_u *)"ToolbarButton");
  
      vim_free(wp->w_winbar_items);
!     for (menu = wp->w_winbar->children; menu != NULL; menu = menu->next)
        ++item_count;
      wp->w_winbar_items = ALLOC_CLEAR_MULT(winbar_item_T, item_count + 1);
  
--- 963,969 ----
      int               button_attr = syn_name2attr((char_u *)"ToolbarButton");
  
      vim_free(wp->w_winbar_items);
!     FOR_ALL_CHILD_MENUS(wp->w_winbar, menu)
        ++item_count;
      wp->w_winbar_items = ALLOC_CLEAR_MULT(winbar_item_T, item_count + 1);
  
*** ../vim-8.2.0522/src/evalfunc.c      2020-04-05 21:38:11.633962373 +0200
--- src/evalfunc.c      2020-04-06 21:52:07.761758954 +0200
***************
*** 5008,5014 ****
  
      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');
--- 5008,5014 ----
  
      l = argvars[0].vval.v_list;
      range_list_materialize(l);
!     FOR_ALL_LIST_ITEMS(l, li)
      {
        msg_puts((char *)tv_get_string(&li->li_tv));
        msg_putchar('\n');
***************
*** 7317,7323 ****
        if (ll != NULL)
        {
            range_list_materialize(ll);
!           for (li = ll->lv_first; li != NULL; li = li->li_next)
            {
                strval = tv_get_string_buf_chk(&li->li_tv, buf);
                if (strval == NULL)
--- 7317,7323 ----
        if (ll != NULL)
        {
            range_list_materialize(ll);
!           FOR_ALL_LIST_ITEMS(ll, li)
            {
                strval = tv_get_string_buf_chk(&li->li_tv, buf);
                if (strval == NULL)
*** ../vim-8.2.0522/src/evalwindow.c    2020-04-02 18:50:42.419773128 +0200
--- src/evalwindow.c    2020-04-06 21:52:07.761758954 +0200
***************
*** 444,451 ****
      l = list_alloc();
      if (l != NULL)
      {
!       for (wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
!                                                  wp != NULL; wp = wp->w_next)
            list_append_number(l, (varnumber_T)wp->w_id);
        dict_add_list(dict, "windows", l);
      }
--- 444,450 ----
      l = list_alloc();
      if (l != NULL)
      {
!       FOR_ALL_WINDOWS_IN_TAB(tp, wp)
            list_append_number(l, (varnumber_T)wp->w_id);
        dict_add_list(dict, "windows", l);
      }
*** ../vim-8.2.0522/src/globals.h       2020-04-05 21:38:11.633962373 +0200
--- src/globals.h       2020-04-06 21:53:41.549484654 +0200
***************
*** 574,579 ****
--- 574,583 ----
   * overruling of menus that the user already defined.
   */
  EXTERN int    sys_menu INIT(= FALSE);
+ 
+ #define FOR_ALL_MENUS(m) for ((m) = root_menu; (m) != NULL; (m) = (m)->next)
+ #define FOR_ALL_CHILD_MENUS(p, c) \
+     for ((c) = (p)->children; (c) != NULL; (c) = (c)->next)
  #endif
  
  #ifdef FEAT_GUI
***************
*** 724,730 ****
  EXTERN buf_T  *lastbuf INIT(= NULL);  // last buffer
  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)
--- 728,735 ----
  EXTERN buf_T  *lastbuf INIT(= NULL);  // last buffer
  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)
***************
*** 1484,1490 ****
  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
--- 1489,1495 ----
  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
***************
*** 1545,1564 ****
  EXTERN char e_fontwidth[]     INIT(= N_("E236: Font \"%s\" is not 
fixed-width"));
  #endif
  EXTERN char e_internal[]      INIT(= N_("E473: Internal error"));
! EXTERN char e_intern2[]       INIT(= N_("E685: Internal error: %s"));
! EXTERN char e_interr[]        INIT(= N_("Interrupted"));
! EXTERN char e_invarg[]        INIT(= N_("E474: Invalid argument"));
! EXTERN char e_invarg2[]       INIT(= N_("E475: Invalid argument: %s"));
! EXTERN char e_duparg2[]       INIT(= N_("E983: Duplicate argument: %s"));
  EXTERN char e_invargval[]     INIT(= N_("E475: Invalid value for argument 
%s"));
  EXTERN char e_invargNval[]    INIT(= N_("E475: Invalid value for argument %s: 
%s"));
  #ifdef FEAT_EVAL
  EXTERN char e_invexpr2[]      INIT(= N_("E15: Invalid expression: %s"));
  #endif
  EXTERN char e_invrange[]      INIT(= N_("E16: Invalid range"));
! EXTERN char e_invcmd[]        INIT(= N_("E476: Invalid command"));
  #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
! EXTERN char e_isadir2[]       INIT(= N_("E17: \"%s\" is a directory"));
  #endif
  #ifdef FEAT_LIBCALL
  EXTERN char e_libcall[]       INIT(= N_("E364: Library call failed for 
\"%s()\""));
--- 1550,1569 ----
  EXTERN char e_fontwidth[]     INIT(= N_("E236: Font \"%s\" is not 
fixed-width"));
  #endif
  EXTERN char e_internal[]      INIT(= N_("E473: Internal error"));
! EXTERN char e_intern2[]               INIT(= N_("E685: Internal error: %s"));
! EXTERN char e_interr[]                INIT(= N_("Interrupted"));
! EXTERN char e_invarg[]                INIT(= N_("E474: Invalid argument"));
! EXTERN char e_invarg2[]               INIT(= N_("E475: Invalid argument: 
%s"));
! EXTERN char e_duparg2[]               INIT(= N_("E983: Duplicate argument: 
%s"));
  EXTERN char e_invargval[]     INIT(= N_("E475: Invalid value for argument 
%s"));
  EXTERN char e_invargNval[]    INIT(= N_("E475: Invalid value for argument %s: 
%s"));
  #ifdef FEAT_EVAL
  EXTERN char e_invexpr2[]      INIT(= N_("E15: Invalid expression: %s"));
  #endif
  EXTERN char e_invrange[]      INIT(= N_("E16: Invalid range"));
! EXTERN char e_invcmd[]                INIT(= N_("E476: Invalid command"));
  #if defined(UNIX) || defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
! EXTERN char e_isadir2[]               INIT(= N_("E17: \"%s\" is a 
directory"));
  #endif
  #ifdef FEAT_LIBCALL
  EXTERN char e_libcall[]       INIT(= N_("E364: Library call failed for 
\"%s()\""));
***************
*** 1614,1621 ****
  #endif
  EXTERN char e_notcreate[]     INIT(= N_("E482: Can't create file %s"));
  EXTERN char e_notmp[]         INIT(= N_("E483: Can't get temp file name"));
! EXTERN char e_notopen[]       INIT(= N_("E484: Can't open file %s"));
! EXTERN char e_notread[]       INIT(= N_("E485: Can't read file %s"));
  EXTERN char e_null[]          INIT(= N_("E38: Null argument"));
  #if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS) || defined(FEAT_EVAL)
  EXTERN char e_number_exp[]    INIT(= N_("E39: Number expected"));
--- 1619,1626 ----
  #endif
  EXTERN char e_notcreate[]     INIT(= N_("E482: Can't create file %s"));
  EXTERN char e_notmp[]         INIT(= N_("E483: Can't get temp file name"));
! EXTERN char e_notopen[]               INIT(= N_("E484: Can't open file %s"));
! EXTERN char e_notread[]               INIT(= N_("E485: Can't read file %s"));
  EXTERN char e_null[]          INIT(= N_("E38: Null argument"));
  #if defined(FEAT_DIGRAPHS) || defined(FEAT_TIMERS) || defined(FEAT_EVAL)
  EXTERN char e_number_exp[]    INIT(= N_("E39: Number expected"));
***************
*** 1837,1842 ****
--- 1842,1857 ----
  EXTERN int did_repeated_msg INIT(= 0);
  # define REPEATED_MSG_LOOKING     1
  # define REPEATED_MSG_SAFESTATE           2
+ 
+ #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)
+ #endif
+ 
+ #if defined(FEAT_DIFF)
+ #define FOR_ALL_DIFFBLOCKS_IN_TAB(tp, dp) \
+     for ((dp) = (tp)->tp_first_diff; (dp) != NULL; (dp) = (dp)->df_next)
  #endif
  
  #define FOR_ALL_LIST_ITEMS(l, li) \
*** ../vim-8.2.0522/src/gui_athena.c    2019-12-01 21:58:24.000000000 +0100
--- src/gui_athena.c    2020-04-06 21:52:07.761758954 +0200
***************
*** 954,960 ****
        vimmenu_T *mp;
        int max_height = 9999;
  
!       for (mp = root_menu; mp != NULL; mp = mp->next)
        {
            if (menu_is_menubar(mp->dname))
            {
--- 954,960 ----
        vimmenu_T *mp;
        int max_height = 9999;
  
!       FOR_ALL_MENUS(mp)
        {
            if (menu_is_menubar(mp->dname))
            {
***************
*** 1280,1286 ****
                vimmenu_T   *toolbar;
                vimmenu_T   *cur;
  
!               for (toolbar = root_menu; toolbar; toolbar = toolbar->next)
                    if (menu_is_toolbar(toolbar->dname))
                        break;
                // Assumption: toolbar is NULL if there is no toolbar,
--- 1280,1286 ----
                vimmenu_T   *toolbar;
                vimmenu_T   *cur;
  
!               FOR_ALL_MENUS(toolbar)
                    if (menu_is_toolbar(toolbar->dname))
                        break;
                // Assumption: toolbar is NULL if there is no toolbar,
***************
*** 1632,1638 ****
      {
        vimmenu_T *i;
  
!       for (i = menu->parent->children; i != NULL; i = i->next)
        {
            if (i->submenu_id != NULL && XtIsManaged(i->submenu_id))
                XtPopdown(i->submenu_id);
--- 1632,1638 ----
      {
        vimmenu_T *i;
  
!       FOR_ALL_CHILD_MENUS(menu->parent, i)
        {
            if (i->submenu_id != NULL && XtIsManaged(i->submenu_id))
                XtPopdown(i->submenu_id);
*** ../vim-8.2.0522/src/gui_gtk.c       2019-12-01 22:02:41.000000000 +0100
--- src/gui_gtk.c       2020-04-06 21:52:07.765758942 +0200
***************
*** 824,830 ****
      vimmenu_T *menu;
      char_u    *name;
  
!     for (menu = root_menu; menu != NULL; menu = menu->next)
      {
        if (menu->id == NULL)
            continue;
--- 824,830 ----
      vimmenu_T *menu;
      char_u    *name;
  
!     FOR_ALL_MENUS(menu)
      {
        if (menu->id == NULL)
            continue;
*** ../vim-8.2.0522/src/gui_motif.c     2019-12-02 22:21:16.000000000 +0100
--- src/gui_motif.c     2020-04-06 21:52:07.765758942 +0200
***************
*** 889,895 ****
  {
      vimmenu_T *menu;
  
!     for (menu = root_menu; menu != NULL; menu = menu->next)
        if (menu->id != (Widget)0)
            XtVaSetValues(menu->id,
                    XmNmnemonic, enable ? menu->mnemonic : NUL,
--- 889,895 ----
  {
      vimmenu_T *menu;
  
!     FOR_ALL_MENUS(menu)
        if (menu->id != (Widget)0)
            XtVaSetValues(menu->id,
                    XmNmnemonic, enable ? menu->mnemonic : NUL,
***************
*** 1094,1100 ****
  
      // Find any menu Widget, to be able to call XtManageChild()
      else
!       for (mp = root_menu; mp != NULL; mp = mp->next)
            if (mp->id != (Widget)0 && menu_is_menubar(mp->name))
            {
                id = mp->id;
--- 1094,1100 ----
  
      // Find any menu Widget, to be able to call XtManageChild()
      else
!       FOR_ALL_MENUS(mp)
            if (mp->id != (Widget)0 && menu_is_menubar(mp->name))
            {
                id = mp->id;
***************
*** 1112,1118 ****
       * Now find the menu item that is the furthest down, and get its position.
       */
      maxy = 0;
!     for (mp = root_menu; mp != NULL; mp = mp->next)
      {
        if (mp->id != (Widget)0 && menu_is_menubar(mp->name))
        {
--- 1112,1118 ----
       * Now find the menu item that is the furthest down, and get its position.
       */
      maxy = 0;
!     FOR_ALL_MENUS(mp)
      {
        if (mp->id != (Widget)0 && menu_is_menubar(mp->name))
        {
***************
*** 2928,2934 ****
                vimmenu_T   *toolbar;
                vimmenu_T   *cur;
  
!               for (toolbar = root_menu; toolbar; toolbar = toolbar->next)
                    if (menu_is_toolbar(toolbar->dname))
                        break;
                // Assumption: toolbar is NULL if there is no toolbar,
--- 2928,2934 ----
                vimmenu_T   *toolbar;
                vimmenu_T   *cur;
  
!               FOR_ALL_MENUS(toolbar)
                    if (menu_is_toolbar(toolbar->dname))
                        break;
                // Assumption: toolbar is NULL if there is no toolbar,
*** ../vim-8.2.0522/src/gui_w32.c       2019-12-02 22:32:33.000000000 +0100
--- src/gui_w32.c       2020-04-06 21:52:07.765758942 +0200
***************
*** 7591,7597 ****
      for (col = 0; col < 2; col++)
      {
        columnWidths[col] = 0;
!       for (pmenu = menu->children; pmenu != NULL; pmenu = pmenu->next)
        {
            // Use "dname" here to compute the width of the visible text.
            text = (col == 0) ? pmenu->dname : pmenu->actext;
--- 7591,7597 ----
      for (col = 0; col < 2; col++)
      {
        columnWidths[col] = 0;
!       FOR_ALL_CHILD_MENUS(menu, pmenu)
        {
            // Use "dname" here to compute the width of the visible text.
            text = (col == 0) ? pmenu->dname : pmenu->actext;
*** ../vim-8.2.0522/src/list.c  2020-04-05 18:56:02.233436590 +0200
--- src/list.c  2020-04-06 21:52:07.765758942 +0200
***************
*** 20,25 ****
--- 20,28 ----
  // List heads for garbage collection.
  static list_T         *first_list = NULL;     // list of all lists
  
+ #define FOR_ALL_WATCHERS(l, lw) \
+     for ((lw) = (l)->lv_watch; (lw) != NULL; (lw) = (lw)->lw_next)
+ 
  static void list_free_item(list_T *l, listitem_T *item);
  
  /*
***************
*** 42,48 ****
      listwatch_T       *lw, **lwp;
  
      lwp = &l->lv_watch;
!     for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
      {
        if (lw == lwrem)
        {
--- 45,51 ----
      listwatch_T       *lw, **lwp;
  
      lwp = &l->lv_watch;
!     FOR_ALL_WATCHERS(l, lw)
      {
        if (lw == lwrem)
        {
***************
*** 62,68 ****
  {
      listwatch_T       *lw;
  
!     for (lw = l->lv_watch; lw != NULL; lw = lw->lw_next)
        if (lw->lw_item == item)
            lw->lw_item = item->li_next;
  }
--- 65,71 ----
  {
      listwatch_T       *lw;
  
!     FOR_ALL_WATCHERS(l, lw)
        if (lw->lw_item == item)
            lw->lw_item = item->li_next;
  }
*** ../vim-8.2.0522/src/menu.c  2020-03-18 15:23:10.983695087 +0100
--- src/menu.c  2020-04-06 21:52:07.765758942 +0200
***************
*** 1980,1986 ****
  
      apply_autocmds(EVENT_MENUPOPUP, (char_u*)mode, NULL, FALSE, curbuf);
  
!     for (menu = root_menu; menu != NULL; menu = menu->next)
        if (STRNCMP("PopUp", menu->name, 5) == 0 && STRNCMP(menu->name + 5, 
mode, mode_len) == 0)
            break;
  
--- 1980,1986 ----
  
      apply_autocmds(EVENT_MENUPOPUP, (char_u*)mode, NULL, FALSE, curbuf);
  
!     FOR_ALL_MENUS(menu)
        if (STRNCMP("PopUp", menu->name, 5) == 0 && STRNCMP(menu->name + 5, 
mode, mode_len) == 0)
            break;
  
***************
*** 2133,2139 ****
  
      if (key < 256)
        key = TOLOWER_LOC(key);
!     for (menu = root_menu; menu != NULL; menu = menu->next)
        if (menu->mnemonic == key
                || (menu->mnemonic < 256 && TOLOWER_LOC(menu->mnemonic) == key))
            return TRUE;
--- 2133,2139 ----
  
      if (key < 256)
        key = TOLOWER_LOC(key);
!     FOR_ALL_MENUS(menu)
        if (menu->mnemonic == key
                || (menu->mnemonic < 256 && TOLOWER_LOC(menu->mnemonic) == key))
            return TRUE;
*** ../vim-8.2.0522/src/popupmenu.c     2020-03-16 20:07:13.359874451 +0100
--- src/popupmenu.c     2020-04-06 21:52:07.765758942 +0200
***************
*** 1379,1385 ****
      int               idx = 0;
      exarg_T   ea;
  
!     for (mp = menu->children; mp != NULL; mp = mp->next)
        if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected)
        {
            vim_memset(&ea, 0, sizeof(ea));
--- 1379,1385 ----
      int               idx = 0;
      exarg_T   ea;
  
!     FOR_ALL_CHILD_MENUS(menu, mp)
        if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected)
        {
            vim_memset(&ea, 0, sizeof(ea));
***************
*** 1407,1413 ****
      pum_size = 0;
      mode = get_menu_mode_flag();
  
!     for (mp = menu->children; mp != NULL; mp = mp->next)
        if (menu_is_separator(mp->dname)
                || (mp->modes & mp->enabled & mode))
            ++pum_size;
--- 1407,1413 ----
      pum_size = 0;
      mode = get_menu_mode_flag();
  
!     FOR_ALL_CHILD_MENUS(menu, mp)
        if (menu_is_separator(mp->dname)
                || (mp->modes & mp->enabled & mode))
            ++pum_size;
***************
*** 1424,1430 ****
      if (array == NULL)
        return;
  
!     for (mp = menu->children; mp != NULL; mp = mp->next)
        if (menu_is_separator(mp->dname))
            array[idx++].pum_text = (char_u *)"";
        else if (mp->modes & mp->enabled & mode)
--- 1424,1430 ----
      if (array == NULL)
        return;
  
!     FOR_ALL_CHILD_MENUS(menu, mp)
        if (menu_is_separator(mp->dname))
            array[idx++].pum_text = (char_u *)"";
        else if (mp->modes & mp->enabled & mode)
*** ../vim-8.2.0522/src/popupwin.c      2020-04-04 14:50:28.931788970 +0200
--- src/popupwin.c      2020-04-06 21:52:07.765758942 +0200
***************
*** 2133,2139 ****
        // - another popup window with a terminal
        // - the previous window
        // - the first one.
!       for (owp = first_popupwin; owp != NULL; owp = owp->w_next)
            if (owp != curwin && owp->w_buffer->b_term != NULL)
                break;
        if (owp != NULL)
--- 2133,2139 ----
        // - another popup window with a terminal
        // - the previous window
        // - the first one.
!       FOR_ALL_POPUPWINS(owp)
            if (owp != curwin && owp->w_buffer->b_term != NULL)
                break;
        if (owp != NULL)
*** ../vim-8.2.0522/src/quickfix.c      2020-04-02 18:50:42.423773112 +0200
--- src/quickfix.c      2020-04-06 21:52:07.765758942 +0200
***************
*** 6276,6282 ****
        win_T       *wp;
  
        if (firstwin->w_next != NULL)
!           for (wp = firstwin; wp != NULL; wp = wp->w_next)
                if (wp->w_buffer == buf)
                {
                    if (win_close(wp, FALSE) == OK)
--- 6276,6282 ----
        win_T       *wp;
  
        if (firstwin->w_next != NULL)
!           FOR_ALL_WINDOWS(wp)
                if (wp->w_buffer == buf)
                {
                    if (win_close(wp, FALSE) == OK)
*** ../vim-8.2.0522/src/syntax.c        2020-04-02 21:13:21.396362396 +0200
--- src/syntax.c        2020-04-06 21:52:07.769758931 +0200
***************
*** 256,261 ****
--- 256,264 ----
  #define INVALID_STATE(ssp)  ((ssp)->ga_itemsize == 0)
  #define VALID_STATE(ssp)    ((ssp)->ga_itemsize != 0)
  
+ #define FOR_ALL_SYNSTATES(sb, sst) \
+     for ((sst) = (sb)->b_sst_first; (sst) != NULL; (sst) = (sst)->sst_next)
+ 
  /*
   * The current state (within the line) of the recognition engine.
   * When current_state.ga_itemsize is 0 the current state is invalid.
***************
*** 438,444 ****
      if (INVALID_STATE(&current_state) && syn_block->b_sst_array != NULL)
      {
        // Find last valid saved state before start_lnum.
!       for (p = syn_block->b_sst_first; p != NULL; p = p->sst_next)
        {
            if (p->sst_lnum > lnum)
                break;
--- 441,447 ----
      if (INVALID_STATE(&current_state) && syn_block->b_sst_array != NULL)
      {
        // Find last valid saved state before start_lnum.
!       FOR_ALL_SYNSTATES(syn_block, p)
        {
            if (p->sst_lnum > lnum)
                break;
***************
*** 1044,1050 ****
  
      if (block->b_sst_array != NULL)
      {
!       for (p = block->b_sst_first; p != NULL; p = p->sst_next)
            clear_syn_state(p);
        VIM_CLEAR(block->b_sst_array);
        block->b_sst_first = NULL;
--- 1047,1053 ----
  
      if (block->b_sst_array != NULL)
      {
!       FOR_ALL_SYNSTATES(block, p)
            clear_syn_state(p);
        VIM_CLEAR(block->b_sst_array);
        block->b_sst_first = NULL;
***************
*** 1353,1359 ****
            else
            {
                // find the entry just before this one to adjust sst_next
!               for (p = syn_block->b_sst_first; p != NULL; p = p->sst_next)
                    if (p->sst_next == sp)
                        break;
                if (p != NULL)  // just in case
--- 1356,1362 ----
            else
            {
                // find the entry just before this one to adjust sst_next
!               FOR_ALL_SYNSTATES(syn_block, p)
                    if (p->sst_next == sp)
                        break;
                if (p != NULL)  // just in case
*** ../vim-8.2.0522/src/time.c  2020-02-14 13:21:55.646197062 +0100
--- src/time.c  2020-04-06 21:52:07.769758931 +0200
***************
*** 21,26 ****
--- 21,29 ----
  static char   tz_cache[64];
  #endif
  
+ #define FOR_ALL_TIMERS(t) \
+     for ((t) = first_timer; (t) != NULL; (t) = (t)->tr_next)
+ 
  /*
   * Call either localtime(3) or localtime_r(3) from POSIX libc time.h, with the
   * latter version preferred for reentrancy.
***************
*** 583,589 ****
  
      if (id >= 0)
      {
!       for (timer = first_timer; timer != NULL; timer = timer->tr_next)
            if (timer->tr_id == id)
                return timer;
      }
--- 586,592 ----
  
      if (id >= 0)
      {
!       FOR_ALL_TIMERS(timer)
            if (timer->tr_id == id)
                return timer;
      }
***************
*** 659,665 ****
  {
      timer_T *timer;
  
!     for (timer = first_timer; timer != NULL; timer = timer->tr_next)
        if (timer->tr_id != -1)
            add_timer_info(rettv, timer);
  }
--- 662,668 ----
  {
      timer_T *timer;
  
!     FOR_ALL_TIMERS(timer)
        if (timer->tr_id != -1)
            add_timer_info(rettv, timer);
  }
*** ../vim-8.2.0522/src/userfunc.c      2020-04-05 17:07:59.414556253 +0200
--- src/userfunc.c      2020-04-06 21:52:07.769758931 +0200
***************
*** 1643,1649 ****
      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))
        {
--- 1643,1649 ----
      int               r = 0;
  
      range_list_materialize(l);
!     FOR_ALL_LIST_ITEMS(l, item)
      {
        if (argc == MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc))
        {
*** ../vim-8.2.0522/src/vim9compile.c   2020-04-05 22:14:50.626952071 +0200
--- src/vim9compile.c   2020-04-06 21:52:07.769758931 +0200
***************
*** 3984,3990 ****
        l = heredoc_get(eap, op + 3);
  
        // Push each line and the create the list.
!       for (li = l->lv_first; li != NULL; li = li->li_next)
        {
            generate_PUSHS(cctx, li->li_tv.vval.v_string);
            li->li_tv.vval.v_string = NULL;
--- 3984,3990 ----
        l = heredoc_get(eap, op + 3);
  
        // Push each line and the create the list.
!       FOR_ALL_LIST_ITEMS(l, li)
        {
            generate_PUSHS(cctx, li->li_tv.vval.v_string);
            li->li_tv.vval.v_string = NULL;
*** ../vim-8.2.0522/src/version.c       2020-04-06 21:35:02.464237765 +0200
--- src/version.c       2020-04-06 22:12:34.429731823 +0200
***************
*** 740,741 ****
--- 740,743 ----
  {   /* Add new patch number below this line */
+ /**/
+     523,
  /**/

-- 
Close your shells, or I'll kill -9 you
Tomorrow I'll quota you
Remember the disks'll always be full
And then while I'm away
I'll write ~ everyday
And I'll send-pr all my buggings to you.
    [ CVS log "Beatles style" for FreeBSD ports/INDEX, Satoshi Asami ]

 /// 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/202004062013.036KDRV2022003%40masaka.moolenaar.net.

Raspunde prin e-mail lui