mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -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:
@@ -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);
|
||||||
|
35
src/screen.c
35
src/screen.c
@@ -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
|
||||||
|
27
src/syntax.c
27
src/syntax.c
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user