changeset 4503:e6e60d9da892 v7.3.999

updated for version 7.3.999 Problem: New regexp engine sets curbuf temporarily. Solution: Use reg_buf instead, like the old engine.
author Bram Moolenaar <bram@vim.org>
date Tue, 21 May 2013 21:20:20 +0200
parents 605c9ce57ec3
children 5dc2263b763b
files src/regexp_nfa.c src/version.c
diffstat 2 files changed, 12 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -3125,15 +3125,16 @@ again:
 		    int this_class;
 
 		    /* Get class of current and previous char (if it exists). */
-		    this_class = mb_get_class(reginput);
+		    this_class = mb_get_class_buf(reginput, reg_buf);
 		    if (this_class <= 1)
 			bow = FALSE;
 		    else if (reg_prev_class() == this_class)
 			bow = FALSE;
 		}
 #endif
-		else if (!vim_iswordc(c)
-			|| (reginput > regline && vim_iswordc(reginput[-1])))
+		else if (!vim_iswordc_buf(c, reg_buf)
+			   || (reginput > regline
+				   && vim_iswordc_buf(reginput[-1], reg_buf)))
 		    bow = FALSE;
 		if (bow)
 		    addstate(thislist, t->state->out, &t->sub, 0, listid,
@@ -3153,15 +3154,15 @@ again:
 		    int this_class, prev_class;
 
 		    /* Get class of current and previous char (if it exists). */
-		    this_class = mb_get_class(reginput);
+		    this_class = mb_get_class_buf(reginput, reg_buf);
 		    prev_class = reg_prev_class();
 		    if (this_class == prev_class
 					|| prev_class == 0 || prev_class == 1)
 			eow = FALSE;
 		}
 #endif
-		else if (!vim_iswordc(reginput[-1])
-				    || (reginput[0] != NUL && vim_iswordc(c)))
+		else if (!vim_iswordc_buf(reginput[-1], reg_buf)
+			|| (reginput[0] != NUL && vim_iswordc_buf(c, reg_buf)))
 		    eow = FALSE;
 		if (eow)
 		    addstate(thislist, t->state->out, &t->sub, 0, listid,
@@ -3267,12 +3268,12 @@ again:
 		break;
 
 	    case NFA_KWORD:	/*  \k	*/
-		result = vim_iswordp(reginput);
+		result = vim_iswordp_buf(reginput, reg_buf);
 		ADD_POS_NEG_STATE(t->state);
 		break;
 
 	    case NFA_SKWORD:	/*  \K	*/
-		result = !VIM_ISDIGIT(c) && vim_iswordp(reginput);
+		result = !VIM_ISDIGIT(c) && vim_iswordp_buf(reginput, reg_buf);
 		ADD_POS_NEG_STATE(t->state);
 		break;
 
@@ -3826,9 +3827,6 @@ nfa_regexec_multi(rmp, win, buf, lnum, c
     colnr_T	col;		/* column to start looking for match */
     proftime_T	*tm UNUSED;	/* timeout limit or NULL */
 {
-    long	r;
-    buf_T	*save_curbuf = curbuf;
-
     reg_match = NULL;
     reg_mmatch = rmp;
     reg_buf = buf;
@@ -3842,12 +3840,7 @@ nfa_regexec_multi(rmp, win, buf, lnum, c
 #endif
     ireg_maxcol = rmp->rmm_maxcol;
 
-    /* Need to switch to buffer "buf" to make vim_iswordc() work. */
-    curbuf = buf;
-    r = nfa_regexec_both(NULL, col);
-    curbuf = save_curbuf;
-
-    return r;
+    return nfa_regexec_both(NULL, col);
 }
 
 #ifdef DEBUG
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    999,
+/**/
     998,
 /**/
     997,