To: vim_dev@googlegroups.com Subject: Patch 8.2.0523 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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(¤t_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(¤t_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 -- Bram@Moolenaar.net -- 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 ///