diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-05-21 21:20:20 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-05-21 21:20:20 +0200 |
commit | f878bf0da229d6abad4767e8f5da883cce4eaaca (patch) | |
tree | 982a6444a3de3da4f25fc882a2089794a9208329 | |
parent | e6ae6225b4abd914b13648638c58bb253124473a (diff) |
updated for version 7.3.999v7.3.999
Problem: New regexp engine sets curbuf temporarily.
Solution: Use reg_buf instead, like the old engine.
-rw-r--r-- | src/regexp_nfa.c | 27 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 12 insertions, 17 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index a9b5cfe3c1..9fcba4495f 100644 --- 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, col, tm) 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, col, tm) #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 diff --git a/src/version.c b/src/version.c index 5466674e7e..ae257e91ec 100644 --- 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, |