Patch 7.3.1119
Problem:    Flags in 'cpo' are search for several times.
Solution:   Store the result and re-use the flags.
Files:      src/regexp.c, src/regexp_nfa.c


*** ../vim-7.3.1118/src/regexp.c        2013-06-04 21:27:33.000000000 +0200
--- src/regexp.c        2013-06-05 12:37:30.000000000 +0200
***************
*** 365,370 ****
--- 365,371 ----
  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,1178 ****
--- 1174,1189 ----
      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,1197 ****
  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 == '-')
--- 1194,1203 ----
***************
*** 1210,1218 ****
                    mb_ptr_adv(p);
            }
        else if (*p == '\\'
!               && !cpo_bsl
                && (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
!                   || (!cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
            p += 2;
        else if (*p == '[')
        {
--- 1216,1224 ----
                    mb_ptr_adv(p);
            }
        else if (*p == '\\'
!               && !reg_cpo_bsl
                && (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
!                   || (!reg_cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
            p += 2;
        else if (*p == '[')
        {
***************
*** 1251,1256 ****
--- 1257,1263 ----
        mymagic = MAGIC_ON;
      else
        mymagic = MAGIC_OFF;
+     get_cpo_flags();
  
      for (; p[0] != NUL; mb_ptr_adv(p))
      {
***************
*** 1462,1467 ****
--- 1469,1475 ----
        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,1923 ****
  {
      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)
--- 1917,1927 ----
***************
*** 2207,2213 ****
                              while ((c = getchr()) != ']')
                              {
                                  if (c == NUL)
!                                     EMSG2_RET_NULL(_("E69: Missing ] after 
%s%%["),
                                                      reg_magic == MAGIC_ALL);
                                  br = regnode(BRANCH);
                                  if (ret == NULL)
--- 2211,2217 ----
                              while ((c = getchr()) != ']')
                              {
                                  if (c == NUL)
!                                     EMSG2_RET_NULL(_(e_missing_sb),
                                                      reg_magic == MAGIC_ALL);
                                  br = regnode(BRANCH);
                                  if (ret == NULL)
***************
*** 2410,2416 ****
                            }
  
                            /* Handle \o40, \x20 and \u20AC style sequences */
!                           if (endc == '\\' && !cpo_lit && !cpo_bsl)
                                endc = coll_get_char();
  
                            if (startc > endc)
--- 2414,2420 ----
                            }
  
                            /* Handle \o40, \x20 and \u20AC style sequences */
!                           if (endc == '\\' && !reg_cpo_lit && !reg_cpo_bsl)
                                endc = coll_get_char();
  
                            if (startc > endc)
***************
*** 2452,2460 ****
                     * Posix doesn't recognize backslash at all.
                     */
                    else if (*regparse == '\\'
!                           && !cpo_bsl
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
!                               || (!cpo_lit
                                    && vim_strchr(REGEXP_ABBR,
                                                       regparse[1]) != NULL)))
                    {
--- 2456,2464 ----
                     * Posix doesn't recognize backslash at all.
                     */
                    else if (*regparse == '\\'
!                           && !reg_cpo_bsl
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
!                               || (!reg_cpo_lit
                                    && vim_strchr(REGEXP_ABBR,
                                                       regparse[1]) != NULL)))
                    {
*** ../vim-7.3.1118/src/regexp_nfa.c    2013-06-05 11:46:22.000000000 +0200
--- src/regexp_nfa.c    2013-06-05 12:38:03.000000000 +0200
***************
*** 686,698 ****
      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)
      {
--- 686,693 ----
***************
*** 1224,1233 ****
                     * Posix doesn't recognize backslash at all.
                     */
                    if (*regparse == '\\'
!                           && !cpo_bsl
                            && regparse + 1 <= endp
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
!                               || (!cpo_lit
                                    && vim_strchr(REGEXP_ABBR, regparse[1])
                                                                      != NULL)
                            )
--- 1219,1228 ----
                     * Posix doesn't recognize backslash at all.
                     */
                    if (*regparse == '\\'
!                           && !reg_cpo_bsl
                            && regparse + 1 <= endp
                            && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
!                               || (!reg_cpo_lit
                                    && vim_strchr(REGEXP_ABBR, regparse[1])
                                                                      != NULL)
                            )
*** ../vim-7.3.1118/src/version.c       2013-06-05 11:46:22.000000000 +0200
--- src/version.c       2013-06-05 12:40:57.000000000 +0200
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     1119,
  /**/

-- 
>From "know your smileys":
 :-O>-o   Smiley American tourist (note big mouth and camera)

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