From 7819ea79ba3b634aa39544388ef34e56234af3bd Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Feb 24 2014 13:15:42 +0000 Subject: - patchlevel 184 --- diff --git a/7.4.184 b/7.4.184 new file mode 100644 index 0000000..d6ceb64 --- /dev/null +++ b/7.4.184 @@ -0,0 +1,250 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.184 +Fcc: outbox +From: Bram Moolenaar +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 ///