| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.1013 |
| 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.1013 |
| Problem: New regexp logging is a bit messy. |
| Solution: Consistently use #defines, add explanatory comment. (Taro Muraoka) |
| Files: src/regexp_nfa.c |
| |
| |
| |
| |
| |
| *** 5,16 **** |
| * This file is included in "regexp.c". |
| */ |
| |
| #ifdef DEBUG |
| ! /* Comment this out to disable log files. They can get pretty big */ |
| # define ENABLE_LOG |
| ! # define LOG_NAME "log_nfarun.log" |
| ! # define NFA_REGEXP_DEBUG_LOG |
| ! # define NFA_REGEXP_DEBUG_LOG_NAME "nfa_regexp_debug.log" |
| #endif |
| |
| /* Upper limit allowed for {m,n} repetitions handled by NFA */ |
| --- 5,32 ---- |
| * This file is included in "regexp.c". |
| */ |
| |
| + /* |
| + * Logging of NFA engine. |
| + * |
| + * The NFA engine can write four log files: |
| + * - Error log: Contains NFA engine's fatal errors. |
| + * - Dump log: Contains compiled NFA state machine's information. |
| + * - Run log: Contains information of matching procedure. |
| + * - Debug log: Contains detailed information of matching procedure. Can be |
| + * disabled by undefining NFA_REGEXP_DEBUG_LOG. |
| + * The first one can also be used without debug mode. |
| + * The last three are enabled when compiled as debug mode and individually |
| + * disabled by commenting them out. |
| + * The log files can get quite big! |
| + * Do disable all of this when compiling Vim for debugging, undefine DEBUG in |
| + * regexp.c |
| + */ |
| #ifdef DEBUG |
| ! # define NFA_REGEXP_ERROR_LOG "nfa_regexp_error.log" |
| # define ENABLE_LOG |
| ! # define NFA_REGEXP_DUMP_LOG "nfa_regexp_dump.log" |
| ! # define NFA_REGEXP_RUN_LOG "nfa_regexp_run.log" |
| ! # define NFA_REGEXP_DEBUG_LOG "nfa_regexp_debug.log" |
| #endif |
| |
| /* Upper limit allowed for {m,n} repetitions handled by NFA */ |
| |
| *** 1769,1775 **** |
| int *p; |
| FILE *f; |
| |
| ! f = fopen("LOG.log", "a"); |
| if (f != NULL) |
| { |
| fprintf(f, "\n-------------------------\n"); |
| --- 1785,1791 ---- |
| int *p; |
| FILE *f; |
| |
| ! f = fopen(NFA_REGEXP_DUMP_LOG, "a"); |
| if (f != NULL) |
| { |
| fprintf(f, "\n-------------------------\n"); |
| |
| *** 1827,1833 **** |
| nfa_dump(prog) |
| nfa_regprog_T *prog; |
| { |
| ! FILE *debugf = fopen("LOG.log", "a"); |
| |
| if (debugf != NULL) |
| { |
| --- 1843,1849 ---- |
| nfa_dump(prog) |
| nfa_regprog_T *prog; |
| { |
| ! FILE *debugf = fopen(NFA_REGEXP_DUMP_LOG, "a"); |
| |
| if (debugf != NULL) |
| { |
| |
| *** 1994,2007 **** |
| |
| static void |
| st_error(postfix, end, p) |
| ! int *postfix; |
| ! int *end; |
| ! int *p; |
| { |
| FILE *df; |
| int *p2; |
| |
| ! df = fopen("stack.err", "a"); |
| if (df) |
| { |
| fprintf(df, "Error popping the stack!\n"); |
| --- 2010,2024 ---- |
| |
| static void |
| st_error(postfix, end, p) |
| ! int *postfix UNUSED; |
| ! int *end UNUSED; |
| ! int *p UNUSED; |
| { |
| + #ifdef NFA_REGEXP_ERROR_LOG |
| FILE *df; |
| int *p2; |
| |
| ! df = fopen(NFA_REGEXP_ERROR_LOG, "a"); |
| if (df) |
| { |
| fprintf(df, "Error popping the stack!\n"); |
| |
| *** 2036,2041 **** |
| --- 2053,2059 ---- |
| fprintf(df, "\n--------------------------\n"); |
| fclose(df); |
| } |
| + #endif |
| EMSG(_("E874: (NFA) Could not pop the stack !")); |
| } |
| |
| |
| *** 2148,2155 **** |
| --- 2166,2175 ---- |
| } |
| e1 = POP(); |
| e1.start->negated = TRUE; |
| + #ifdef FEAT_MBYTE |
| if (e1.start->c == NFA_COMPOSING) |
| e1.start->out1->negated = TRUE; |
| + #endif |
| PUSH(e1); |
| break; |
| |
| |
| *** 2265,2270 **** |
| --- 2285,2291 ---- |
| PUSH(frag(s, list1(&s1->out))); |
| break; |
| |
| + #ifdef FEAT_MBYTE |
| case NFA_COMPOSING: /* char with composing char */ |
| #if 0 |
| /* TODO */ |
| |
| *** 2274,2279 **** |
| --- 2295,2301 ---- |
| } |
| #endif |
| /* FALLTHROUGH */ |
| + #endif |
| |
| case NFA_MOPEN + 0: /* Submatch */ |
| case NFA_MOPEN + 1: |
| |
| *** 2298,2306 **** |
| --- 2320,2330 ---- |
| case NFA_NOPEN: |
| mclose = NFA_NCLOSE; |
| break; |
| + #ifdef FEAT_MBYTE |
| case NFA_COMPOSING: |
| mclose = NFA_END_COMPOSING; |
| break; |
| + #endif |
| default: |
| /* NFA_MOPEN(0) ... NFA_MOPEN(9) */ |
| mclose = *p + NSUBEXP; |
| |
| *** 2336,2344 **** |
| --- 2360,2370 ---- |
| goto theend; |
| patch(e.out, s1); |
| |
| + #ifdef FEAT_MBYTE |
| if (mopen == NFA_COMPOSING) |
| /* COMPOSING->out1 = END_COMPOSING */ |
| patch(list1(&s->out1), s1); |
| + #endif |
| |
| PUSH(frag(s, list1(&s1->out))); |
| break; |
| |
| *** 2802,2809 **** |
| thread_T *t; |
| char_u *old_reginput = NULL; |
| char_u *old_regline = NULL; |
| - nfa_state_T *sta; |
| - nfa_state_T *end; |
| List list[3]; |
| List *listtbl[2][2]; |
| List *ll; |
| --- 2828,2833 ---- |
| |
| *** 2813,2825 **** |
| List *neglist; |
| int *listids = NULL; |
| int j = 0; |
| - int len = 0; |
| #ifdef NFA_REGEXP_DEBUG_LOG |
| ! FILE *debug = fopen(NFA_REGEXP_DEBUG_LOG_NAME, "a"); |
| |
| if (debug == NULL) |
| { |
| ! EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG_NAME); |
| return FALSE; |
| } |
| #endif |
| --- 2837,2848 ---- |
| List *neglist; |
| int *listids = NULL; |
| int j = 0; |
| #ifdef NFA_REGEXP_DEBUG_LOG |
| ! FILE *debug = fopen(NFA_REGEXP_DEBUG_LOG, "a"); |
| |
| if (debug == NULL) |
| { |
| ! EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG); |
| return FALSE; |
| } |
| #endif |
| |
| *** 2836,2842 **** |
| vim_memset(list[2].t, 0, size); |
| |
| #ifdef ENABLE_LOG |
| ! log_fd = fopen(LOG_NAME, "a"); |
| if (log_fd != NULL) |
| { |
| fprintf(log_fd, " |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| *** 3025,3031 **** |
| nfa_restore_listids(start, listids); |
| |
| #ifdef ENABLE_LOG |
| ! log_fd = fopen(LOG_NAME, "a"); |
| if (log_fd != NULL) |
| { |
| fprintf(log_fd, " |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| *** 3141,3147 **** |
| #ifdef FEAT_MBYTE |
| case NFA_COMPOSING: |
| { |
| ! int mc = c; |
| |
| result = OK; |
| sta = t->state->out; |
| --- 3164,3173 ---- |
| #ifdef FEAT_MBYTE |
| case NFA_COMPOSING: |
| { |
| ! int mc = c; |
| ! int len = 0; |
| ! nfa_state_T *end; |
| ! nfa_state_T *sta; |
| |
| result = OK; |
| sta = t->state->out; |
| |
| *** 3469,3475 **** |
| need_clear_subexpr = TRUE; |
| |
| #ifdef ENABLE_LOG |
| ! f = fopen(LOG_NAME, "a"); |
| if (f != NULL) |
| { |
| fprintf(f, "\n\n\n\n\n\n\t\t |
| --- 3495,3501 ---- |
| need_clear_subexpr = TRUE; |
| |
| #ifdef ENABLE_LOG |
| ! f = fopen(NFA_REGEXP_RUN_LOG, "a"); |
| if (f != NULL) |
| { |
| fprintf(f, "\n\n\n\n\n\n\t\t |
| |
| *** 3662,3668 **** |
| */ |
| #ifdef ENABLE_LOG |
| { |
| ! FILE *f = fopen(LOG_NAME, "a"); |
| |
| if (f != NULL) |
| { |
| --- 3688,3694 ---- |
| */ |
| #ifdef ENABLE_LOG |
| { |
| ! FILE *f = fopen(NFA_REGEXP_RUN_LOG, "a"); |
| |
| if (f != NULL) |
| { |
| |
| |
| |
| *** 730,731 **** |
| --- 730,733 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 1013, |
| /**/ |
| |
| -- |
| Scientists decoded the first message from an alien civilization: |
| SIMPLY SEND 6 TIMES 10 TO THE 50 ATOMS OF HYDROGEN TO THE STAR |
| SYSTEM AT THE TOP OF THE LIST, CROSS OFF THAT STAR SYSTEM, THEN PUT |
| YOUR STAR SYSTEM AT THE BOTTOM OF THE LIST AND SEND IT TO 100 OTHER |
| STAR SYSTEMS. WITHIN ONE TENTH GALACTIC ROTATION YOU WILL RECEIVE |
| ENOUGH HYDROGREN TO POWER YOUR CIVILIZATION UNTIL ENTROPY REACHES ITS |
| MAXIMUM! IT REALLY WORKS! |
| |
| /// 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 /// |