mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
updated for version 7.4.184
Problem: match() does not work properly with a {count} argument. Solution: Compute the length once and update it. Quit the loop when at the end. (Hirohito Higashi)
This commit is contained in:
17
src/eval.c
17
src/eval.c
@@ -8014,7 +8014,7 @@ static struct fst
|
|||||||
{"log10", 1, 1, f_log10},
|
{"log10", 1, 1, f_log10},
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_LUA
|
#ifdef FEAT_LUA
|
||||||
{"luaeval", 1, 2, f_luaeval},
|
{"luaeval", 1, 2, f_luaeval},
|
||||||
#endif
|
#endif
|
||||||
{"map", 2, 2, f_map},
|
{"map", 2, 2, f_map},
|
||||||
{"maparg", 1, 4, f_maparg},
|
{"maparg", 1, 4, f_maparg},
|
||||||
@@ -13905,6 +13905,7 @@ find_some_match(argvars, rettv, type)
|
|||||||
int type;
|
int type;
|
||||||
{
|
{
|
||||||
char_u *str = NULL;
|
char_u *str = NULL;
|
||||||
|
long len = 0;
|
||||||
char_u *expr = NULL;
|
char_u *expr = NULL;
|
||||||
char_u *pat;
|
char_u *pat;
|
||||||
regmatch_T regmatch;
|
regmatch_T regmatch;
|
||||||
@@ -13944,7 +13945,10 @@ find_some_match(argvars, rettv, type)
|
|||||||
li = l->lv_first;
|
li = l->lv_first;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
expr = str = get_tv_string(&argvars[0]);
|
expr = str = get_tv_string(&argvars[0]);
|
||||||
|
len = (long)STRLEN(str);
|
||||||
|
}
|
||||||
|
|
||||||
pat = get_tv_string_buf_chk(&argvars[1], patbuf);
|
pat = get_tv_string_buf_chk(&argvars[1], patbuf);
|
||||||
if (pat == NULL)
|
if (pat == NULL)
|
||||||
@@ -13968,7 +13972,7 @@ find_some_match(argvars, rettv, type)
|
|||||||
{
|
{
|
||||||
if (start < 0)
|
if (start < 0)
|
||||||
start = 0;
|
start = 0;
|
||||||
if (start > (long)STRLEN(str))
|
if (start > len)
|
||||||
goto theend;
|
goto theend;
|
||||||
/* When "count" argument is there ignore matches before "start",
|
/* When "count" argument is there ignore matches before "start",
|
||||||
* otherwise skip part of the string. Differs when pattern is "^"
|
* otherwise skip part of the string. Differs when pattern is "^"
|
||||||
@@ -13976,7 +13980,10 @@ find_some_match(argvars, rettv, type)
|
|||||||
if (argvars[3].v_type != VAR_UNKNOWN)
|
if (argvars[3].v_type != VAR_UNKNOWN)
|
||||||
startcol = start;
|
startcol = start;
|
||||||
else
|
else
|
||||||
|
{
|
||||||
str += start;
|
str += start;
|
||||||
|
len -= start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argvars[3].v_type != VAR_UNKNOWN)
|
if (argvars[3].v_type != VAR_UNKNOWN)
|
||||||
@@ -14026,6 +14033,12 @@ find_some_match(argvars, rettv, type)
|
|||||||
#else
|
#else
|
||||||
startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
|
startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
|
||||||
#endif
|
#endif
|
||||||
|
if (startcol > (colnr_T)len
|
||||||
|
|| str + startcol <= regmatch.startp[0])
|
||||||
|
{
|
||||||
|
match = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,6 +4,8 @@ Note that the end-of-line moves the cursor to the next test line.
|
|||||||
|
|
||||||
Also test match() and matchstr()
|
Also test match() and matchstr()
|
||||||
|
|
||||||
|
Also test the gn command and repeating it.
|
||||||
|
|
||||||
STARTTEST
|
STARTTEST
|
||||||
:so small.vim
|
:so small.vim
|
||||||
/^start:/
|
/^start:/
|
||||||
@@ -28,6 +30,28 @@ fXdat
|
|||||||
:put =matchstr(\"abcd\", \".\", 0, -1) " a
|
:put =matchstr(\"abcd\", \".\", 0, -1) " a
|
||||||
:put =match(\"abcd\", \".\", 0, 5) " -1
|
:put =match(\"abcd\", \".\", 0, 5) " -1
|
||||||
:put =match(\"abcd\", \".\", 0, -1) " 0
|
:put =match(\"abcd\", \".\", 0, -1) " 0
|
||||||
|
:put =match('abc', '.', 0, 1) " 0
|
||||||
|
:put =match('abc', '.', 0, 2) " 1
|
||||||
|
:put =match('abc', '.', 0, 3) " 2
|
||||||
|
:put =match('abc', '.', 0, 4) " -1
|
||||||
|
:put =match('abc', '.', 1, 1) " 1
|
||||||
|
:put =match('abc', '.', 2, 1) " 2
|
||||||
|
:put =match('abc', '.', 3, 1) " -1
|
||||||
|
:put =match('abc', '$', 0, 1) " 3
|
||||||
|
:put =match('abc', '$', 0, 2) " -1
|
||||||
|
:put =match('abc', '$', 1, 1) " 3
|
||||||
|
:put =match('abc', '$', 2, 1) " 3
|
||||||
|
:put =match('abc', '$', 3, 1) " 3
|
||||||
|
:put =match('abc', '$', 4, 1) " -1
|
||||||
|
:put =match('abc', '\zs', 0, 1) " 0
|
||||||
|
:put =match('abc', '\zs', 0, 2) " 1
|
||||||
|
:put =match('abc', '\zs', 0, 3) " 2
|
||||||
|
:put =match('abc', '\zs', 0, 4) " 3
|
||||||
|
:put =match('abc', '\zs', 0, 5) " -1
|
||||||
|
:put =match('abc', '\zs', 1, 1) " 1
|
||||||
|
:put =match('abc', '\zs', 2, 1) " 2
|
||||||
|
:put =match('abc', '\zs', 3, 1) " 3
|
||||||
|
:put =match('abc', '\zs', 4, 1) " -1
|
||||||
/^foobar
|
/^foobar
|
||||||
gncsearchmatch/one\_s*two\_s
|
gncsearchmatch/one\_s*two\_s
|
||||||
:1
|
:1
|
||||||
@@ -49,6 +73,12 @@ cgnj
|
|||||||
:" Make sure there is no other match y uppercase.
|
:" Make sure there is no other match y uppercase.
|
||||||
/x59
|
/x59
|
||||||
gggnd
|
gggnd
|
||||||
|
:" test repeating dgn
|
||||||
|
/^Johnny
|
||||||
|
ggdgn.
|
||||||
|
:" test repeating gUgn
|
||||||
|
/^Depp
|
||||||
|
gggUgn.
|
||||||
:/^start:/,/^end:/wq! test.out
|
:/^start:/,/^end:/wq! test.out
|
||||||
ENDTEST
|
ENDTEST
|
||||||
|
|
||||||
@@ -81,4 +111,13 @@ for (i=0; i<=10; i++)
|
|||||||
Y
|
Y
|
||||||
text
|
text
|
||||||
Y
|
Y
|
||||||
|
--1
|
||||||
|
Johnny
|
||||||
|
--2
|
||||||
|
Johnny
|
||||||
|
--3
|
||||||
|
Depp
|
||||||
|
--4
|
||||||
|
Depp
|
||||||
|
--5
|
||||||
end:
|
end:
|
||||||
|
@@ -18,6 +18,28 @@ c
|
|||||||
a
|
a
|
||||||
-1
|
-1
|
||||||
0
|
0
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
-1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
-1
|
||||||
|
3
|
||||||
|
-1
|
||||||
|
3
|
||||||
|
3
|
||||||
|
3
|
||||||
|
-1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
-1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
-1
|
||||||
SEARCH:
|
SEARCH:
|
||||||
searchmatch
|
searchmatch
|
||||||
abcdx | | abcdx
|
abcdx | | abcdx
|
||||||
@@ -30,4 +52,13 @@ for (j=0; i<=10; i++)
|
|||||||
|
|
||||||
text
|
text
|
||||||
Y
|
Y
|
||||||
|
--1
|
||||||
|
|
||||||
|
--2
|
||||||
|
|
||||||
|
--3
|
||||||
|
DEPP
|
||||||
|
--4
|
||||||
|
DEPP
|
||||||
|
--5
|
||||||
end:
|
end:
|
||||||
|
@@ -738,6 +738,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
184,
|
||||||
/**/
|
/**/
|
||||||
183,
|
183,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user