# HG changeset patch # User Bram Moolenaar # Date 1371301790 -7200 # Node ID 56fbf60e94766a202ee71749eea19a862695c92f # Parent c1170f618303e495faca5b1451f8be4c0bdbc834 updated for version 7.3.1196 Problem: Old regexp engine does not match pattern with backref correctly. (Dominique Pelle) Solution: Fix setting status. Test multi-line patterns better. diff --git a/src/regexp.c b/src/regexp.c --- a/src/regexp.c +++ b/src/regexp.c @@ -5021,12 +5021,15 @@ regmatch(scan) { /* Messy situation: Need to compare between two * lines. */ - status = match_with_backref( + int r = match_with_backref( reg_startpos[no].lnum, reg_startpos[no].col, reg_endpos[no].lnum, reg_endpos[no].col, &len); + + if (r != RA_MATCH) + status = r; } } } diff --git a/src/testdir/test64.in b/src/testdir/test64.in --- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -377,6 +377,7 @@ STARTTEST :call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo']) :call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i']) :call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', '']) +:call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a']) :" :"""" Look-behind with limit :call add(tl, [2, '<\@<=span.', 'xxspanxx -:" This only works on a buffer line, not with expression evaluation -/^Find this -/\%#=0\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\> -y$Gop:" -/^Find this -/\%#=1\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\> -y$Gop:" -/^Find this -/\%#=2\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\> -y$Gop:" +:call add(tl, [2, '\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>', ['', 'localnet/192.168.0.1', ''], ['', 'localnet/XX', '']]) +:" +:" Check a pattern with a line break and ^ and $ +:call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']]) +:" +:"""" Run the multi-line tests +:" +:$put ='multi-line tests' +:for t in tl +: let re = t[0] +: let pat = t[1] +: let before = t[2] +: let after = t[3] +: for engine in [0, 1, 2] +: if engine == 2 && re == 0 || engine == 1 && re ==1 +: continue +: endif +: let ®expengine = engine +: new +: call setline(1, before) +: exe '%s/' . pat . '/XX/' +: let result = getline(1, '$') +: q! +: if result != after +: $put ='ERROR: pat: \"' . pat . '\", text: \"' . string(before) . '\", expected: \"' . string(after) . '\", got: \"' . string(result) . '\"' +: else +: $put ='OK ' . engine . ' - ' . pat +: endif +: endfor +:endfor +:unlet t tl :" :" Check that using a pattern on two lines doesn't get messed up by using :" matchstr() with \ze in between. @@ -474,24 +506,6 @@ y$Gop:" :.+1,.+2yank Gop:" :" -:" Check a pattern with a line break matches in the right position. -/^Multiline -/\S.*\nx -:.yank -y$Gop:" -:" -:" Check a pattern with a line break and ^ and $ -/^Abc: -/a\n^b$\n^c/e -:.yank -Gop:" -:" -:" Check using a backref matching in a previous line -/^Backref: -/\v.*\/(.*)\n.*\/\1$ -:.yank -Gop:" -:" :" Check a pattern with a look beind crossing a line boundary /^Behind: /\(<\_[xy]\+\)\@3<=start @@ -553,32 +567,10 @@ 50%/\%$ :/\%#=1^Results/,$wq! test.out ENDTEST -Find this: -localnet/192.168.0.1 - Substitute here: Ta 5 Ac 7 -Multiline: -abc -def -ghi -xjk -lmn - -Abc: -a -b -c - -Backref: -./Dir1/Dir2/zyxwvuts.txt -./Dir1/Dir2/abcdefgh.bat - -./Dir1/Dir2/file1.txt -./OtherDir1/OtherDir2/file1.txt - Behind: asdfasd +OK 1 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\> +OK 2 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\> +OK 0 - a\n^b$\n^c +OK 1 - a\n^b$\n^c +OK 2 - a\n^b$\n^c Ta 5 Ac 7 -ghi - -c - -./Dir1/Dir2/file1.txt xxstart3 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1196, +/**/ 1195, /**/ 1194,