Patch 7.3.1032
Problem:    "\ze" is not supported by the new regexp engine.
Solution:   Make "\ze" work.
Files:      src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok


*** ../vim-7.3.1031/src/regexp_nfa.c    2013-05-27 11:21:59.000000000 +0200
--- src/regexp_nfa.c    2013-05-27 20:06:16.000000000 +0200
***************
*** 159,165 ****
  static int syntax_error = FALSE;
  
  /* NFA regexp \ze operator encountered. */
! static int nfa_has_zend = FALSE;
  
  /* Number of sub expressions actually being used during execution. 1 if only
   * the whole match (subexpr 0) is used. */
--- 159,165 ----
  static int syntax_error = FALSE;
  
  /* NFA regexp \ze operator encountered. */
! static int nfa_has_zend;
  
  /* Number of sub expressions actually being used during execution. 1 if only
   * the whole match (subexpr 0) is used. */
***************
*** 791,799 ****
                case 'e':
                    EMIT(NFA_ZEND);
                    nfa_has_zend = TRUE;
!                   /* TODO: Currently \ze does not work properly. */
!                   return FAIL;
!                   /* break; */
                case '1':
                case '2':
                case '3':
--- 791,797 ----
                case 'e':
                    EMIT(NFA_ZEND);
                    nfa_has_zend = TRUE;
!                   break;
                case '1':
                case '2':
                case '3':
***************
*** 2711,2716 ****
--- 2709,2716 ----
        case NFA_MCLOSE + 0:
            if (nfa_has_zend)
            {
+               /* Do not overwrite the position set by \ze. If no \ze
+                * encountered end will be set in nfa_regtry(). */
                addstate(l, state->out, m, off, lid);
                break;
            }
***************
*** 3635,3640 ****
--- 3635,3641 ----
  
            case NFA_SKIP_CHAR:
            case NFA_ZSTART:
+           case NFA_ZEND:
                /* TODO: should not happen? */
                break;
  
***************
*** 3795,3800 ****
--- 3796,3802 ----
        }
        if (reg_endpos[0].lnum < 0)
        {
+           /* pattern has a \ze but it didn't match, use current end */
            reg_endpos[0].lnum = reglnum;
            reg_endpos[0].col = (int)(reginput - regline);
        }
*** ../vim-7.3.1031/src/testdir/test64.in       2013-05-26 18:40:11.000000000 
+0200
--- src/testdir/test64.in       2013-05-27 20:02:44.000000000 +0200
***************
*** 151,158 ****
  :" Search multi-modifiers
  :call add(tl, [2, 'x*', 'xcd', 'x'])
  :call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx'])
! :call add(tl, [2, 'x*', 'abcdoij', ''])                    " empty match is 
good
! :call add(tl, [2, 'x\+', 'abcdoin'])                       " no match here
  :call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx'])
  :call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx'])
  :call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x'])
--- 151,160 ----
  :" Search multi-modifiers
  :call add(tl, [2, 'x*', 'xcd', 'x'])
  :call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx'])
! :" empty match is good
! :call add(tl, [2, 'x*', 'abcdoij', ''])
! :" no match here
! :call add(tl, [2, 'x\+', 'abcdoin'])
  :call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx'])
  :call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx'])
  :call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x'])
***************
*** 160,171 ****
  :call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good
  :call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x'])
  :call add(tl, [2, 'x\?', 'x sdfoij', 'x'])
! :call add(tl, [2, 'x\?', 'abc sfoij', ''])                 " empty match is 
good
  :call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x'])
  :"
  :call add(tl, [2, 'a\{0,0}', 'abcdfdoij', ''])
! :call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a'])      " same thing as 
'a?'
! :call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a'])      " same thing as 
'a\{0,1}'
  :call add(tl, [2, 'a\{3,6}', 'aa siofuh'])
  :call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa'])
  :call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa'])
--- 162,176 ----
  :call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good
  :call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x'])
  :call add(tl, [2, 'x\?', 'x sdfoij', 'x'])
! :" empty match is good
! :call add(tl, [2, 'x\?', 'abc sfoij', ''])
  :call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x'])
  :"
  :call add(tl, [2, 'a\{0,0}', 'abcdfdoij', ''])
