updated for version 7.3.1092
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.
diff --git a/src/regexp.h b/src/regexp.h
index f44578d..9809b3c 100644
--- a/src/regexp.h
+++ b/src/regexp.h
@@ -86,13 +86,15 @@
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;
nfa_state_T state[0]; /* actually longer.. */
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index f8f207c..11aca9c 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -3133,12 +3133,12 @@
{
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 @@
{
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 @@
{
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_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 @@
retval = nfa_regtry(prog, col);
+#ifdef DEBUG
+ nfa_regengine.expr = NULL;
+#endif
+
theend:
return retval;
}
@@ -4921,6 +4928,10 @@
/* 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);
diff --git a/src/version.c b/src/version.c
index 3824278..0e2c728 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1092,
+/**/
1091,
/**/
1090,