0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

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)
This commit is contained in:
Bram Moolenaar
2017-09-22 13:44:56 +02:00
parent 8b21de33bb
commit f3d769a585
4 changed files with 38 additions and 29 deletions

View File

@@ -1,5 +1,6 @@
/* syntax.c */ /* 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_free_all(synblock_T *block);
void syn_stack_apply_changes(buf_T *buf); void syn_stack_apply_changes(buf_T *buf);
void syntax_end_parsing(linenr_T lnum); void syntax_end_parsing(linenr_T lnum);

View File

@@ -131,7 +131,7 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
static void fill_foldcolumn(char_u *p, win_T *wp, int closed, linenr_T lnum); 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); static void copy_text_attr(int off, char_u *buf, int len, int attr);
#endif #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 int char_needs_redraw(int off_from, int off_to, int cols);
static void draw_vsep_win(win_T *wp, int row); static void draw_vsep_win(win_T *wp, int row);
#ifdef FEAT_STL_OPT #ifdef FEAT_STL_OPT
@@ -930,6 +930,7 @@ update_single_line(win_T *wp, linenr_T lnum)
#ifdef SYN_TIME_LIMIT #ifdef SYN_TIME_LIMIT
/* Set the time limit to 'redrawtime'. */ /* Set the time limit to 'redrawtime'. */
profile_setlimit(p_rdt, &syntax_tm); profile_setlimit(p_rdt, &syntax_tm);
syn_set_timeout(&syntax_tm);
#endif #endif
update_prepare(); update_prepare();
@@ -944,13 +945,7 @@ update_single_line(win_T *wp, linenr_T lnum)
start_search_hl(); start_search_hl();
prepare_search_hl(wp, lnum); prepare_search_hl(wp, lnum);
# endif # endif
win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE, win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, FALSE);
#ifdef SYN_TIME_LIMIT
&syntax_tm
#else
NULL
#endif
);
# if defined(FEAT_SEARCH_EXTRA) # if defined(FEAT_SEARCH_EXTRA)
end_search_hl(); end_search_hl();
# endif # endif
@@ -960,6 +955,10 @@ update_single_line(win_T *wp, linenr_T lnum)
} }
update_finish(); update_finish();
#ifdef SYN_TIME_LIMIT
syn_set_timeout(NULL);
#endif
} }
need_cursor_line_redraw = FALSE; need_cursor_line_redraw = FALSE;
} }
@@ -1805,6 +1804,7 @@ win_update(win_T *wp)
#ifdef SYN_TIME_LIMIT #ifdef SYN_TIME_LIMIT
/* Set the time limit to 'redrawtime'. */ /* Set the time limit to 'redrawtime'. */
profile_setlimit(p_rdt, &syntax_tm); profile_setlimit(p_rdt, &syntax_tm);
syn_set_timeout(&syntax_tm);
#endif #endif
#ifdef FEAT_FOLDING #ifdef FEAT_FOLDING
win_foldinfo.fi_level = 0; win_foldinfo.fi_level = 0;
@@ -2109,13 +2109,7 @@ win_update(win_T *wp)
/* /*
* Display one line. * Display one line.
*/ */
row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0, row = win_line(wp, lnum, srow, wp->w_height, mod_top == 0);
#ifdef SYN_TIME_LIMIT
&syntax_tm
#else
NULL
#endif
);
#ifdef FEAT_FOLDING #ifdef FEAT_FOLDING
wp->w_lines[idx].wl_folded = FALSE; 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); 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. */ /* Reset the type of redrawing required, the window has been updated. */
wp->w_redr_type = 0; wp->w_redr_type = 0;
#ifdef FEAT_DIFF #ifdef FEAT_DIFF
@@ -3000,8 +2998,7 @@ win_line(
linenr_T lnum, linenr_T lnum,
int startrow, int startrow,
int endrow, int endrow,
int nochange UNUSED, /* not updating for changed text */ int nochange UNUSED) /* not updating for changed text */
proftime_T *syntax_tm UNUSED)
{ {
int col = 0; /* visual column on screen */ int col = 0; /* visual column on screen */
unsigned off; /* offset in ScreenLines/ScreenAttrs */ unsigned off; /* offset in ScreenLines/ScreenAttrs */
@@ -3216,7 +3213,7 @@ win_line(
* error, stop syntax highlighting. */ * error, stop syntax highlighting. */
save_did_emsg = did_emsg; save_did_emsg = did_emsg;
did_emsg = FALSE; did_emsg = FALSE;
syntax_start(wp, lnum, syntax_tm); syntax_start(wp, lnum);
if (did_emsg) if (did_emsg)
wp->w_s->b_syn_error = TRUE; wp->w_s->b_syn_error = TRUE;
else else
@@ -3614,7 +3611,7 @@ win_line(
# ifdef FEAT_SYN_HL # ifdef FEAT_SYN_HL
/* Need to restart syntax highlighting for this line. */ /* Need to restart syntax highlighting for this line. */
if (has_syntax) if (has_syntax)
syntax_start(wp, lnum, syntax_tm); syntax_start(wp, lnum);
# endif # endif
} }
#endif #endif

View File

@@ -368,7 +368,7 @@ static win_T *syn_win; /* current window for highlighting */
static buf_T *syn_buf; /* current buffer for highlighting */ static buf_T *syn_buf; /* current buffer for highlighting */
static synblock_T *syn_block; /* current buffer for highlighting */ static synblock_T *syn_block; /* current buffer for highlighting */
#ifdef FEAT_RELTIME #ifdef FEAT_RELTIME
static proftime_T *syn_tm; static proftime_T *syn_tm; /* timeout limit */
#endif #endif
static linenr_T current_lnum = 0; /* lnum of current state */ static linenr_T current_lnum = 0; /* lnum of current state */
static colnr_T current_col = 0; /* column 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 keylen, short **list, int skip);
static void syn_combine_list(short **clstr1, short **clstr2, int list_op); static void syn_combine_list(short **clstr1, short **clstr2, int list_op);
static void syn_incl_toplevel(int id, int *flagsp); 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 * Start the syntax recognition for a line. This function is normally called
* from the screen updating, once for each displayed line. * from the screen updating, once for each displayed line.
@@ -497,7 +509,7 @@ static void syn_incl_toplevel(int id, int *flagsp);
* window. * window.
*/ */
void 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 *p;
synstate_T *last_valid = NULL; synstate_T *last_valid = NULL;
@@ -527,9 +539,6 @@ syntax_start(win_T *wp, linenr_T lnum, proftime_T *syntax_tm UNUSED)
} }
changedtick = CHANGEDTICK(syn_buf); changedtick = CHANGEDTICK(syn_buf);
syn_win = wp; syn_win = wp;
#ifdef FEAT_RELTIME
syn_tm = syntax_tm;
#endif
/* /*
* Allocate syntax stack when needed. * Allocate syntax stack when needed.
@@ -6569,7 +6578,7 @@ syn_get_id(
if (wp->w_buffer != syn_buf if (wp->w_buffer != syn_buf
|| lnum != current_lnum || lnum != current_lnum
|| col < current_col) || col < current_col)
syntax_start(wp, lnum, NULL); syntax_start(wp, lnum);
else if (wp->w_buffer == syn_buf else if (wp->w_buffer == syn_buf
&& lnum == current_lnum && lnum == current_lnum
&& col > current_col) && col > current_col)
@@ -6645,7 +6654,7 @@ syn_get_foldlevel(win_T *wp, long lnum)
# endif # endif
) )
{ {
syntax_start(wp, lnum, NULL); syntax_start(wp, lnum);
for (i = 0; i < current_state.ga_len; ++i) for (i = 0; i < current_state.ga_len; ++i)
if (CUR_STATE(i).si_flags & HL_FOLD) if (CUR_STATE(i).si_flags & HL_FOLD)
@@ -7006,7 +7015,7 @@ static char *(highlight_init_light[]) = {
CENT("ToolbarLine term=underline ctermbg=LightGrey", CENT("ToolbarLine term=underline ctermbg=LightGrey",
"ToolbarLine term=underline ctermbg=LightGrey guibg=LightGrey"), "ToolbarLine term=underline ctermbg=LightGrey guibg=LightGrey"),
CENT("ToolbarButton cterm=bold ctermfg=White ctermbg=DarkGrey", 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 #endif
NULL NULL
}; };
@@ -7102,7 +7111,7 @@ static char *(highlight_init_dark[]) = {
#endif #endif
#ifdef FEAT_MENU #ifdef FEAT_MENU
CENT("ToolbarLine term=underline ctermbg=DarkGrey", 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", CENT("ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey",
"ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey gui=bold guifg=Black guibg=LightGrey"), "ToolbarButton cterm=bold ctermfg=Black ctermbg=LightGrey gui=bold guifg=Black guibg=LightGrey"),
#endif #endif

View File

@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1133,
/**/ /**/
1132, 1132,
/**/ /**/