| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.1014 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.1014 |
| Problem: New regexp state dump is hard to read. |
| Solution: Make the state dump more pretty. (Taro Muraoka) |
| Files: src/regexp_nfa.c |
| |
| |
| |
| |
| |
| *** 183,189 **** |
| #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_dump __ARGS((nfa_regprog_T *prog)); |
| #endif |
| static int *re2post __ARGS((void)); |
| --- 183,190 ---- |
| #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)); |
| ! 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,1839 **** |
| * Print the NFA starting with a root node "state". |
| */ |
| static void |
| ! nfa_print_state(debugf, state, ident) |
| FILE *debugf; |
| nfa_state_T *state; |
| - int ident; |
| { |
| ! int i; |
| |
| if (state == NULL) |
| return; |
| |
| fprintf(debugf, "(%2d)", abs(state->id)); |
| ! for (i = 0; i < ident; i++) |
| ! fprintf(debugf, "%c", ' '); |
| |
| nfa_set_code(state->c); |
| ! 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); |
| } |
| |
| /* |
| --- 1812,1885 ---- |
| * Print the NFA starting with a root node "state". |
| */ |
| static void |
| ! nfa_print_state(debugf, state) |
| FILE *debugf; |
| nfa_state_T *state; |
| { |
| ! 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)); |
| ! |
| ! /* 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)); |
| if (state->id < 0) |
| return; |
| |
| state->id = abs(state->id) * -1; |
| ! |
| ! /* 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,1853 **** |
| |
| if (debugf != NULL) |
| { |
| ! nfa_print_state(debugf, prog->start, 0); |
| fclose(debugf); |
| } |
| } |
| --- 1893,1899 ---- |
| |
| if (debugf != NULL) |
| { |
| ! nfa_print_state(debugf, prog->start); |
| fclose(debugf); |
| } |
| } |
| |
| *** 3505,3511 **** |
| #endif |
| fprintf(f, "\tInput text is \"%s\" \n", reginput); |
| fprintf(f, " |
| ! nfa_print_state(f, start, 0); |
| fprintf(f, "\n\n"); |
| fclose(f); |
| } |
| --- 3551,3557 ---- |
| #endif |
| fprintf(f, "\tInput text is \"%s\" \n", reginput); |
| fprintf(f, " |
| ! nfa_print_state(f, start); |
| fprintf(f, "\n\n"); |
| fclose(f); |
| } |
| |
| |
| |
| *** 730,731 **** |
| --- 730,733 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 1014, |
| /**/ |
| |
| -- |
| Lower life forms have more fun! |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 /// |