# HG changeset patch # User Christian Brabandt # Date 1506080705 -7200 # Node ID 7a887dccd13a4aa4df06becc62bc80549cc896e9 # Parent 1fd4594eb74ac3a66fcdb952cd5e8ba3854e2982 patch 8.0.1133: syntax timeout not used correctly commit https://github.com/vim/vim/commit/f3d769a585040ac47f7054057758809024ef6377 Author: Bram Moolenaar 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) diff --git a/src/proto/syntax.pro b/src/proto/syntax.pro --- 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); diff --git a/src/screen.c b/src/screen.c --- 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 diff --git a/src/syntax.c b/src/syntax.c --- 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 diff --git a/src/version.c b/src/version.c --- 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,