]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1092 v7.3.1092
authorBram Moolenaar <Bram@vim.org>
Sun, 2 Jun 2013 13:55:55 +0000 (15:55 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 2 Jun 2013 13:55:55 +0000 (15:55 +0200)
Problem:    Can't build with regexp debugging.  NFA debug output shows wrong
            pattern.
Solution:   Fix debugging code for recent changes.  Add the pattern to the
            program.

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

index f44578d8f1e536bc016811c1935fdbc2d59ba034..9809b3c0f4774a9f13dec774a82cd1cdafe33893 100644 (file)
@@ -86,12 +86,14 @@ typedef struct
     regengine_T                *engine;
     unsigned           regflags;
 
-    regprog_T          regprog;
-    nfa_state_T                *start;
+    nfa_state_T                *start;         /* points into state[] */
     int                        has_zend;       /* pattern contains \ze */
     int                        has_backref;    /* pattern contains \1 .. \9 */
 #ifdef FEAT_SYN_HL
     int                        reghasz;
+#endif
+#ifdef DEBUG
+    char_u             *pattern;
 #endif
     int                        nsubexp;        /* number of () */
     int                        nstate;
index f8f207cec3cbfc7fc8233aad6b8e95af4502c71a..11aca9c13fbdfe2ae1b37b152bc41e1d981cd0bd 100644 (file)
@@ -3133,12 +3133,12 @@ skip_add:
            {
                int col;
 
-               if (thread->sub.in_use <= 0)
+               if (thread->subs.norm.in_use <= 0)
                    col = -1;
                else if (REG_MULTI)
-                   col = thread->sub.list.multi[0].start.col;
+                   col = thread->subs.norm.list.multi[0].start.col;
                else
-                   col = (int)(thread->sub.list.line[0].start - regline);
+                   col = (int)(thread->subs.norm.list.line[0].start - regline);
                nfa_set_code(state->c);
                fprintf(log_fd, "> Adding state %d to list %d. char %d: %s (start col %d)\n",
                        abs(state->id), l->id, state->c, code, col);
@@ -3152,12 +3152,12 @@ skip_add:
     {
        int col;
 
-       if (sub->in_use <= 0)
+       if (subs->norm.in_use <= 0)
            col = -1;
        else if (REG_MULTI)
-           col = sub->list.multi[0].start.col;
+           col = subs->norm.list.multi[0].start.col;
        else
-           col = (int)(sub->list.line[0].start - regline);
+           col = (int)(subs->norm.list.line[0].start - regline);
        nfa_set_code(state->c);
        fprintf(log_fd, "> Processing state %d for list %d. char %d: %s (start col %d)\n",
                abs(state->id), l->id, state->c, code, col);
@@ -3836,12 +3836,12 @@ nfa_regmatch(start, submatch, m, endp)
            {
                int col;
 
-               if (t->sub.in_use <= 0)
+               if (t->subs.norm.in_use <= 0)
                    col = -1;
                else if (REG_MULTI)
-                   col = t->sub.list.multi[0].start.col;
+                   col = t->subs.norm.list.multi[0].start.col;
                else
-                   col = (int)(t->sub.list.line[0].start - regline);
+                   col = (int)(t->subs.norm.list.line[0].start - regline);
                nfa_set_code(t->state->c);
                fprintf(log_fd, "(%d) char %d %s (start col %d) ... \n",
                        abs(t->state->id), (int)t->state->c, code, col);
@@ -4818,6 +4818,9 @@ nfa_regexec_both(line, col)
     nfa_has_zend = prog->has_zend;
     nfa_has_backref = prog->has_backref;
     nfa_nsubexpr = prog->nsubexp;
+#ifdef DEBUG
+    nfa_regengine.expr = prog->pattern;
+#endif
 
     nstate = prog->nstate;
     for (i = 0; i < nstate; ++i)
@@ -4828,6 +4831,10 @@ nfa_regexec_both(line, col)
 
     retval = nfa_regtry(prog, col);
 
+#ifdef DEBUG
+    nfa_regengine.expr = NULL;
+#endif
+
 theend:
     return retval;
 }
@@ -4921,6 +4928,10 @@ nfa_regcomp(expr, re_flags)
     /* Remember whether this pattern has any \z specials in it. */
     prog->reghasz = re_has_z;
 #endif
+#ifdef DEBUG
+    prog->pattern = vim_strsave(expr); /* memory will leak */
+    nfa_regengine.expr = NULL;
+#endif
 
 out:
     vim_free(post_start);
index 3824278ddc4d3bcdf273f8f76ec0a2162dc2f0f6..0e2c7282c9dc7fbbcd602161e3a33a8c717c2e2f 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1092,
 /**/
     1091,
 /**/