vim/7.4.184
2014-02-24 14:15:42 +01:00

251 lines
5.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

To: vim_dev@googlegroups.com
Subject: Patch 7.4.184
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
Patch 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)
Files: src/eval.c, src/testdir/test53.in, src/testdir/test53.ok
*** ../vim-7.4.183/src/eval.c 2014-02-05 22:13:02.366556787 +0100
--- src/eval.c 2014-02-22 22:13:26.644906020 +0100
***************
*** 8014,8020 ****
{"log10", 1, 1, f_log10},
#endif
#ifdef FEAT_LUA
! {"luaeval", 1, 2, f_luaeval},
#endif
{"map", 2, 2, f_map},
{"maparg", 1, 4, f_maparg},
--- 8014,8020 ----
{"log10", 1, 1, f_log10},
#endif
#ifdef FEAT_LUA
! {"luaeval", 1, 2, f_luaeval},
#endif
{"map", 2, 2, f_map},
{"maparg", 1, 4, f_maparg},
***************
*** 13905,13910 ****
--- 13905,13911 ----
int type;
{
char_u *str = NULL;
+ long len = 0;
char_u *expr = NULL;
char_u *pat;
regmatch_T regmatch;
***************
*** 13944,13950 ****
--- 13945,13954 ----
li = l->lv_first;
}
else
+ {
expr = str = get_tv_string(&argvars[0]);
+ len = (long)STRLEN(str);
+ }
pat = get_tv_string_buf_chk(&argvars[1], patbuf);
if (pat == NULL)
***************
*** 13968,13974 ****
{
if (start < 0)
start = 0;
! if (start > (long)STRLEN(str))
goto theend;
/* When "count" argument is there ignore matches before "start",
* otherwise skip part of the string. Differs when pattern is "^"
--- 13972,13978 ----
{
if (start < 0)
start = 0;
! if (start > len)
goto theend;
/* When "count" argument is there ignore matches before "start",
* otherwise skip part of the string. Differs when pattern is "^"
***************
*** 13976,13982 ****
--- 13980,13989 ----
if (argvars[3].v_type != VAR_UNKNOWN)
startcol = start;
else
+ {
str += start;
+ len -= start;
+ }
}
if (argvars[3].v_type != VAR_UNKNOWN)
***************
*** 14026,14031 ****
--- 14033,14044 ----
#else
startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
#endif
+ if (startcol > (colnr_T)len
+ || str + startcol <= regmatch.startp[0])
+ {
+ match = FALSE;
+ break;
+ }
}
}
*** ../vim-7.4.183/src/testdir/test53.in 2013-10-02 21:54:57.000000000 +0200
--- src/testdir/test53.in 2014-02-22 22:08:24.260906501 +0100
***************
*** 4,9 ****
--- 4,11 ----
Also test match() and matchstr()
+ Also test the gn command and repeating it.
+
STARTTEST
:so small.vim
/^start:/
***************
*** 28,33 ****
--- 30,57 ----
:put =matchstr(\"abcd\", \".\", 0, -1) " a
:put =match(\"abcd\", \".\", 0, 5) " -1
: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
gncsearchmatch/one\_s*two\_s
:1
***************
*** 49,54 ****
--- 73,84 ----
:" Make sure there is no other match y uppercase.
/x59
gggnd
+ :" test repeating dgn
+ /^Johnny
+ ggdgn.
+ :" test repeating gUgn
+ /^Depp
+ gggUgn.
:/^start:/,/^end:/wq! test.out
ENDTEST
***************
*** 81,84 ****
--- 111,123 ----
Y
text
Y
+ --1
+ Johnny
+ --2
+ Johnny
+ --3
+ Depp
+ --4
+ Depp
+ --5
end:
*** ../vim-7.4.183/src/testdir/test53.ok 2013-10-02 21:54:57.000000000 +0200
--- src/testdir/test53.ok 2014-02-22 22:08:24.264906501 +0100
***************
*** 18,23 ****
--- 18,45 ----
a
-1
0
+ 0
+ 1
+ 2
+ -1
+ 1
+ 2
+ -1
+ 3
+ -1
+ 3
+ 3
+ 3
+ -1
+ 0
+ 1
+ 2
+ 3
+ -1
+ 1
+ 2
+ 3
+ -1
SEARCH:
searchmatch
abcdx | | abcdx
***************
*** 30,33 ****
--- 52,64 ----
text
Y
+ --1
+
+ --2
+
+ --3
+ DEPP
+ --4
+ DEPP
+ --5
end:
*** ../vim-7.4.183/src/version.c 2014-02-15 19:47:46.685882910 +0100
--- src/version.c 2014-02-22 22:10:49.604906270 +0100
***************
*** 740,741 ****
--- 740,743 ----
{ /* Add new patch number below this line */
+ /**/
+ 184,
/**/
--
WOMAN: I didn't know we had a king. I thought we were an autonomous
collective.
DENNIS: You're fooling yourself. We're living in a dictatorship. A
self-perpetuating autocracy in which the working classes--
WOMAN: Oh there you go, bringing class into it again.
DENNIS: That's what it's all about if only people would--
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///