mirror of
https://github.com/vim/vim.git
synced 2025-10-06 05:44:14 -04:00
updated for version 7.4a.039
Problem: New regexp engine doesn't match pattern. (Ingo Karkat) Solution: When adding a state also check for different PIM if the list of states has any state with a PIM.
This commit is contained in:
@@ -3464,6 +3464,7 @@ typedef struct
|
|||||||
int n; /* nr of states currently in "t" */
|
int n; /* nr of states currently in "t" */
|
||||||
int len; /* max nr of states in "t" */
|
int len; /* max nr of states in "t" */
|
||||||
int id; /* ID of the list */
|
int id; /* ID of the list */
|
||||||
|
int has_pim; /* TRUE when any state has a PIM */
|
||||||
} nfa_list_T;
|
} nfa_list_T;
|
||||||
|
|
||||||
#ifdef ENABLE_LOG
|
#ifdef ENABLE_LOG
|
||||||
@@ -3966,7 +3967,7 @@ addstate(l, state, subs_arg, pim, off)
|
|||||||
/* This state is already in the list, don't add it again,
|
/* This state is already in the list, don't add it again,
|
||||||
* unless it is an MOPEN that is used for a backreference or
|
* unless it is an MOPEN that is used for a backreference or
|
||||||
* when there is a PIM. */
|
* when there is a PIM. */
|
||||||
if (!nfa_has_backref && pim == NULL)
|
if (!nfa_has_backref && pim == NULL && !l->has_pim)
|
||||||
{
|
{
|
||||||
skip_add:
|
skip_add:
|
||||||
#ifdef ENABLE_LOG
|
#ifdef ENABLE_LOG
|
||||||
@@ -4012,7 +4013,10 @@ skip_add:
|
|||||||
if (pim == NULL)
|
if (pim == NULL)
|
||||||
thread->pim.result = NFA_PIM_UNUSED;
|
thread->pim.result = NFA_PIM_UNUSED;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
copy_pim(&thread->pim, pim);
|
copy_pim(&thread->pim, pim);
|
||||||
|
l->has_pim = TRUE;
|
||||||
|
}
|
||||||
copy_sub(&thread->subs.norm, &subs->norm);
|
copy_sub(&thread->subs.norm, &subs->norm);
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
if (nfa_has_zsubexpr)
|
if (nfa_has_zsubexpr)
|
||||||
@@ -5060,8 +5064,10 @@ nfa_regmatch(prog, start, submatch, m)
|
|||||||
|
|
||||||
thislist = &list[0];
|
thislist = &list[0];
|
||||||
thislist->n = 0;
|
thislist->n = 0;
|
||||||
|
thislist->has_pim = FALSE;
|
||||||
nextlist = &list[1];
|
nextlist = &list[1];
|
||||||
nextlist->n = 0;
|
nextlist->n = 0;
|
||||||
|
nextlist->has_pim = FALSE;
|
||||||
#ifdef ENABLE_LOG
|
#ifdef ENABLE_LOG
|
||||||
fprintf(log_fd, "(---) STARTSTATE first\n");
|
fprintf(log_fd, "(---) STARTSTATE first\n");
|
||||||
#endif
|
#endif
|
||||||
@@ -5120,6 +5126,7 @@ nfa_regmatch(prog, start, submatch, m)
|
|||||||
thislist = &list[flag];
|
thislist = &list[flag];
|
||||||
nextlist = &list[flag ^= 1];
|
nextlist = &list[flag ^= 1];
|
||||||
nextlist->n = 0; /* clear nextlist */
|
nextlist->n = 0; /* clear nextlist */
|
||||||
|
nextlist->has_pim = FALSE;
|
||||||
++nfa_listid;
|
++nfa_listid;
|
||||||
thislist->id = nfa_listid;
|
thislist->id = nfa_listid;
|
||||||
nextlist->id = nfa_listid + 1;
|
nextlist->id = nfa_listid + 1;
|
||||||
|
@@ -341,6 +341,7 @@ STARTTEST
|
|||||||
:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
|
:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
|
||||||
:call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:'])
|
:call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:'])
|
||||||
:call add(tl, [2, 'm\k\+_\@=\%(_\@!\k\)\@<=\k\+e', 'mx__xe', 'mx__xe'])
|
:call add(tl, [2, 'm\k\+_\@=\%(_\@!\k\)\@<=\k\+e', 'mx__xe', 'mx__xe'])
|
||||||
|
:call add(tl, [2, '\%(\U\@<=S\k*\|S\l\)R', 'SuR', 'SuR'])
|
||||||
:"
|
:"
|
||||||
:"""" Combining different tests and features
|
:"""" Combining different tests and features
|
||||||
:call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
|
:call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
|
||||||
|
@@ -779,6 +779,9 @@ OK 2 - [ ]\@!\p\%([ ]\@!\p\)*:
|
|||||||
OK 0 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
OK 0 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
||||||
OK 1 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
OK 1 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
||||||
OK 2 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
OK 2 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
|
||||||
|
OK 0 - \%(\U\@<=S\k*\|S\l\)R
|
||||||
|
OK 1 - \%(\U\@<=S\k*\|S\l\)R
|
||||||
|
OK 2 - \%(\U\@<=S\k*\|S\l\)R
|
||||||
OK 0 - [[:alpha:]]\{-2,6}
|
OK 0 - [[:alpha:]]\{-2,6}
|
||||||
OK 1 - [[:alpha:]]\{-2,6}
|
OK 1 - [[:alpha:]]\{-2,6}
|
||||||
OK 2 - [[:alpha:]]\{-2,6}
|
OK 2 - [[:alpha:]]\{-2,6}
|
||||||
|
@@ -727,6 +727,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 */
|
||||||
|
/**/
|
||||||
|
39,
|
||||||
/**/
|
/**/
|
||||||
38,
|
38,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user