]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1247 v7.3.1247
authorBram Moolenaar <Bram@vim.org>
Wed, 26 Jun 2013 16:16:58 +0000 (18:16 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 26 Jun 2013 16:16:58 +0000 (18:16 +0200)
Problem:    New regexp engine: '[ ]\@!\p\%([ ]\@!\p\)*:' does not always match.
Solution:   When there is a PIM add a duplicate state that starts at another
            position.

src/regexp_nfa.c
src/testdir/test64.in
src/testdir/test64.ok
src/version.c

index cba4001faa4a25a37a6f7e6d7efb01d778f5a0c3..8146d9d61edd4c1be45ea5ce89c99707d38c2c5b 100644 (file)
@@ -3642,14 +3642,14 @@ sub_equal(sub1, sub2)
            if (i < sub1->in_use)
                s1 = sub1->list.multi[i].start.lnum;
            else
-               s1 = 0;
+               s1 = -1;
            if (i < sub2->in_use)
                s2 = sub2->list.multi[i].start.lnum;
            else
-               s2 = 0;
+               s2 = -1;
            if (s1 != s2)
                return FALSE;
-           if (s1 != 0 && sub1->list.multi[i].start.col
+           if (s1 != -1 && sub1->list.multi[i].start.col
                                             != sub2->list.multi[i].start.col)
                return FALSE;
        }
@@ -3931,8 +3931,9 @@ addstate(l, state, subs, pim, off)
            if (state->lastlist[nfa_ll_index] == l->id)
            {
                /* This state is already in the list, don't add it again,
-                * unless it is an MOPEN that is used for a backreference. */
-               if (!nfa_has_backref)
+                * 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
@@ -3949,9 +3950,9 @@ skip_add:
                    goto skip_add;
            }
 
-           /* When there are backreferences the number of states may be (a
-            * lot) bigger than anticipated. */
-           if (nfa_has_backref && l->n == l->len)
+           /* When there are backreferences or PIMs the number of states may
+            * be (a lot) bigger than anticipated. */
+           if (l->n == l->len)
            {
                int newlen = l->len * 3 / 2 + 50;
 
index 4fdbcf73e39c256d8f6fecf212fbcc6249d8904a..a7b5794d733e3cf87737bfb94595b8f004c38ed4 100644 (file)
@@ -338,6 +338,7 @@ STARTTEST
 :call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' bar foo '])
 :call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo bar '])
 :call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
+:call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:'])
 :"
 :"""" Combining different tests and features
 :call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
index d1f41138534c970e2e9a6aac6bf76b41d5372adf..8aa5a6047d529e7eae6f927ce3dbe94792fb4cef 100644 (file)
@@ -770,6 +770,9 @@ OK 2 - ^\%(.*bar\)\@!.*\zsfoo
 OK 0 - ^\%(.*bar\)\@!.*\zsfoo
 OK 1 - ^\%(.*bar\)\@!.*\zsfoo
 OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 1 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 2 - [ ]\@!\p\%([ ]\@!\p\)*:
 OK 0 - [[:alpha:]]\{-2,6}
 OK 1 - [[:alpha:]]\{-2,6}
 OK 2 - [[:alpha:]]\{-2,6}
index fb70ebc939092beaee138f13ddcd14f269e71fb7..025b8563d7b55f388722ee58f174d62ec6626769 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1247,
 /**/
     1246,
 /**/