Patch 7.4.262 Problem: Duplicate code in regexec(). Solution: Add line_lbr flag to regexec_nl(). Files: src/regexp.c, src/regexp_nfa.c, src/regexp.h
*** ../vim-7.4.261/src/regexp.c 2014-04-23 18:48:43.546854558 +0200 --- src/regexp.c 2014-04-23 18:59:38.606838773 +0200 *************** *** 3709,3733 **** /* TRUE if using multi-line regexp. */ #define REG_MULTI (reg_match == NULL) ! static int bt_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); /* * Match a regexp against a string. * "rmp->regprog" is a compiled regexp as returned by vim_regcomp(). * Uses curbuf for line count and 'iskeyword'. * * Return TRUE if there is a match, FALSE if not. */ static int ! bt_regexec(rmp, line, col) regmatch_T *rmp; char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ { reg_match = rmp; reg_mmatch = NULL; reg_maxline = 0; ! reg_line_lbr = FALSE; reg_buf = curbuf; reg_win = NULL; ireg_ic = rmp->rm_ic; --- 3709,3736 ---- /* TRUE if using multi-line regexp. */ #define REG_MULTI (reg_match == NULL) ! static int bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr)); ! /* * Match a regexp against a string. * "rmp->regprog" is a compiled regexp as returned by vim_regcomp(). * Uses curbuf for line count and 'iskeyword'. + * if "line_lbr" is TRUE consider a "\n" in "line" to be a line break. * * Return TRUE if there is a match, FALSE if not. */ static int ! bt_regexec_nl(rmp, line, col, line_lbr) regmatch_T *rmp; char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ + int line_lbr; { reg_match = rmp; reg_mmatch = NULL; reg_maxline = 0; ! reg_line_lbr = line_lbr; reg_buf = curbuf; reg_win = NULL; ireg_ic = rmp->rm_ic; *************** *** 3738,3772 **** return (bt_regexec_both(line, col, NULL) != 0); } - #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ - || defined(FIND_REPLACE_DIALOG) || defined(PROTO) - - static int bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); - - /* - * Like vim_regexec(), but consider a "\n" in "line" to be a line break. - */ - static int - bt_regexec_nl(rmp, line, col) - regmatch_T *rmp; - char_u *line; /* string to match against */ - colnr_T col; /* column to start looking for match */ - { - reg_match = rmp; - reg_mmatch = NULL; - reg_maxline = 0; - reg_line_lbr = TRUE; - reg_buf = curbuf; - reg_win = NULL; - ireg_ic = rmp->rm_ic; - #ifdef FEAT_MBYTE - ireg_icombine = FALSE; - #endif - ireg_maxcol = 0; - return (bt_regexec_both(line, col, NULL) != 0); - } - #endif - static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm)); /* --- 3741,3746 ---- *************** *** 7985,7995 **** { bt_regcomp, bt_regfree, - bt_regexec, - #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ - || defined(FIND_REPLACE_DIALOG) || defined(PROTO) bt_regexec_nl, - #endif bt_regexec_multi #ifdef DEBUG ,(char_u *)"" --- 7959,7965 ---- *************** *** 8003,8013 **** { nfa_regcomp, nfa_regfree, - nfa_regexec, - #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ - || defined(FIND_REPLACE_DIALOG) || defined(PROTO) nfa_regexec_nl, - #endif nfa_regexec_multi #ifdef DEBUG ,(char_u *)"" --- 7973,7979 ---- *************** *** 8131,8137 **** char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ { ! return rmp->regprog->engine->regexec(rmp, line, col); } #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ --- 8097,8103 ---- char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ { ! return rmp->regprog->engine->regexec_nl(rmp, line, col, FALSE); } #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ *************** *** 8145,8151 **** char_u *line; colnr_T col; { ! return rmp->regprog->engine->regexec_nl(rmp, line, col); } #endif --- 8111,8117 ---- char_u *line; colnr_T col; { ! return rmp->regprog->engine->regexec_nl(rmp, line, col, TRUE); } #endif *** ../vim-7.4.261/src/regexp_nfa.c 2014-04-06 21:33:39.675363743 +0200 --- src/regexp_nfa.c 2014-04-23 19:00:44.354837189 +0200 *************** *** 311,317 **** static long nfa_regexec_both __ARGS((char_u *line, colnr_T col)); static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags)); static void nfa_regfree __ARGS((regprog_T *prog)); ! static int nfa_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm)); static int match_follows __ARGS((nfa_state_T *startstate, int depth)); static int failure_chance __ARGS((nfa_state_T *state, int depth)); --- 311,317 ---- static long nfa_regexec_both __ARGS((char_u *line, colnr_T col)); static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags)); static void nfa_regfree __ARGS((regprog_T *prog)); ! static int nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col, int line_lbr)); static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm)); static int match_follows __ARGS((nfa_state_T *startstate, int depth)); static int failure_chance __ARGS((nfa_state_T *state, int depth)); *************** *** 7060,7078 **** * Match a regexp against a string. * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp(). * Uses curbuf for line count and 'iskeyword'. * * Return TRUE if there is a match, FALSE if not. */ static int ! nfa_regexec(rmp, line, col) regmatch_T *rmp; char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ { reg_match = rmp; reg_mmatch = NULL; reg_maxline = 0; ! reg_line_lbr = FALSE; reg_buf = curbuf; reg_win = NULL; ireg_ic = rmp->rm_ic; --- 7060,7080 ---- * Match a regexp against a string. * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp(). * Uses curbuf for line count and 'iskeyword'. + * If "line_lbr" is TRUE consider a "\n" in "line" to be a line break. * * Return TRUE if there is a match, FALSE if not. */ static int ! nfa_regexec_nl(rmp, line, col, line_lbr) regmatch_T *rmp; char_u *line; /* string to match against */ colnr_T col; /* column to start looking for match */ + int line_lbr; { reg_match = rmp; reg_mmatch = NULL; reg_maxline = 0; ! reg_line_lbr = line_lbr; reg_buf = curbuf; reg_win = NULL; ireg_ic = rmp->rm_ic; *************** *** 7083,7117 **** return (nfa_regexec_both(line, col) != 0); } - #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ - || defined(FIND_REPLACE_DIALOG) || defined(PROTO) - - static int nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col)); - - /* - * Like nfa_regexec(), but consider a "\n" in "line" to be a line break. - */ - static int - nfa_regexec_nl(rmp, line, col) - regmatch_T *rmp; - char_u *line; /* string to match against */ - colnr_T col; /* column to start looking for match */ - { - reg_match = rmp; - reg_mmatch = NULL; - reg_maxline = 0; - reg_line_lbr = TRUE; - reg_buf = curbuf; - reg_win = NULL; - ireg_ic = rmp->rm_ic; - #ifdef FEAT_MBYTE - ireg_icombine = FALSE; - #endif - ireg_maxcol = 0; - return (nfa_regexec_both(line, col) != 0); - } - #endif - /* * Match a regexp against multiple lines. --- 7085,7090 ---- *** ../vim-7.4.261/src/regexp.h 2013-06-11 10:53:14.000000000 +0200 --- src/regexp.h 2014-04-23 18:58:18.614840701 +0200 *************** *** 149,159 **** { regprog_T *(*regcomp)(char_u*, int); void (*regfree)(regprog_T *); ! int (*regexec)(regmatch_T*, char_u*, colnr_T); ! #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \ ! || defined(FIND_REPLACE_DIALOG) || defined(PROTO) ! int (*regexec_nl)(regmatch_T*, char_u*, colnr_T); ! #endif long (*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*); #ifdef DEBUG char_u *expr; --- 149,155 ---- { regprog_T *(*regcomp)(char_u*, int); void (*regfree)(regprog_T *); ! int (*regexec_nl)(regmatch_T*, char_u*, colnr_T, int); long (*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*); #ifdef DEBUG char_u *expr; *** ../vim-7.4.261/src/version.c 2014-04-23 18:48:43.546854558 +0200 --- src/version.c 2014-04-23 18:52:20.102849340 +0200 *************** *** 736,737 **** --- 736,739 ---- { /* Add new patch number below this line */ + /**/ + 262, /**/ -- >From "know your smileys": ~#:-( I just washed my hair, and I can't do nuthin' with it. /// Bram Moolenaar -- b...@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 /// -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.