Patch 7.4a.039
Problem:    New regexp engine doesn't match pattern. (Ingo Karkat)
Solution:   When adding a state also check for different PIM if the list of
            states has any state with a PIM.
Files:      src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok


*** ../vim-7.4a.038/src/regexp_nfa.c    2013-07-21 17:05:54.000000000 +0200
--- src/regexp_nfa.c    2013-07-21 18:54:02.000000000 +0200
***************
*** 3464,3469 ****
--- 3464,3470 ----
      int                   n;          /* nr of states currently in "t" */
      int                   len;        /* max nr of states in "t" */
      int                   id;         /* ID of the list */
+     int                   has_pim;    /* TRUE when any state has a PIM */
  } nfa_list_T;
  
  #ifdef ENABLE_LOG
***************
*** 3966,3972 ****
                /* This state is already in the list, don't add it again,
                 * unless it is an MOPEN that is used for a backreference or
                 * when there is a PIM. */
!               if (!nfa_has_backref && pim == NULL)
                {
  skip_add:
  #ifdef ENABLE_LOG
--- 3967,3973 ----
                /* This state is already in the list, don't add it again,
                 * unless it is an MOPEN that is used for a backreference or
                 * when there is a PIM. */
!               if (!nfa_has_backref && pim == NULL && !l->has_pim)
                {
  skip_add:
  #ifdef ENABLE_LOG
***************
*** 4012,4018 ****
--- 4013,4022 ----
            if (pim == NULL)
                thread->pim.result = NFA_PIM_UNUSED;
            else
+           {
                copy_pim(&thread->pim, pim);
+               l->has_pim = TRUE;
+           }
            copy_sub(&thread->subs.norm, &subs->norm);
  #ifdef FEAT_SYN_HL
            if (nfa_has_zsubexpr)
***************
*** 5060,5067 ****
--- 5064,5073 ----
  
      thislist = &list[0];
      thislist->n = 0;
+     thislist->has_pim = FALSE;
      nextlist = &list[1];
      nextlist->n = 0;
+     nextlist->has_pim = FALSE;
  #ifdef ENABLE_LOG
      fprintf(log_fd, "(---) STARTSTATE first\n");
  #endif
***************
*** 5120,5125 ****
--- 5126,5132 ----
        thislist = &list[flag];
        nextlist = &list[flag ^= 1];
        nextlist->n = 0;            /* clear nextlist */
+       nextlist->has_pim = FALSE;
        ++nfa_listid;
        thislist->id = nfa_listid;
        nextlist->id = nfa_listid + 1;
*** ../vim-7.4a.038/src/testdir/test64.in       2013-07-21 17:05:54.000000000 
+0200
--- src/testdir/test64.in       2013-07-21 18:53:22.000000000 +0200
***************
*** 341,346 ****
--- 341,347 ----
  :call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
  :call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 
'mappings:'])
  :call add(tl, [2, 'm\k\+_\@=\%(_\@!\k\)\@<=\k\+e', 'mx__xe', 'mx__xe'])
+ :call add(tl, [2, '\%(\U\@<=S\k*\|S\l\)R', 'SuR', 'SuR'])
  :"
  :"""" Combining different tests and features
  :call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
*** ../vim-7.4a.038/src/testdir/test64.ok       2013-07-21 17:05:54.000000000 
+0200
--- src/testdir/test64.ok       2013-07-21 18:55:44.000000000 +0200
***************
*** 779,784 ****
--- 779,787 ----
  OK 0 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
  OK 1 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
  OK 2 - m\k\+_\@=\%(_\@!\k\)\@<=\k\+e
+ OK 0 - \%(\U\@<=S\k*\|S\l\)R
+ OK 1 - \%(\U\@<=S\k*\|S\l\)R
+ OK 2 - \%(\U\@<=S\k*\|S\l\)R
  OK 0 - [[:alpha:]]\{-2,6}
  OK 1 - [[:alpha:]]\{-2,6}
  OK 2 - [[:alpha:]]\{-2,6}
*** ../vim-7.4a.038/src/version.c       2013-07-21 17:53:54.000000000 +0200
--- src/version.c       2013-07-21 18:56:02.000000000 +0200
***************
*** 729,730 ****
--- 729,732 ----
  {   /* Add new patch number below this line */
+ /**/
+     39,
  /**/

-- 
Everybody wants to go to heaven, but nobody wants to die.

 /// 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