| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.262 |
| 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.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 |
| |
| |
| |
| |
| |
| *** 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 |
| |
| |
| |
| |
| *** 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 ---- |
| |
| |
| |
| *** 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; |
| |
| |
| |
| *** 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 /// |