0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

updated for version 7.4.577

Problem:    Matching with a virtual column has a lot of overhead on very long
            lines. (Issue 310)
Solution:   Bail out early if there can't be a match. (Christian Brabandt)
            Also check for CTRL-C at every position.
This commit is contained in:
Bram Moolenaar 2015-01-14 18:40:28 +01:00
parent ba3f58e296
commit a20bcad15c
2 changed files with 24 additions and 7 deletions

View File

@ -6438,14 +6438,24 @@ nfa_regmatch(prog, start, submatch, m)
case NFA_VCOL:
case NFA_VCOL_GT:
case NFA_VCOL_LT:
result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
(long_u)win_linetabsize(
reg_win == NULL ? curwin : reg_win,
regline, (colnr_T)(reginput - regline)) + 1);
if (result)
{
add_here = TRUE;
add_state = t->state->out;
int op = t->state->c - NFA_VCOL;
colnr_T col = (colnr_T)(reginput - regline);
/* Bail out quickly when there can't be a match, avoid the
* overhead of win_linetabsize() on long lines. */
if ((col > t->state->val && op != 1)
|| (col - 1 > t->state->val && op == 1))
break;
result = nfa_re_num_cmp(t->state->val, op,
(long_u)win_linetabsize(
reg_win == NULL ? curwin : reg_win,
regline, col) + 1);
if (result)
{
add_here = TRUE;
add_state = t->state->out;
}
}
break;
@ -6744,6 +6754,11 @@ nextchar:
reg_nextline();
else
break;
/* Allow interrupting with CTRL-C. */
fast_breakcheck();
if (got_int)
break;
}
#ifdef ENABLE_LOG

View File

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