changeset 4748:4b9503f0c7d3 v7.3.1121

updated for version 7.3.1121 Problem: New regexp engine: adding states that are not used. Solution: Don't add the states.
author Bram Moolenaar <bram@vim.org>
date Wed, 05 Jun 2013 16:51:57 +0200
parents a3f2821ed3b8
children 31754f244d6e
files src/regexp_nfa.c src/version.c
diffstat 2 files changed, 6 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -3169,6 +3169,7 @@ addstate(l, state, subs, off)
 	case NFA_SPLIT:
 	case NFA_NOT:
 	case NFA_NOPEN:
+	case NFA_SKIP_CHAR:
 	case NFA_NCLOSE:
 	case NFA_MCLOSE:
 	case NFA_MCLOSE1:
@@ -3192,6 +3193,7 @@ addstate(l, state, subs, off)
 	case NFA_ZCLOSE8:
 	case NFA_ZCLOSE9:
 #endif
+	case NFA_ZEND:
 	    /* These nodes are not added themselves but their "out" and/or
 	     * "out1" may be added below.  */
 	    break;
@@ -3218,6 +3220,7 @@ addstate(l, state, subs, off)
 	case NFA_ZOPEN8:
 	case NFA_ZOPEN9:
 #endif
+	case NFA_ZSTART:
 	    /* These nodes do not need to be added, but we need to bail out
 	     * when it was tried to be added to this list before. */
 	    if (state->lastlist[nfa_ll_index] == l->id)
@@ -4362,10 +4365,6 @@ nfa_regmatch(prog, start, submatch, m)
 
 	    case NFA_START_INVISIBLE:
 	    case NFA_START_INVISIBLE_BEFORE:
-		/* If invisible match has a higher chance to fail, do it
-		 * right away.  Otherwise postpone it until what follows is
-		 * matching and causes addstate(nextlist, ..) to be called.
-		 * This is indicated by the "pim" field. */
 		{
 		    nfa_pim_T *pim;
 		    int cout = t->state->out1->out->c;
@@ -4863,12 +4862,11 @@ nfa_regmatch(prog, start, submatch, m)
 			log_subsexpr(&nextlist->t[nextlist->n - 1].subs);
 #endif
 		    }
-
 		}
 		break;
 	      }
 	    case NFA_SKIP:
-	      /* charater of previous matching \1 .. \9 */
+	      /* character of previous matching \1 .. \9  or \@> */
 	      if (t->count - clen <= 0)
 	      {
 		  /* end of match, go to what follows */
@@ -4892,12 +4890,6 @@ nfa_regmatch(prog, start, submatch, m)
 	      }
 	      break;
 
-	    case NFA_SKIP_CHAR:
-	    case NFA_ZSTART:
-	    case NFA_ZEND:
-		/* TODO: should not happen? */
-		break;
-
 	    case NFA_LNUM:
 	    case NFA_LNUM_GT:
 	    case NFA_LNUM_LT:
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1121,
+/**/
     1120,
 /**/
     1119,