diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-06-17 21:33:41 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-06-17 21:33:41 +0200 |
commit | d79862599d8cdd2186480dda1cf990d4ca0134fe (patch) | |
tree | ff104c148bc65c506fc8df4a33e6ee67ba6282fd /src | |
parent | 6324c3b920ce9efa57884768fc6d9cb208f8e983 (diff) | |
download | vim-git-d79862599d8cdd2186480dda1cf990d4ca0134fe.tar.gz |
updated for version 7.3.1217v7.3.1217
Problem: New regexp engine: Can't handle \%[[ao]]. (Yukihiro Nakadaira)
Solution: Support nested atoms inside \%[].
Diffstat (limited to 'src')
-rw-r--r-- | src/regexp_nfa.c | 7 | ||||
-rw-r--r-- | src/testdir/test64.in | 1 | ||||
-rw-r--r-- | src/testdir/test64.ok | 3 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 11 insertions, 2 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c index fc87e39fb..f11c01a9c 100644 --- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1150,13 +1150,16 @@ nfa_regatom() int n; /* \%[abc] */ - for (n = 0; (c = getchr()) != ']'; ++n) + for (n = 0; (c = peekchr()) != ']'; ++n) { if (c == NUL) EMSG2_RET_FAIL(_(e_missing_sb), reg_magic == MAGIC_ALL); - EMIT(c); + /* recursive call! */ + if (nfa_regatom() == FAIL) + return FAIL; } + getchr(); /* get the ] */ if (n == 0) EMSG2_RET_FAIL(_(e_empty_sb), reg_magic == MAGIC_ALL); diff --git a/src/testdir/test64.in b/src/testdir/test64.in index 0cabcdfc0..061f1f1e7 100644 --- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -366,6 +366,7 @@ STARTTEST :call add(tl, [2, '\%[bar]x', 'barxx', 'barx']) :call add(tl, [2, '\%[bar]x', 'bxx', 'bx']) :call add(tl, [2, '\%[bar]x', 'xxx', 'x']) +:call add(tl, [2, 'b\%[[ao]r]', 'bar bor', 'bar']) :" :"""" Alternatives, must use first longest match :call add(tl, [2, 'goo\|go', 'google', 'goo']) diff --git a/src/testdir/test64.ok b/src/testdir/test64.ok index fda589223..7021d18b5 100644 --- a/src/testdir/test64.ok +++ b/src/testdir/test64.ok @@ -836,6 +836,9 @@ OK 2 - \%[bar]x OK 0 - \%[bar]x OK 1 - \%[bar]x OK 2 - \%[bar]x +OK 0 - b\%[[ao]r] +OK 1 - b\%[[ao]r] +OK 2 - b\%[[ao]r] OK 0 - goo\|go OK 1 - goo\|go OK 2 - goo\|go diff --git a/src/version.c b/src/version.c index e1c4ebcf7..86f8a858f 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 */ /**/ + 1217, +/**/ 1216, /**/ 1215, |