summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2013-05-25 12:28:11 +0200
committerBram Moolenaar <Bram@vim.org>2013-05-25 12:28:11 +0200
commit152e7890c17df2e34ae993863be8c6445183222b (patch)
tree63c973e2504ea647cbc213791940a986ad4fbe67
parentd6c11cb3e0df7a5f6d45572881dc7b28dd9b2b0d (diff)
downloadvim-git-152e7890c17df2e34ae993863be8c6445183222b.tar.gz
updated for version 7.3.1014v7.3.1014
Problem: New regexp state dump is hard to read. Solution: Make the state dump more pretty. (Taro Muraoka)
-rw-r--r--src/regexp_nfa.c70
-rw-r--r--src/version.c2
2 files changed, 60 insertions, 12 deletions
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 61d9abc8e..0a6dded82 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -183,7 +183,8 @@ static int nfa_reg __ARGS((int paren));
#ifdef DEBUG
static void nfa_set_code __ARGS((int c));
static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
-static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state, int ident));
+static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state));
+static void nfa_print_state2 __ARGS((FILE *debugf, nfa_state_T *state, garray_T *indent));
static void nfa_dump __ARGS((nfa_regprog_T *prog));
#endif
static int *re2post __ARGS((void));
@@ -1811,29 +1812,74 @@ nfa_postfix_dump(expr, retval)
* Print the NFA starting with a root node "state".
*/
static void
-nfa_print_state(debugf, state, ident)
+nfa_print_state(debugf, state)
FILE *debugf;
nfa_state_T *state;
- int ident;
{
- int i;
+ garray_T indent;
+
+ ga_init2(&indent, 1, 64);
+ ga_append(&indent, '\0');
+ nfa_print_state2(debugf, state, &indent);
+ ga_clear(&indent);
+}
+
+ static void
+nfa_print_state2(debugf, state, indent)
+ FILE *debugf;
+ nfa_state_T *state;
+ garray_T *indent;
+{
+ char_u *p;
if (state == NULL)
return;
fprintf(debugf, "(%2d)", abs(state->id));
- for (i = 0; i < ident; i++)
- fprintf(debugf, "%c", ' ');
+
+ /* Output indent */
+ p = (char_u *)indent->ga_data;
+ if (indent->ga_len >= 3)
+ {
+ int last = indent->ga_len - 3;
+ char_u save[2];
+
+ STRNCPY(save, &p[last], 2);
+ STRNCPY(&p[last], "+-", 2);
+ fprintf(debugf, " %s", p);
+ STRNCPY(&p[last], save, 2);
+ }
+ else
+ fprintf(debugf, " %s", p);
nfa_set_code(state->c);
- fprintf(debugf, "%s %s (%d) (id=%d)\n",
- state->negated ? "NOT" : "", code, state->c, abs(state->id));
+ fprintf(debugf, "%s%s (%d) (id=%d)\n",
+ state->negated ? "NOT " : "", code, state->c, abs(state->id));
if (state->id < 0)
return;
state->id = abs(state->id) * -1;
- nfa_print_state(debugf, state->out, ident + 4);
- nfa_print_state(debugf, state->out1, ident + 4);
+
+ /* grow indent for state->out */
+ indent->ga_len -= 1;
+ if (state->out1)
+ ga_concat(indent, "| ");
+ else
+ ga_concat(indent, " ");
+ ga_append(indent, '\0');
+
+ nfa_print_state2(debugf, state->out, indent);
+
+ /* replace last part of indent for state->out1 */
+ indent->ga_len -= 3;
+ ga_concat(indent, " ");
+ ga_append(indent, '\0');
+
+ nfa_print_state2(debugf, state->out1, indent);
+
+ /* shrink indent */
+ indent->ga_len -= 3;
+ ga_append(indent, '\0');
}
/*
@@ -1847,7 +1893,7 @@ nfa_dump(prog)
if (debugf != NULL)
{
- nfa_print_state(debugf, prog->start, 0);
+ nfa_print_state(debugf, prog->start);
fclose(debugf);
}
}
@@ -3505,7 +3551,7 @@ nfa_regtry(start, col)
#endif
fprintf(f, "\tInput text is \"%s\" \n", reginput);
fprintf(f, " =======================================================\n\n\n\n\n\n\n");
- nfa_print_state(f, start, 0);
+ nfa_print_state(f, start);
fprintf(f, "\n\n");
fclose(f);
}
diff --git a/src/version.c b/src/version.c
index ebf1a383a..5063b8d01 100644
--- 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 */
/**/
+ 1014,
+/**/
1013,
/**/
1012,