diff --git a/7.4.262 b/7.4.262 new file mode 100644 index 0000000..ef29032 --- /dev/null +++ b/7.4.262 @@ -0,0 +1,314 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.262 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +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 -- 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 ///