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

updated for version 7.3.1034

Problem:    New regexp code using strange multi-byte code.
Solution:   Use the normal code to advance and backup pointers.
This commit is contained in:
Bram Moolenaar 2013-05-28 22:30:35 +02:00
parent 5714b80032
commit 51a2983904
2 changed files with 12 additions and 54 deletions

View File

@ -188,8 +188,6 @@ static int istate; /* Index in the state vector, used in new_state() */
static int nfa_regcomp_start __ARGS((char_u*expr, int re_flags)); static int nfa_regcomp_start __ARGS((char_u*expr, int re_flags));
static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl)); static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl));
static int nfa_emit_equi_class __ARGS((int c, int neg)); static int nfa_emit_equi_class __ARGS((int c, int neg));
static void nfa_inc __ARGS((char_u **p));
static void nfa_dec __ARGS((char_u **p));
static int nfa_regatom __ARGS((void)); static int nfa_regatom __ARGS((void));
static int nfa_regpiece __ARGS((void)); static int nfa_regpiece __ARGS((void));
static int nfa_regconcat __ARGS((void)); static int nfa_regconcat __ARGS((void));
@ -553,48 +551,6 @@ nfa_emit_equi_class(c, neg)
* minimize surprise and keep the syntax consistent. * minimize surprise and keep the syntax consistent.
*/ */
/*
* Increments the pointer "p" by one (multi-byte) character.
*/
static void
nfa_inc(p)
char_u **p;
{
#ifdef FEAT_MBYTE
if (has_mbyte)
mb_ptr2char_adv(p);
else
#endif
*p = *p + 1;
}
/*
* Decrements the pointer "p" by one (multi-byte) character.
*/
static void
nfa_dec(p)
char_u **p;
{
#ifdef FEAT_MBYTE
char_u *p2, *oldp;
if (has_mbyte)
{
oldp = *p;
/* Try to find the multibyte char that advances to the current
* position. */
do
{
*p = *p - 1;
p2 = *p;
mb_ptr2char_adv(&p2);
} while (p2 != oldp);
}
#else
*p = *p - 1;
#endif
}
/* /*
* Parse the lowest level. * Parse the lowest level.
* *
@ -963,7 +919,7 @@ collection:
EMIT(NFA_OR); EMIT(NFA_OR);
} }
regparse = endp; regparse = endp;
nfa_inc(&regparse); mb_ptr_adv(regparse);
return OK; return OK;
} }
/* /*
@ -978,7 +934,7 @@ collection:
{ {
negated = TRUE; negated = TRUE;
glue = NFA_CONCAT; glue = NFA_CONCAT;
nfa_inc(&regparse); mb_ptr_adv(regparse);
} }
if (*regparse == '-') if (*regparse == '-')
{ {
@ -986,7 +942,7 @@ collection:
EMIT(startc); EMIT(startc);
TRY_NEG(); TRY_NEG();
EMIT_GLUE(); EMIT_GLUE();
nfa_inc(&regparse); mb_ptr_adv(regparse);
} }
/* Emit the OR branches for each character in the [] */ /* Emit the OR branches for each character in the [] */
emit_range = FALSE; emit_range = FALSE;
@ -1090,7 +1046,7 @@ collection:
{ {
emit_range = TRUE; emit_range = TRUE;
startc = oldstartc; startc = oldstartc;
nfa_inc(&regparse); mb_ptr_adv(regparse);
continue; /* reading the end of the range */ continue; /* reading the end of the range */
} }
@ -1110,7 +1066,7 @@ collection:
) )
) )
{ {
nfa_inc(&regparse); mb_ptr_adv(regparse);
if (*regparse == 'n') if (*regparse == 'n')
startc = reg_string ? NL : NFA_NEWL; startc = reg_string ? NL : NFA_NEWL;
@ -1125,7 +1081,7 @@ collection:
/* TODO(RE) This needs more testing */ /* TODO(RE) This needs more testing */
startc = coll_get_char(); startc = coll_get_char();
got_coll_char = TRUE; got_coll_char = TRUE;
nfa_dec(&regparse); mb_ptr_back(old_regparse, regparse);
} }
else else
{ {
@ -1210,17 +1166,17 @@ collection:
EMIT_GLUE(); EMIT_GLUE();
} }
nfa_inc(&regparse); mb_ptr_adv(regparse);
} /* while (p < endp) */ } /* while (p < endp) */
nfa_dec(&regparse); mb_ptr_back(old_regparse, regparse);
if (*regparse == '-') /* if last, '-' is just a char */ if (*regparse == '-') /* if last, '-' is just a char */
{ {
EMIT('-'); EMIT('-');
TRY_NEG(); TRY_NEG();
EMIT_GLUE(); EMIT_GLUE();
} }
nfa_inc(&regparse); mb_ptr_adv(regparse);
if (extra == ADD_NL) /* \_[] also matches \n */ if (extra == ADD_NL) /* \_[] also matches \n */
{ {
@ -1231,7 +1187,7 @@ collection:
/* skip the trailing ] */ /* skip the trailing ] */
regparse = endp; regparse = endp;
nfa_inc(&regparse); mb_ptr_adv(regparse);
if (negated == TRUE) if (negated == TRUE)
{ {
/* Mark end of negated char range */ /* Mark end of negated char range */

View File

@ -728,6 +728,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 */
/**/
1034,
/**/ /**/
1033, 1033,
/**/ /**/