]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1119 v7.3.1119
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2013 10:43:09 +0000 (12:43 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Jun 2013 10:43:09 +0000 (12:43 +0200)
Problem:    Flags in 'cpo' are search for several times.
Solution:   Store the result and re-use the flags.

src/regexp.c
src/regexp_nfa.c
src/version.c

index 3450f3aa90288c98ca3bc127ff63cff6ee2532a4..853d2557375bf99db90affdc06906054ebfbfd0e 100644 (file)
@@ -365,6 +365,7 @@ static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
 static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
 static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here");
 #endif
+static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
 
 #define NOT_MULTI      0
 #define MULTI_ONE      1
@@ -1173,6 +1174,16 @@ get_coll_element(pp)
     return 0;
 }
 
+static void get_cpo_flags __ARGS((void));
+static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */
+static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */
+
+    static void
+get_cpo_flags()
+{
+    reg_cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
+    reg_cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
+}
 
 /*
  * Skip over a "[]" range.
@@ -1183,15 +1194,10 @@ get_coll_element(pp)
 skip_anyof(p)
     char_u     *p;
 {
-    int                cpo_lit;        /* 'cpoptions' contains 'l' flag */
-    int                cpo_bsl;        /* 'cpoptions' contains '\' flag */
 #ifdef FEAT_MBYTE
     int                l;
 #endif
 
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
-
     if (*p == '^')     /* Complement of range. */
        ++p;
     if (*p == ']' || *p == '-')
@@ -1210,9 +1216,9 @@ skip_anyof(p)
                    mb_ptr_adv(p);
            }
        else if (*p == '\\'
-               && !cpo_bsl
+               && !reg_cpo_bsl
                && (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
-                   || (!cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
+                   || (!reg_cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
            p += 2;
        else if (*p == '[')
        {
@@ -1251,6 +1257,7 @@ skip_regexp(startp, dirc, magic, newp)
        mymagic = MAGIC_ON;
     else
        mymagic = MAGIC_OFF;
+    get_cpo_flags();
 
     for (; p[0] != NUL; mb_ptr_adv(p))
     {
@@ -1462,6 +1469,7 @@ regcomp_start(expr, re_flags)
        reg_magic = MAGIC_OFF;
     reg_string = (re_flags & RE_STRING);
     reg_strict = (re_flags & RE_STRICT);
+    get_cpo_flags();
 
     num_complex_braces = 0;
     regnpar = 1;
@@ -1909,15 +1917,11 @@ regatom(flagp)
 {
     char_u         *ret;
     int                    flags;
-    int                    cpo_lit;        /* 'cpoptions' contains 'l' flag */
-    int                    cpo_bsl;        /* 'cpoptions' contains '\' flag */
     int                    c;
     char_u         *p;
     int                    extra = 0;
 
     *flagp = WORST;            /* Tentatively. */
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
 
     c = getchr();
     switch (c)
@@ -2207,7 +2211,7 @@ regatom(flagp)
                              while ((c = getchr()) != ']')
                              {
                                  if (c == NUL)
-                                     EMSG2_RET_NULL(_("E69: Missing ] after %s%%["),
+                                     EMSG2_RET_NULL(_(e_missing_sb),
                                                      reg_magic == MAGIC_ALL);
                                  br = regnode(BRANCH);
                                  if (ret == NULL)
@@ -2410,7 +2414,7 @@ collection:
                            }
 
                            /* Handle \o40, \x20 and \u20AC style sequences */
-                           if (endc == '\\' && !cpo_lit && !cpo_bsl)
+                           if (endc == '\\' && !reg_cpo_lit && !reg_cpo_bsl)
                                endc = coll_get_char();
 
                            if (startc > endc)
@@ -2452,9 +2456,9 @@ collection:
                     * Posix doesn't recognize backslash at all.
                     */
                    else if (*regparse == '\\'
-                           && !cpo_bsl
+                           && !reg_cpo_bsl
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
-                               || (!cpo_lit
+                               || (!reg_cpo_lit
                                    && vim_strchr(REGEXP_ABBR,
                                                       regparse[1]) != NULL)))
                    {
index 475b62911bc1f0765298b103ff0fd0711ded6531..4dea47c77e7b0eb187d7375e7672ddcff72cc833 100644 (file)
@@ -686,13 +686,8 @@ nfa_regatom()
     int                startc = -1;
     int                endc = -1;
     int                oldstartc = -1;
-    int                cpo_lit;        /* 'cpoptions' contains 'l' flag */
-    int                cpo_bsl;        /* 'cpoptions' contains '\' flag */
     int                glue;           /* ID that will "glue" nodes together */
 
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
-
     c = getchr();
     switch (c)
     {
@@ -1224,10 +1219,10 @@ collection:
                     * Posix doesn't recognize backslash at all.
                     */
                    if (*regparse == '\\'
-                           && !cpo_bsl
+                           && !reg_cpo_bsl
                            && regparse + 1 <= endp
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
-                               || (!cpo_lit
+                               || (!reg_cpo_lit
                                    && vim_strchr(REGEXP_ABBR, regparse[1])
                                                                      != NULL)
                            )
index 98f1f4bd45d7f486a9c98bcb9740f02202f879d6..8bb135a332b585a75f1b2287b8816d66d8839d34 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1119,
 /**/
     1118,
 /**/