home *** CD-ROM | disk | FTP | other *** search
- To: vim_dev@googlegroups.com
- Subject: Patch 7.3.1145
- 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.1145
- Problem: New regexp engine: addstate() is called very often.
- Solution: Optimize adding the start state.
- Files: src/regexp_nfa.c
-
-
- *** ../vim-7.3.1144/src/regexp_nfa.c 2013-06-07 17:31:25.000000000 +0200
- --- src/regexp_nfa.c 2013-06-07 22:03:12.000000000 +0200
- ***************
- *** 4332,4340 ****
- nfa_list_T *nextlist;
- int *listids = NULL;
- nfa_state_T *add_state;
- ! int add_count;
- ! int add_off;
- garray_T pimlist;
- #ifdef NFA_REGEXP_DEBUG_LOG
- FILE *debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
-
- --- 4332,4341 ----
- nfa_list_T *nextlist;
- int *listids = NULL;
- nfa_state_T *add_state;
- ! int add_count;
- ! int add_off;
- garray_T pimlist;
- + int toplevel = start->c == NFA_MOPEN;
- #ifdef NFA_REGEXP_DEBUG_LOG
- FILE *debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
-
- ***************
- *** 4378,4387 ****
- nextlist = &list[1];
- nextlist->n = 0;
- #ifdef ENABLE_LOG
- ! fprintf(log_fd, "(---) STARTSTATE\n");
- #endif
- thislist->id = nfa_listid + 1;
- ! addstate(thislist, start, m, 0);
-
- #define ADD_STATE_IF_MATCH(state) \
- if (result) { \
- --- 4379,4404 ----
- nextlist = &list[1];
- nextlist->n = 0;
- #ifdef ENABLE_LOG
- ! fprintf(log_fd, "(---) STARTSTATE first\n");
- #endif
- thislist->id = nfa_listid + 1;
- !
- ! /* Inline optimized code for addstate(thislist, start, m, 0) if we know
- ! * it's the first MOPEN. */
- ! if (toplevel)
- ! {
- ! if (REG_MULTI)
- ! {
- ! m->norm.list.multi[0].start.lnum = reglnum;
- ! m->norm.list.multi[0].start.col = (colnr_T)(reginput - regline);
- ! }
- ! else
- ! m->norm.list.line[0].start = reginput;
- ! m->norm.in_use = 1;
- ! addstate(thislist, start->out, m, 0);
- ! }
- ! else
- ! addstate(thislist, start, m, 0);
-
- #define ADD_STATE_IF_MATCH(state) \
- if (result) { \
- ***************
- *** 5382,5388 ****
- * Unless "nfa_endp" is not NULL, then we match the end position.
- * Also don't start a match past the first line. */
- if (nfa_match == FALSE
- ! && ((start->c == NFA_MOPEN
- && reglnum == 0
- && clen != 0
- && (ireg_maxcol == 0
- --- 5399,5405 ----
- * Unless "nfa_endp" is not NULL, then we match the end position.
- * Also don't start a match past the first line. */
- if (nfa_match == FALSE
- ! && ((toplevel
- && reglnum == 0
- && clen != 0
- && (ireg_maxcol == 0
- ***************
- *** 5398,5404 ****
- #ifdef ENABLE_LOG
- fprintf(log_fd, "(---) STARTSTATE\n");
- #endif
- ! addstate(nextlist, start, m, clen);
- }
-
- #ifdef ENABLE_LOG
- --- 5415,5433 ----
- #ifdef ENABLE_LOG
- fprintf(log_fd, "(---) STARTSTATE\n");
- #endif
- ! /* Inline optimized code for addstate() if we know the state is
- ! * the first MOPEN. */
- ! if (toplevel)
- ! {
- ! if (REG_MULTI)
- ! m->norm.list.multi[0].start.col =
- ! (colnr_T)(reginput - regline) + clen;
- ! else
- ! m->norm.list.line[0].start = reginput + clen;
- ! addstate(nextlist, start->out, m, clen);
- ! }
- ! else
- ! addstate(nextlist, start, m, clen);
- }
-
- #ifdef ENABLE_LOG
- *** ../vim-7.3.1144/src/version.c 2013-06-07 20:17:06.000000000 +0200
- --- src/version.c 2013-06-07 22:37:03.000000000 +0200
- ***************
- *** 730,731 ****
- --- 730,733 ----
- { /* Add new patch number below this line */
- + /**/
- + 1145,
- /**/
-
- --
- hundred-and-one symptoms of being an internet addict:
- 104. When people ask about the Presidential Election you ask "Which country?"
-
- /// 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 ///
-