summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-06-17 21:33:41 +0200
committerBram Moolenaar <Bram@vim.org>2013-06-17 21:33:41 +0200
commitd79862599d8cdd2186480dda1cf990d4ca0134fe (patch)
treeff104c148bc65c506fc8df4a33e6ee67ba6282fd /src
parent6324c3b920ce9efa57884768fc6d9cb208f8e983 (diff)
downloadvim-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.c7
-rw-r--r--src/testdir/test64.in1
-rw-r--r--src/testdir/test64.ok3
-rw-r--r--src/version.c2
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,