diff src/globals.h @ 19934:3ff714d765ba v8.2.0523

patch 8.2.0523: loops are repeated Commit: https://github.com/vim/vim/commit/00d253e2b2f435a5386582c3f857008e7ac355c2 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Apr 6 22:13:01 2020 +0200 patch 8.2.0523: loops are repeated Problem: Loops are repeated. Solution: Use FOR_ALL_ macros. (Yegappan Lakshmanan, closes https://github.com/vim/vim/issues/5882)
author Bram Moolenaar <Bram@vim.org>
date Mon, 06 Apr 2020 22:15:39 +0200
parents 1f42c49c3d29
children 4c9acbd6b3c7
line wrap: on
line diff
--- a/src/globals.h
+++ b/src/globals.h
@@ -574,6 +574,10 @@ EXTERN vimmenu_T	*root_menu INIT(= NULL)
  * 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,7 +728,8 @@ EXTERN buf_T	*firstbuf INIT(= NULL);	// 
 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_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,7 +1489,7 @@ EXTERN disptick_T	display_tick INIT(= 0)
 EXTERN linenr_T		spell_redraw_lnum INIT(= 0);
 
 #define FOR_ALL_SPELL_LANGS(slang) \
-    for ((slang) = first_lang; (slang) != NULL; (slang) = slang->sl_next)
+    for ((slang) = first_lang; (slang) != NULL; (slang) = (slang)->sl_next)
 #endif
 
 #ifdef FEAT_CONCEAL
@@ -1545,20 +1550,20 @@ EXTERN char e_font[]		INIT(= N_("E235: U
 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_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"));
+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"));
+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,8 +1619,8 @@ EXTERN char e_noserver[]	INIT(= N_("E247
 #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_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,6 +1842,16 @@ EXTERN HINSTANCE g_hinst INIT(= NULL);
 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) \