! :" same thing as 'a?'
! :call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a'])
! :" same thing as 'a\{0,1}'
! :call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a'])
  :call add(tl, [2, 'a\{3,6}', 'aa siofuh'])
  :call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa'])
  :call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa'])
***************
*** 173,190 ****
  :call add(tl, [2, 'a\{2}', 'aaaa', 'aa'])
  :call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj 
nasfvius afg aaaa sfiuhuhiushf', 'aa'])
  :call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
! :call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', ''])          " same thing as 
'a*'
  :call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa'])
  :call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg'])
  :call add(tl, [0, 'a\{2,}', 'aaaaasfoij ', 'aaaaa'])
  :call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', ''])
  :call add(tl, [2, 'a\{,5}', 'abcd', 'a'])
  :call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa'])
! :call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', ''])                 " same thing 
as 'a*'
  :call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa'])
  :"
  :call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', ''])
! :call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', ''])      " anti-greedy 
version of 'a?'
  :call add(tl, [2, 'a\{-3,6}', 'aa siofuh'])
  :call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa'])
  :call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa'])
--- 178,198 ----
  :call add(tl, [2, 'a\{2}', 'aaaa', 'aa'])
  :call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj 
nasfvius afg aaaa sfiuhuhiushf', 'aa'])
  :call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
! :" same thing as 'a*'
! :call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', ''])
  :call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa'])
  :call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg'])
  :call add(tl, [0, 'a\{2,}', 'aaaaasfoij ', 'aaaaa'])
  :call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', ''])
  :call add(tl, [2, 'a\{,5}', 'abcd', 'a'])
  :call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa'])
! :" same thing as 'a*'
! :call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', ''])
  :call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa'])
  :"
  :call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', ''])
! :" anti-greedy version of 'a?'
! :call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', ''])
  :call add(tl, [2, 'a\{-3,6}', 'aa siofuh'])
  :call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa'])
  :call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa'])
***************
*** 198,204 ****
  :call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', ''])
  :call add(tl, [2, 'a\{-,5}', 'abcd', ''])
  :call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', ''])
! :call add(tl, [0, 'a\{-}', 'bbbcddiuhfcd', ''])            " anti-greedy 
version of 'a*'
  :call add(tl, [0, 'a\{-}', 'aaaaioudfh coisf jda', ''])
  :"
  :" Test groups of characters and submatches
--- 206,213 ----
  :call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', ''])
  :call add(tl, [2, 'a\{-,5}', 'abcd', ''])
  :call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', ''])
! :" anti-greedy version of 'a*'
! :call add(tl, [0, 'a\{-}', 'bbbcddiuhfcd', ''])
  :call add(tl, [0, 'a\{-}', 'aaaaioudfh coisf jda', ''])
  :"
  :" Test groups of characters and submatches
***************
*** 243,252 ****
  :call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787'])
  :call add(tl, [2, '[-a]', '-', '-'])
  :call add(tl, [2, '[a-]', '-', '-'])
! :call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file'])          
" filename regexp
! :call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^'])              
        " special chars
! :call add(tl, [2, '[[.a.]]\+', 'aa', 'aa'])                                   
                        " collation elem
! :call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii'])                              
                        " middle of regexp
  :call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
  :call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
  :call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
--- 252,265 ----
  :call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787'])
  :call add(tl, [2, '[-a]', '-', '-'])
  :call add(tl, [2, '[a-]', '-', '-'])
! :" filename regexp
! :call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file'])
! :" special chars
! :call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^'])
! :" collation elem
! :call add(tl, [2, '[[.a.]]\+', 'aa', 'aa'])
! :" middle of regexp
! :call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii'])
  :call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
  :call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
  :call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
***************
*** 267,277 ****
  :call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
  :"
  :"""" Tests for \z features
! :call add(tl, [2, 'xx \ze test', 'xx '])                                      
" must match after \ze
! :call add(tl, [0, 'abc\zeend', 'oij abcend', 'abc'])
  :call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd'])
! :call add(tl, [2, 'aa \zsax', ' ax'])                                         
" must match before \zs
! :call add(tl, [0, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 
'match'])
  :call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a 
if last'])
  :call add(tl, [2, '\>\zs.', 'aword. ', '.'])
  :"
--- 280,296 ----
  :call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
  :"
  :"""" Tests for \z features
