0
0
mirror of https://github.com/vim/vim.git synced 2025-09-15 23:23:38 -04:00

patch 8.2.4693: new regexp does not accept pattern "\%>0v"

Problem:    new regexp does not accept pattern "\%>0v".
Solution:   Do accept digit zero.
This commit is contained in:
Bram Moolenaar 2022-04-05 14:00:32 +01:00
parent 0f68e6c07a
commit 72bb10df1f
4 changed files with 23 additions and 3 deletions

View File

@ -1617,6 +1617,7 @@ regatom(int *flagp)
long_u n = 0;
int cmp;
int cur = FALSE;
int got_digit = FALSE;
cmp = c;
if (cmp == '<' || cmp == '>')
@ -1628,6 +1629,7 @@ regatom(int *flagp)
}
while (VIM_ISDIGIT(c))
{
got_digit = TRUE;
n = n * 10 + (c - '0');
c = getchr();
}
@ -1645,7 +1647,8 @@ regatom(int *flagp)
}
break;
}
else if (c == 'l' || c == 'c' || c == 'v')
else if ((c == 'l' || c == 'c' || c == 'v')
&& (cur || got_digit))
{
if (cur && n)
{

View File

@ -1640,6 +1640,7 @@ nfa_regatom(void)
long_u n = 0;
int cmp = c;
int cur = FALSE;
int got_digit = FALSE;
if (c == '<' || c == '>')
c = getchr();
@ -1668,12 +1669,13 @@ nfa_regatom(void)
}
n = tmp;
c = getchr();
got_digit = TRUE;
}
if (c == 'l' || c == 'c' || c == 'v')
{
long_u limit = INT_MAX;
if (!cur && n == 0)
if (!cur && !got_digit)
{
semsg(_(e_nfa_regexp_missing_value_in_chr),
no_Magic(c));

View File

@ -91,16 +91,29 @@ func Test_multi_failure()
set re=0
endfunc
func Test_column_failure()
func Test_column_success_failure()
new
call setline(1, 'xbar')
set re=1
%s/\%>0v./A/
call assert_equal('Abar', getline(1))
call assert_fails('/\%v', 'E71:')
call assert_fails('/\%>v', 'E71:')
call assert_fails('/\%c', 'E71:')
call assert_fails('/\%<c', 'E71:')
call assert_fails('/\%l', 'E71:')
set re=2
%s/\%>0v./B/
call assert_equal('Bbar', getline(1))
call assert_fails('/\%v', 'E1273:')
call assert_fails('/\%>v', 'E1273:')
call assert_fails('/\%c', 'E1273:')
call assert_fails('/\%<c', 'E1273:')
call assert_fails('/\%l', 'E1273:')
set re=0
bwipe!
endfunc
func Test_recursive_addstate()

View File

@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4693,
/**/
4692,
/**/