]> granicus.if.org Git - vim/commitdiff
updated for version 7.1-315 v7.1.315
authorBram Moolenaar <Bram@vim.org>
Sun, 15 Jun 2008 12:21:50 +0000 (12:21 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 15 Jun 2008 12:21:50 +0000 (12:21 +0000)
src/regexp.c
src/version.c

index 97181b862086397ad65a919d49c26e15e283028f..6347eeda998434d61f5e04cc13fa7a398eb6efd4 100644 (file)
@@ -3044,6 +3044,7 @@ typedef struct regbehind_S
 {
     regsave_T  save_after;
     regsave_T  save_behind;
+    int                save_need_clear_subexpr;
     save_se_T   save_start[NSUBEXP];
     save_se_T   save_end[NSUBEXP];
 } regbehind_T;
@@ -5858,17 +5859,23 @@ save_subexpr(bp)
 {
     int i;
 
-    for (i = 0; i < NSUBEXP; ++i)
+    /* When "need_clear_subexpr" is set we don't need to save the values, only
+     * remember that this flag needs to be set again when restoring. */
+    bp->save_need_clear_subexpr = need_clear_subexpr;
+    if (!need_clear_subexpr)
     {
-       if (REG_MULTI)
-       {
-           bp->save_start[i].se_u.pos = reg_startpos[i];
-           bp->save_end[i].se_u.pos = reg_endpos[i];
-       }
-       else
+       for (i = 0; i < NSUBEXP; ++i)
        {
-           bp->save_start[i].se_u.ptr = reg_startp[i];
-           bp->save_end[i].se_u.ptr = reg_endp[i];
+           if (REG_MULTI)
+           {
+               bp->save_start[i].se_u.pos = reg_startpos[i];
+               bp->save_end[i].se_u.pos = reg_endpos[i];
+           }
+           else
+           {
+               bp->save_start[i].se_u.ptr = reg_startp[i];
+               bp->save_end[i].se_u.ptr = reg_endp[i];
+           }
        }
     }
 }
@@ -5882,17 +5889,22 @@ restore_subexpr(bp)
 {
     int i;
 
-    for (i = 0; i < NSUBEXP; ++i)
+    /* Only need to restore saved values when they are not to be cleared. */
+    need_clear_subexpr = bp->save_need_clear_subexpr;
+    if (!need_clear_subexpr)
     {
-       if (REG_MULTI)
-       {
-           reg_startpos[i] = bp->save_start[i].se_u.pos;
-           reg_endpos[i] = bp->save_end[i].se_u.pos;
-       }
-       else
+       for (i = 0; i < NSUBEXP; ++i)
        {
-           reg_startp[i] = bp->save_start[i].se_u.ptr;
-           reg_endp[i] = bp->save_end[i].se_u.ptr;
+           if (REG_MULTI)
+           {
+               reg_startpos[i] = bp->save_start[i].se_u.pos;
+               reg_endpos[i] = bp->save_end[i].se_u.pos;
+           }
+           else
+           {
+               reg_startp[i] = bp->save_start[i].se_u.ptr;
+               reg_endp[i] = bp->save_end[i].se_u.ptr;
+           }
        }
     }
 }
index 61a8944f8c548678dcd692070ec2c333c78fd027..aa283c4fc09f065f57d28fa9e3ffee6f226fb87e 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    315,
 /**/
     314,
 /**/