| 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 |
| |
| |
| |
| |
| |
| *** 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; |
| + } |
| } |
| } |
| |
| |
| |
| |
| *** 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: |
| |
| |
| |
| *** 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: |
| |
| |
| |
| *** 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 /// |