changeset 12510:7a887dccd13a

patch 8.0.1133: syntax timeout not used correctly commit https://github.com/vim/vim/commit/f3d769a585040ac47f7054057758809024ef6377 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Sep 22 13:44:56 2017 +0200 patch 8.0.1133: syntax timeout not used correctly Problem: Syntax timeout not used correctly. Solution: Do not pass the timeout to syntax_start() but set it explicitly. (Yasuhiro Matsumoto, closes #2139)
author Christian Brabandt <cb@256bit.org>
date Fri, 22 Sep 2017 13:45:05 +0200
parents 1fd4594eb74a
children b85c981b3a8e
files src/proto/syntax.pro src/screen.c src/syntax.c src/version.c
diffstat 4 files changed, 38 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -1,5 +1,6 @@
 /* syntax.c */
-void syntax_start(win_T *wp, linenr_T lnum, proftime_T *syntax_tm);
+void syn_set_timeout(proftime_T *tm);
+void syntax_start(win_T *wp, linenr_T lnum);
 void syn_stack_free_all(synblock_T *block);
 void syn_stack_apply_changes(buf_T *buf);
 void syntax_end_parsing(linenr_T lnum);
--- a/src/screen.c
+++ b/src/screen.c
@@ -131,7 +131,7 @@ static void fold_line(win_T *wp, long fo
 static void fill_foldcolumn(char_u *p, win_T *wp, int closed, linenr_T lnum);
 static void copy_text_attr(int off, char_u *buf, int len, int attr);
 #endif
-static int win_line(win_T *, linenr_T, int, int, int nochange, proftime_T *syntax_tm);
+static int win_line(win_T *, linenr_T, int, int, int nochange);
 static int char_needs_redraw(int off_from, int off_to, int cols);
 static void draw_vsep_win(win_T *wp, int row);
 #ifdef FEAT_STL_OPT
@@ -930,6 +930,7 @@ update_single_line(win_T *wp, linenr_T l
 #ifdef SYN_TIME_LIMIT
 	/* Set the time limit to 'redrawtime'. */
 	profile_setlimit(p_rdt, &syntax_tm);
+	syn_set_timeout(&syntax_tm);
 #endif
 	update_prepare();
 
@@ -944,13 +945,7 @@ update_single_line(win_T *wp, linenr_T l
 		start_search_hl();
 		prepare_search_hl(wp, lnum);
 # endif
-		win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE,
-#ifdef SYN_TIME_LIMIT
-			&syntax_tm
-#else
-			NULL
-#endif
-			);
+		win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE);
 # if defined(FEAT_SEARCH_EXTRA)
 		end_search_hl();
 # endif
@@ -960,6 +955,10 @@ update_single_line(win_T *wp, linenr_T l
 	}
 
 	update_finish();
+
+#ifdef SYN_TIME_LIMIT
+	syn_set_timeout(NULL);
+#endif
     }
     need_cursor_line_redraw = FALSE;
 }
@@ -1805,6 +1804,7 @@ win_update(win_T *wp)
 #ifdef SYN_TIME_LIMIT
     /* Set the time limit to 'redrawtime'. */
     profile_setlimit(p_rdt, &syntax_tm);
+    syn_set_timeout(&syntax_tm);
 #endif
 #ifdef FEAT_FOLDING
     win_foldinfo.fi_level = 0;
@@ -2109,13 +2109,7 @@ win_update(win_T *wp)
 		/*
 		 * Display one line.
 		 */
-		row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0,
-#ifdef SYN_TIME_LIMIT
-			&syntax_tm
-#else
-			NULL
-#endif
-			);
+		row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0);
 
 #ifdef FEAT_FOLDING
 		wp->w_lines[idx].wl_folded = FALSE;
@@ -2275,6 +2269,10 @@ win_update(win_T *wp)
 	win_draw_end(wp, '~', ' ', row, wp->w_height, HLF_EOB);
     }
 
+#ifdef SYN_TIME_LIMIT
+    syn_set_timeout(NULL);
+#endif
+
     /* Reset the type of redrawing required, the window has been updated. */
     wp->w_redr_type = 0;
 #ifdef FEAT_DIFF
