From: Bram Moolenaar Date: Thu, 21 Nov 2013 16:13:00 +0000 (+0100) Subject: updated for version 7.4.101 X-Git-Tag: v7.4.101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=438ee5bf603f3cee2c8ec924d081885c0086ba19;p=vim updated for version 7.4.101 Problem: Using \1 in pattern goes one line too far. (Bohr Shaw, John Little) Solution: Only advance the match end for the matched characters in the last line. --- diff --git a/src/regexp.c b/src/regexp.c index 075374d16..f1e8909b2 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -6455,7 +6455,8 @@ re_num_cmp(val, scan) /* * Check whether a backreference matches. * Returns RA_FAIL, RA_NOMATCH or RA_MATCH. - * If "bytelen" is not NULL, it is set to the bytelength of the whole match. + * If "bytelen" is not NULL, it is set to the byte length of the match in the + * last line. */ static int match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen) @@ -6511,6 +6512,8 @@ match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen) /* Advance to next line. */ reg_nextline(); + if (bytelen != NULL) + *bytelen = 0; ++clnum; ccol = 0; if (got_int) diff --git a/src/testdir/test64.in b/src/testdir/test64.in index 77949c514..29bf0b902 100644 --- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -507,6 +507,8 @@ STARTTEST :" Check a pattern with a line break and ^ and $ :call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']]) :" +:call add(tl, [2, '\(^.\+\n\)\1', [' dog', ' dog', 'asdf'], ['XXasdf']]) +:" :"""" Run the multi-line tests :" :$put ='multi-line tests' diff --git a/src/testdir/test64.ok b/src/testdir/test64.ok index 4bbc5335d..a1498ea5d 100644 --- a/src/testdir/test64.ok +++ b/src/testdir/test64.ok @@ -1031,6 +1031,9 @@ OK 2 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25 OK 0 - a\n^b$\n^c OK 1 - a\n^b$\n^c OK 2 - a\n^b$\n^c +OK 0 - \(^.\+\n\)\1 +OK 1 - \(^.\+\n\)\1 +OK 2 - \(^.\+\n\)\1 Ta 5 Ac 7 diff --git a/src/version.c b/src/version.c index ab3711d10..47deb0c43 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 101, /**/ 100, /**/