Loading ...
Sorry, an error occurred while loading the content.

Patch 7.3.1025

Expand Messages
  • Bram Moolenaar
    Patch 7.3.1025 Problem: New regexp: not matching newline in string. (Marc Weber) Solution: Check for n character. Files: src/regexp_nfa.c,
    Message 1 of 1 , May 26 8:46 AM
    • 0 Attachment
      Patch 7.3.1025
      Problem: New regexp: not matching newline in string. (Marc Weber)
      Solution: Check for "\n" character.
      Files: src/regexp_nfa.c, src/testdir/test64.in, src/testdir/test64.ok


      *** ../vim-7.3.1024/src/regexp_nfa.c 2013-05-26 16:57:23.000000000 +0200
      --- src/regexp_nfa.c 2013-05-26 17:38:27.000000000 +0200
      ***************
      *** 165,173 ****
      static int *post_end;
      static int *post_ptr;

      ! static int nstate; /* Number of states in the NFA. */
      static int istate; /* Index in the state vector, used in new_state() */
      - static int nstate_max; /* Upper bound of estimated number of states. */


      static int nfa_regcomp_start __ARGS((char_u*expr, int re_flags));
      --- 165,173 ----
      static int *post_end;
      static int *post_ptr;

      ! static int nstate; /* Number of states in the NFA. Also used when
      ! * executing. */
      static int istate; /* Index in the state vector, used in new_state() */


      static int nfa_regcomp_start __ARGS((char_u*expr, int re_flags));
      ***************
      *** 219,228 ****
      int re_flags; /* see vim_regcomp() */
      {
      size_t postfix_size;

      nstate = 0;
      istate = 0;
      ! /* A reasonable estimation for size */
      nstate_max = (int)(STRLEN(expr) + 1) * NFA_POSTFIX_MULTIPLIER;

      /* Some items blow up in size, such as [A-z]. Add more space for that.
      --- 219,229 ----
      int re_flags; /* see vim_regcomp() */
      {
      size_t postfix_size;
      + int nstate_max;

      nstate = 0;
      istate = 0;
      ! /* A reasonable estimation for maximum size */
      nstate_max = (int)(STRLEN(expr) + 1) * NFA_POSTFIX_MULTIPLIER;

      /* Some items blow up in size, such as [A-z]. Add more space for that.
      ***************
      *** 1968,1977 ****
      * Frag_T.out is a list of places that need to be set to the
      * next state for this fragment.
      */
      typedef union Ptrlist Ptrlist;
      struct Frag
      {
      ! nfa_state_T *start;
      Ptrlist *out;
      };
      typedef struct Frag Frag_T;
      --- 1969,1988 ----
      * Frag_T.out is a list of places that need to be set to the
      * next state for this fragment.
      */
      +
      + /* Since the out pointers in the list are always
      + * uninitialized, we use the pointers themselves
      + * as storage for the Ptrlists. */
      typedef union Ptrlist Ptrlist;
      + union Ptrlist
      + {
      + Ptrlist *next;
      + nfa_state_T *s;
      + };
      +
      struct Frag
      {
      ! nfa_state_T *start;
      Ptrlist *out;
      };
      typedef struct Frag Frag_T;
      ***************
      *** 1999,2015 ****
      }

      /*
      - * Since the out pointers in the list are always
      - * uninitialized, we use the pointers themselves
      - * as storage for the Ptrlists.
      - */
      - union Ptrlist
      - {
      - Ptrlist *next;
      - nfa_state_T *s;
      - };
      -
      - /*
      * Create singleton list containing just outp.
      */
      static Ptrlist *
      --- 2010,2015 ----
      ***************
      *** 3358,3365 ****
      #endif

      case NFA_NEWL:
      ! if (!reg_line_lbr && REG_MULTI
      ! && curc == NUL && reglnum <= reg_maxline)
      {
      go_to_nextline = TRUE;
      /* Pass -1 for the offset, which means taking the position
      --- 3358,3365 ----
      #endif

      case NFA_NEWL:
      ! if (curc == NUL && !reg_line_lbr && REG_MULTI
      ! && reglnum <= reg_maxline)
      {
      go_to_nextline = TRUE;
      /* Pass -1 for the offset, which means taking the position
      ***************
      *** 3367,3372 ****
      --- 3367,3378 ----
      addstate(nextlist, t->state->out, &t->sub, -1,
      listid + 1, &match);
      }
      + else if (curc == '\n' && reg_line_lbr)
      + {
      + /* match \n as if it is an ordinary character */
      + addstate(nextlist, t->state->out, &t->sub, 1,
      + listid + 1, &match);
      + }
      break;

      case NFA_CLASS_ALNUM:
      ***************
      *** 3832,3838 ****
      --- 3838,3849 ----
      * (and count its size). */
      postfix = re2post();
      if (postfix == NULL)
      + {
      + /* TODO: only give this error for debugging? */
      + if (post_ptr >= post_end)
      + EMSGN("Internal error: estimated max number of states insufficient: %ld", post_end - post_start);
      goto fail; /* Cascaded (syntax?) error */
      + }

      /*
      * In order to build the NFA, we parse the input regexp twice:
      *** ../vim-7.3.1024/src/testdir/test64.in 2013-05-26 16:57:23.000000000 +0200
      --- src/testdir/test64.in 2013-05-26 17:37:51.000000000 +0200
      ***************
      *** 250,255 ****
      --- 250,258 ----
      :call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
      :call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
      :call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
      + :call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"])
      + :call add(tl, [2, '\_f', " \na ", "\n"])
      + :call add(tl, [2, '\_f\+', " \na ", "\na"])
      :"
      :"
      :"""" Test recognition of some character classes
      *** ../vim-7.3.1024/src/testdir/test64.ok 2013-05-26 16:57:23.000000000 +0200
      --- src/testdir/test64.ok 2013-05-26 17:38:51.000000000 +0200
      ***************
      *** 576,581 ****
      --- 576,590 ----
      OK 0 - [0-9\n]\+
      OK 1 - [0-9\n]\+
      OK 2 - [0-9\n]\+
      + OK 0 - \_[0-9]\+
      + OK 1 - \_[0-9]\+
      + OK 2 - \_[0-9]\+
      + OK 0 - \_f
      + OK 1 - \_f
      + OK 2 - \_f
      + OK 0 - \_f\+
      + OK 1 - \_f\+
      + OK 2 - \_f\+
      OK 0 - [0-9]
      OK 1 - [0-9]
      OK 2 - [0-9]
      *** ../vim-7.3.1024/src/version.c 2013-05-26 16:57:23.000000000 +0200
      --- src/version.c 2013-05-26 17:44:16.000000000 +0200
      ***************
      *** 730,731 ****
      --- 730,733 ----
      { /* Add new patch number below this line */
      + /**/
      + 1025,
      /**/

      --
      Every engineer dreams about saving the universe and having sex with aliens.
      This is much more glamorous than the real life of an engineer, which consists
      of hiding from the universe and having sex without the participation of other
      life forms. (Scott Adams - The Dilbert principle)

      /// Bram Moolenaar -- Bram@... -- 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 vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    Your message has been successfully submitted and would be delivered to recipients shortly.