Compare commits

...

2 Commits

Author SHA1 Message Date
Bram Moolenaar
69b52456fc updated for version 7.4a.032
Problem:    New regexp engine: Does not match shorter alternative. (Ingo
            Karkat)
Solution:   Do not drop a new state when the PIM info is different.
2013-07-17 21:10:51 +02:00
Bram Moolenaar
de9149ef18 updated for version 7.4a.031
Problem:    Compiler warnings. (Charles Campbell)
Solution:   Initialize variables even when not needed.
2013-07-17 19:22:13 +02:00
3 changed files with 47 additions and 8 deletions

View File

@@ -3535,7 +3535,8 @@ static void copy_sub __ARGS((regsub_T *to, regsub_T *from));
static void copy_sub_off __ARGS((regsub_T *to, regsub_T *from));
static int sub_equal __ARGS((regsub_T *sub1, regsub_T *sub2));
static int match_backref __ARGS((regsub_T *sub, int subidx, int *bytelen));
static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim));
static int pim_equal __ARGS((nfa_pim_T *one, nfa_pim_T *two));
static int state_in_list __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
static regsubs_T *addstate __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim, int off));
static void addstate_here __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip));
@@ -3701,10 +3702,11 @@ report_state(char *action,
* positions as "subs".
*/
static int
has_state_with_pos(l, state, subs)
has_state_with_pos(l, state, subs, pim)
nfa_list_T *l; /* runtime state list */
nfa_state_T *state; /* state to update */
regsubs_T *subs; /* pointers to subexpressions */
nfa_pim_T *pim; /* postponed match or NULL */
{
nfa_thread_T *thread;
int i;
@@ -3718,12 +3720,37 @@ has_state_with_pos(l, state, subs)
&& (!nfa_has_zsubexpr
|| sub_equal(&thread->subs.synt, &subs->synt))
#endif
)
&& pim_equal(&thread->pim, pim))
return TRUE;
}
return FALSE;
}
/*
* Return TRUE if "one" and "two" are equal. That includes when both are not
* set.
*/
static int
pim_equal(one, two)
nfa_pim_T *one;
nfa_pim_T *two;
{
int one_unused = (one == NULL || one->result == NFA_PIM_UNUSED);
int two_unused = (two == NULL || two->result == NFA_PIM_UNUSED);
if (one_unused)
/* one is unused: equal when two is also unused */
return two_unused;
if (two_unused)
/* one is used and two is not: not equal */
return FALSE;
/* compare the position */
if (REG_MULTI)
return one->end.pos.lnum == two->end.pos.lnum
&& one->end.pos.col == two->end.pos.col;
return one->end.ptr == two->end.ptr;
}
/*
* Return TRUE if "state" leads to a NFA_MATCH without advancing the input.
*/
@@ -3825,7 +3852,7 @@ state_in_list(l, state, subs)
{
if (state->lastlist[nfa_ll_index] == l->id)
{
if (!nfa_has_backref || has_state_with_pos(l, state, subs))
if (!nfa_has_backref || has_state_with_pos(l, state, subs, NULL))
return TRUE;
}
return FALSE;
@@ -3952,7 +3979,7 @@ skip_add:
/* Do not add the state again when it exists with the same
* positions. */
if (has_state_with_pos(l, state, subs))
if (has_state_with_pos(l, state, subs, pim))
goto skip_add;
}
@@ -4060,9 +4087,13 @@ skip_add:
sub = &subs->norm;
}
/* avoid compiler warnings */
save_ptr = NULL;
save_lpos.lnum = 0;
save_lpos.col = 0;
/* Set the position (with "off" added) in the subexpression. Save
* and restore it when it was in use. Otherwise fill any gap. */
save_ptr = NULL;
if (REG_MULTI)
{
if (subidx < sub->in_use)
@@ -4192,11 +4223,16 @@ skip_add:
sub->list.multi[subidx].end.col =
(colnr_T)(reginput - regline + off);
}
/* avoid compiler warnings */
save_ptr = NULL;
}
else
{
save_ptr = sub->list.line[subidx].end;
sub->list.line[subidx].end = reginput + off;
/* avoid compiler warnings */
save_lpos.lnum = 0;
save_lpos.col = 0;
}
subs = addstate(l, state->out, subs, pim, off);

View File

@@ -4509,7 +4509,7 @@ current_search(count, forward)
int result; /* result of various function calls */
char_u old_p_ws = p_ws;
int flags = 0;
pos_T save_VIsual;
pos_T save_VIsual = VIsual;
int one_char;
/* wrapping should not occur */
@@ -4522,7 +4522,6 @@ current_search(count, forward)
if (VIsual_active)
{
orig_pos = curwin->w_cursor;
save_VIsual = VIsual;
pos = curwin->w_cursor;
start_pos = VIsual;

View File

@@ -727,6 +727,10 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
32,
/**/
31,
/**/
30,
/**/