Mercurial > vim
changeset 4615:5679b8ddd8cc v7.3.1055
updated for version 7.3.1055
Problem: Negated collection does not match newline.
Solution: Handle newline differently. (Hiroshi Shirosaki)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 30 May 2013 11:51:08 +0200 |
parents | 560c247794b8 |
children | e8bc429ce5fc |
files | src/regexp_nfa.c src/testdir/test64.in src/testdir/test64.ok src/version.c |
diffstat | 4 files changed, 21 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/regexp_nfa.c +++ b/src/regexp_nfa.c @@ -1203,13 +1203,6 @@ collection: } mb_ptr_adv(regparse); - if (extra == ADD_NL) /* \_[] also matches \n */ - { - EMIT(reg_string ? NL : NFA_NEWL); - TRY_NEG(); - EMIT_GLUE(); - } - /* skip the trailing ] */ regparse = endp; mb_ptr_adv(regparse); @@ -1219,6 +1212,14 @@ collection: EMIT(NFA_END_NEG_RANGE); EMIT(NFA_CONCAT); } + + /* \_[] also matches \n but it's not negated */ + if (extra == ADD_NL) + { + EMIT(reg_string ? NL : NFA_NEWL); + EMIT(NFA_OR); + } + return OK; } /* if exists closing ] */
--- a/src/testdir/test64.in +++ b/src/testdir/test64.in @@ -344,9 +344,13 @@ STARTTEST :call add(tl, [0, '\(<<\)\@1<=span.', 'xxspanxxxx<spanxx<<spanyyy']) :call add(tl, [0, '\(<<\)\@2<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<']) :" +:"""" "\_" prepended negated collection matches EOL +:call add(tl, [2, '\_[^8-9]\+', "asfi\n9888", "asfi\n"]) +:call add(tl, [2, '\_[^a]\+', "asfi\n9888", "sfi\n9888"]) +:" +:" :"""" Run the tests :" -:" :for t in tl : let re = t[0] : let pat = t[1]
--- a/src/testdir/test64.ok +++ b/src/testdir/test64.ok @@ -731,6 +731,12 @@ OK 0 - \(<<\)\@1<=span. OK 1 - \(<<\)\@1<=span. OK 0 - \(<<\)\@2<=span. OK 1 - \(<<\)\@2<=span. +OK 0 - \_[^8-9]\+ +OK 1 - \_[^8-9]\+ +OK 2 - \_[^8-9]\+ +OK 0 - \_[^a]\+ +OK 1 - \_[^a]\+ +OK 2 - \_[^a]\+ 192.168.0.1 192.168.0.1 192.168.0.1