@@ -3000,8 +2998,7 @@ win_line(
     linenr_T	lnum,
     int		startrow,
     int		endrow,
-    int		nochange UNUSED,	/* not updating for changed text */
-    proftime_T	*syntax_tm UNUSED)
+    int		nochange UNUSED)	/* not updating for changed text */
 {
     int		col = 0;		/* visual column on screen */
     unsigned	off;			/* offset in ScreenLines/ScreenAttrs */
@@ -3216,7 +3213,7 @@ win_line(
 	 * error, stop syntax highlighting. */
 	save_did_emsg = did_emsg;
 	did_emsg = FALSE;
-	syntax_start(wp, lnum, syntax_tm);
+	syntax_start(wp, lnum);
 	if (did_emsg)
 	    wp->w_s->b_syn_error = TRUE;
 	else
@@ -3614,7 +3611,7 @@ win_line(
 # ifdef FEAT_SYN_HL
 	    /* Need to restart syntax highlighting for this line. */
 	    if (has_syntax)
-		syntax_start(wp, lnum, syntax_tm);
+		syntax_start(wp, lnum);
 # endif
 	}
 #endif
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -368,7 +368,7 @@ static win_T	*syn_win;		/* current windo
 static buf_T	*syn_buf;		/* current buffer for highlighting */
 static synblock_T *syn_block;		/* current buffer for highlighting */
 #ifdef FEAT_RELTIME
-static proftime_T *syn_tm;
+static proftime_T *syn_tm;		/* timeout limit */
 #endif
 static linenr_T current_lnum = 0;	/* lnum of current state */
 static colnr_T	current_col = 0;	/* column of current state */
@@ -489,6 +489,18 @@ static int get_id_list(char_u **arg, int
 static void syn_combine_list(short **clstr1, short **clstr2, int list_op);
 static void syn_incl_toplevel(int id, int *flagsp);
 
+#if defined(FEAT_RELTIME) || defined(PROTO)
+/*
+ * Set the timeout used for syntax highlighting.
+ * Use NULL to reset, no timeout.
+ */
+    void
+syn_set_timeout(proftime_T *tm)
+{
+    syn_tm = tm;
+}
+#endif
+
 /*
  * Start the syntax recognition for a line.  This function is normally called
  * from the screen updating, once for each displayed line.
@@ -497,7 +509,7 @@ static void syn_incl_toplevel(int id, in
  * window.
  */
     void
-syntax_start(win_T *wp, linenr_T lnum, proftime_T *syntax_tm UNUSED)
+syntax_start(win_T *wp, linenr_T lnum)
 {
     synstate_T	*p;
     synstate_T	*last_valid = NULL;
@@ -527,9 +539,6 @@ syntax_start(win_T *wp, linenr_T lnum, p
     }
     changedtick = CHANGEDTICK(syn_buf);
     syn_win = wp;
-#ifdef FEAT_RELTIME
-    syn_tm = syntax_tm;
-#endif
 
     /*
      * Allocate syntax stack when needed.
@@ -6569,7 +6578,7 @@ syn_get_id(
     if (wp->w_buffer != syn_buf
 	    || lnum != current_lnum
 	    || col < current_col)
-	syntax_start(wp, lnum, NULL);
+	syntax_start(wp, lnum);
     else if (wp->w_buffer == syn_buf
 	    && lnum == current_lnum
 	    && col > current_col)
@@ -6645,7 +6654,7 @@ syn_get_foldlevel(win_T *wp, long lnum)
 # endif
 	    )
     {
-	syntax_start(wp, lnum, NULL);
+	syntax_start(wp, lnum);
 
 	for (i = 0; i < current_state.ga_len; ++i)
 	    if (CUR_STATE(i).si_flags & HL_FOLD)
@@ -7006,7 +7015,7 @@ static char *(highlight_init_light[]) = 
     CENT("ToolbarLine term=underline ctermbg=LightGrey",
 	 "ToolbarLine term=underline ctermbg=LightGrey guibg=LightGrey"),
     CENT("ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey",
-	 "ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey gui=bold guifg=White guibg=DarkGrey"),
+	 "ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey gui=bold guifg=White guibg=Grey40"),
 #endif
     NULL
 };
@@ -7102,7 +7111,7 @@ static char *(highlight_init_dark[]) = {
 #endif
 #ifdef FEAT_MENU
     CENT("ToolbarLine term=underline ctermbg=DarkGrey",
-	 "ToolbarLine term=underline ctermbg=DarkGrey guibg=DarkGrey"),
+	 "ToolbarLine term=underline ctermbg=DarkGrey guibg=Grey50"),
     CENT("ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey",
 	 "ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey gui=bold guifg=Black guibg=LightGrey"),
 #endif
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1133,
+/**/
     1132,
 /**/
     1131,