! :" match ends at \ze
! :call add(tl, [2, 'xx \ze test', 'xx '])
! :call add(tl, [2, 'abc\zeend', 'oij abcend', 'abc'])
! :call add(tl, [2, 'aa\zebb\|aaxx', ' aabb ', 'aa'])
! :call add(tl, [2, 'aa\zebb\|aaxx', ' aaxx ', 'aaxx'])
! :call add(tl, [2, 'aabb\|aa\zebb', ' aabb ', 'aabb'])
! :call add(tl, [2, 'aa\zebb\|aaebb', ' aabb ', 'aa'])
! :" match starts at \zs
  :call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd'])
! :call add(tl, [2, 'aa \zsax', ' ax'])
! :call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 
'match'])
  :call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a 
if last'])
  :call add(tl, [2, '\>\zs.', 'aword. ', '.'])
  :"
***************
*** 279,290 ****
  :call add(tl, [0, 'abc\@=', 'abc', 'ab'])
  :call add(tl, [0, 'abc\@=cd', 'abcd', 'abcd'])
  :call add(tl, [0, 'abc\@=', 'ababc', 'ab'])
! :call add(tl, [2, 'abcd\@=e', 'abcd'])                     " will never 
match, no matter the input text
! :call add(tl, [2, 'abcd\@=e', 'any text in here ... '])    " will never match
  :call add(tl, [0, '\v(abc)@=..', 'xabcd', 'ab', 'abc'])
! :call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B'])       
" no match
  :call add(tl, [0, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 
'John is Bobs friend'])
! :call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B'])    " no 
match
  :call add(tl, [0, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob'])
  :call add(tl, [0, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, 
yep', 'test1'])
  :"
--- 298,313 ----
  :call add(tl, [0, 'abc\@=', 'abc', 'ab'])
  :call add(tl, [0, 'abc\@=cd', 'abcd', 'abcd'])
  :call add(tl, [0, 'abc\@=', 'ababc', 'ab'])
! :" will never match, no matter the input text
! :call add(tl, [2, 'abcd\@=e', 'abcd'])
! :" will never match
! :call add(tl, [2, 'abcd\@=e', 'any text in here ... '])
  :call add(tl, [0, '\v(abc)@=..', 'xabcd', 'ab', 'abc'])
! :" no match
! :call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B'])
  :call add(tl, [0, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 
'John is Bobs friend'])
! :" no match
! :call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B'])
  :call add(tl, [0, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob'])
  :call add(tl, [0, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, 
yep', 'test1'])
  :"
*** ../vim-7.3.1031/src/testdir/test64.ok       2013-05-26 18:40:11.000000000 
+0200
--- src/testdir/test64.ok       2013-05-27 20:04:55.000000000 +0200
***************
*** 617,622 ****
--- 617,635 ----
  OK 2 - xx \ze test
  OK 0 - abc\zeend
  OK 1 - abc\zeend
+ OK 2 - abc\zeend
+ OK 0 - aa\zebb\|aaxx
+ OK 1 - aa\zebb\|aaxx
+ OK 2 - aa\zebb\|aaxx
+ OK 0 - aa\zebb\|aaxx
+ OK 1 - aa\zebb\|aaxx
+ OK 2 - aa\zebb\|aaxx
+ OK 0 - aabb\|aa\zebb
+ OK 1 - aabb\|aa\zebb
+ OK 2 - aabb\|aa\zebb
+ OK 0 - aa\zebb\|aaebb
+ OK 1 - aa\zebb\|aaebb
+ OK 2 - aa\zebb\|aaebb
  OK 0 - abc\zsdd
  OK 1 - abc\zsdd
  OK 2 - abc\zsdd
***************
*** 625,630 ****
--- 638,644 ----
  OK 2 - aa \zsax
  OK 0 - abc \zsmatch\ze abc
  OK 1 - abc \zsmatch\ze abc
+ OK 2 - abc \zsmatch\ze abc
  OK 0 - \v(a \zsif .*){2}
  OK 1 - \v(a \zsif .*){2}
  OK 2 - \v(a \zsif .*){2}
*** ../vim-7.3.1031/src/version.c       2013-05-27 11:21:59.000000000 +0200
--- src/version.c       2013-05-27 20:04:19.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1032,
  /**/

-- 
An operatingsystem is just a name you give to the rest of bloating
idiosyncratic machine-based-features you left out of your editor.
                        (author unknown)

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui