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.
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 2304ce4..9339cd3 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -188,8 +188,6 @@
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_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_regpiece __ARGS((void));
static int nfa_regconcat __ARGS((void));
@@ -554,48 +552,6 @@
*/
/*
- * 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.
*
* An atom can be one of a long list of items. Many atoms match one character
@@ -963,7 +919,7 @@
EMIT(NFA_OR);
}
regparse = endp;
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
return OK;
}
/*
@@ -978,7 +934,7 @@
{
negated = TRUE;
glue = NFA_CONCAT;
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
}
if (*regparse == '-')
{
@@ -986,7 +942,7 @@
EMIT(startc);
TRY_NEG();
EMIT_GLUE();
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
}
/* Emit the OR branches for each character in the [] */
emit_range = FALSE;
@@ -1090,7 +1046,7 @@
{
emit_range = TRUE;
startc = oldstartc;
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
continue; /* reading the end of the range */
}
@@ -1110,7 +1066,7 @@
)
)
{
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
if (*regparse == 'n')
startc = reg_string ? NL : NFA_NEWL;
@@ -1125,7 +1081,7 @@
/* TODO(RE) This needs more testing */
startc = coll_get_char();
got_coll_char = TRUE;
- nfa_dec(®parse);
+ mb_ptr_back(old_regparse, regparse);
}
else
{
@@ -1210,17 +1166,17 @@
EMIT_GLUE();
}
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
} /* while (p < endp) */
- nfa_dec(®parse);
+ mb_ptr_back(old_regparse, regparse);
if (*regparse == '-') /* if last, '-' is just a char */
{
EMIT('-');
TRY_NEG();
EMIT_GLUE();
}
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
if (extra == ADD_NL) /* \_[] also matches \n */
{
@@ -1231,7 +1187,7 @@
/* skip the trailing ] */
regparse = endp;
- nfa_inc(®parse);
+ mb_ptr_adv(regparse);
if (negated == TRUE)
{
/* Mark end of negated char range */
diff --git a/src/version.c b/src/version.c
index 90beb47..72ad14f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1034,
+/**/
1033,
/**/
1032,