mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	vim-patch:8.2.0260: several lines of code are duplicated (#21108)
Problem:    Several lines of code are duplicated.
Solution:   Move duplicated code to a function. (Yegappan Lakshmanan,
            closes vim/vim#5330)
f4140488c7
Using sizeof seems better than ARRAY_SIZE for vim_snprintf().
			
			
This commit is contained in:
		| @@ -1899,6 +1899,46 @@ void set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx) | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /// Apply the OptionSet autocommand. | ||||||
|  | static void apply_optionset_autocmd(int opt_idx, long opt_flags, long oldval, long oldval_g, | ||||||
|  |                                     long newval, const char *errmsg) | ||||||
|  | { | ||||||
|  |   // Don't do this while starting up, failure or recursively. | ||||||
|  |   if (starting || errmsg != NULL || *get_vim_var_str(VV_OPTION_TYPE) != NUL) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   char buf_old[12], buf_old_global[12], buf_new[12], buf_type[12]; | ||||||
|  |  | ||||||
|  |   vim_snprintf(buf_old, sizeof(buf_old), "%ld", oldval); | ||||||
|  |   vim_snprintf(buf_old_global, sizeof(buf_old_global), "%ld", oldval_g); | ||||||
|  |   vim_snprintf(buf_new, sizeof(buf_new), "%ld", newval); | ||||||
|  |   vim_snprintf(buf_type, sizeof(buf_type), "%s", | ||||||
|  |                (opt_flags & OPT_LOCAL) ? "local" : "global"); | ||||||
|  |   set_vim_var_string(VV_OPTION_NEW, buf_new, -1); | ||||||
|  |   set_vim_var_string(VV_OPTION_OLD, buf_old, -1); | ||||||
|  |   set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); | ||||||
|  |   if (opt_flags & OPT_LOCAL) { | ||||||
|  |     set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1); | ||||||
|  |     set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); | ||||||
|  |   } | ||||||
|  |   if (opt_flags & OPT_GLOBAL) { | ||||||
|  |     set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1); | ||||||
|  |     set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1); | ||||||
|  |   } | ||||||
|  |   if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) { | ||||||
|  |     set_vim_var_string(VV_OPTION_COMMAND, "set", -1); | ||||||
|  |     set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); | ||||||
|  |     set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1); | ||||||
|  |   } | ||||||
|  |   if (opt_flags & OPT_MODELINE) { | ||||||
|  |     set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1); | ||||||
|  |     set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); | ||||||
|  |   } | ||||||
|  |   apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL); | ||||||
|  |   reset_v_option_vars(); | ||||||
|  | } | ||||||
|  |  | ||||||
| /// Set the value of a boolean option, taking care of side effects | /// Set the value of a boolean option, taking care of side effects | ||||||
| /// | /// | ||||||
| /// @param[in]  opt_idx  Option index in options[] table. | /// @param[in]  opt_idx  Option index in options[] table. | ||||||
| @@ -2153,40 +2193,10 @@ static char *set_bool_option(const int opt_idx, char_u *const varp, const int va | |||||||
|  |  | ||||||
|   options[opt_idx].flags |= P_WAS_SET; |   options[opt_idx].flags |= P_WAS_SET; | ||||||
|  |  | ||||||
|   // Don't do this while starting up or recursively. |   apply_optionset_autocmd(opt_idx, opt_flags, | ||||||
|   if (!starting && *get_vim_var_str(VV_OPTION_TYPE) == NUL) { |                           (long)(old_value ? true : false), | ||||||
|     char buf_old[2]; |                           (long)(old_global_value ? true : false), | ||||||
|     char buf_old_global[2]; |                           (long)(value ? true : false), NULL); | ||||||
|     char buf_new[2]; |  | ||||||
|     char buf_type[7]; |  | ||||||
|     vim_snprintf(buf_old, ARRAY_SIZE(buf_old), "%d", old_value ? true : false); |  | ||||||
|     vim_snprintf(buf_old_global, ARRAY_SIZE(buf_old_global), "%d", old_global_value ? true : false); |  | ||||||
|     vim_snprintf(buf_new, ARRAY_SIZE(buf_new), "%d", value ? true : false); |  | ||||||
|     vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s", |  | ||||||
|                  (opt_flags & OPT_LOCAL) ? "local" : "global"); |  | ||||||
|     set_vim_var_string(VV_OPTION_NEW, buf_new, -1); |  | ||||||
|     set_vim_var_string(VV_OPTION_OLD, buf_old, -1); |  | ||||||
|     set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); |  | ||||||
|     if (opt_flags & OPT_LOCAL) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     if (opt_flags & OPT_GLOBAL) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "set", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1); |  | ||||||
|     } |  | ||||||
|     if (opt_flags & OPT_MODELINE) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL); |  | ||||||
|     reset_v_option_vars(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (options[opt_idx].flags & P_UI_OPTION) { |   if (options[opt_idx].flags & P_UI_OPTION) { | ||||||
|     ui_call_option_set(cstr_as_string(options[opt_idx].fullname), |     ui_call_option_set(cstr_as_string(options[opt_idx].fullname), | ||||||
| @@ -2596,41 +2606,8 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, char *errbuf, | |||||||
|  |  | ||||||
|   options[opt_idx].flags |= P_WAS_SET; |   options[opt_idx].flags |= P_WAS_SET; | ||||||
|  |  | ||||||
|   // Don't do this while starting up, failure or recursively. |   apply_optionset_autocmd(opt_idx, opt_flags, old_value, old_global_value, | ||||||
|   if (!starting && errmsg == NULL && *get_vim_var_str(VV_OPTION_TYPE) == NUL) { |                           value, errmsg); | ||||||
|     char buf_old[NUMBUFLEN]; |  | ||||||
|     char buf_old_global[NUMBUFLEN]; |  | ||||||
|     char buf_new[NUMBUFLEN]; |  | ||||||
|     char buf_type[7]; |  | ||||||
|  |  | ||||||
|     vim_snprintf(buf_old, ARRAY_SIZE(buf_old), "%ld", old_value); |  | ||||||
|     vim_snprintf(buf_old_global, ARRAY_SIZE(buf_old_global), "%ld", old_global_value); |  | ||||||
|     vim_snprintf(buf_new, ARRAY_SIZE(buf_new), "%ld", value); |  | ||||||
|     vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s", |  | ||||||
|                  (opt_flags & OPT_LOCAL) ? "local" : "global"); |  | ||||||
|     set_vim_var_string(VV_OPTION_NEW, buf_new, -1); |  | ||||||
|     set_vim_var_string(VV_OPTION_OLD, buf_old, -1); |  | ||||||
|     set_vim_var_string(VV_OPTION_TYPE, buf_type, -1); |  | ||||||
|     if (opt_flags & OPT_LOCAL) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     if (opt_flags & OPT_GLOBAL) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "set", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1); |  | ||||||
|     } |  | ||||||
|     if (opt_flags & OPT_MODELINE) { |  | ||||||
|       set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1); |  | ||||||
|       set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1); |  | ||||||
|     } |  | ||||||
|     apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL); |  | ||||||
|     reset_v_option_vars(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   if (errmsg == NULL && options[opt_idx].flags & P_UI_OPTION) { |   if (errmsg == NULL && options[opt_idx].flags & P_UI_OPTION) { | ||||||
|     ui_call_option_set(cstr_as_string(options[opt_idx].fullname), |     ui_call_option_set(cstr_as_string(options[opt_idx].fullname), | ||||||
|   | |||||||
| @@ -1338,9 +1338,9 @@ static int qf_parse_fmt_t(regmatch_T *rmp, int midx, qffields_T *fields) | |||||||
|   return QF_OK; |   return QF_OK; | ||||||
| } | } | ||||||
|  |  | ||||||
| /// Parse the match for '%+' format pattern. The whole matching line is included | /// Copy a non-error line into the error string.  Return the matched line in | ||||||
| /// in the error string.  Return the matched line in "fields->errmsg". | /// "fields->errmsg". | ||||||
| static void qf_parse_fmt_plus(const char *linebuf, size_t linelen, qffields_T *fields) | static int copy_nonerror_line(const char *linebuf, size_t linelen, qffields_T *fields) | ||||||
|   FUNC_ATTR_NONNULL_ALL |   FUNC_ATTR_NONNULL_ALL | ||||||
| { | { | ||||||
|   if (linelen >= fields->errmsglen) { |   if (linelen >= fields->errmsglen) { | ||||||
| @@ -1348,7 +1348,10 @@ static void qf_parse_fmt_plus(const char *linebuf, size_t linelen, qffields_T *f | |||||||
|     fields->errmsg = xrealloc(fields->errmsg, linelen + 1); |     fields->errmsg = xrealloc(fields->errmsg, linelen + 1); | ||||||
|     fields->errmsglen = linelen + 1; |     fields->errmsglen = linelen + 1; | ||||||
|   } |   } | ||||||
|  |   // copy whole line to error message | ||||||
|   STRLCPY(fields->errmsg, linebuf, linelen + 1); |   STRLCPY(fields->errmsg, linebuf, linelen + 1); | ||||||
|  |  | ||||||
|  |   return QF_OK; | ||||||
| } | } | ||||||
|  |  | ||||||
| /// Parse the match for error message ('%m') pattern in regmatch. | /// Parse the match for error message ('%m') pattern in regmatch. | ||||||
| @@ -1495,7 +1498,7 @@ static int qf_parse_match(char *linebuf, size_t linelen, efm_T *fmt_ptr, regmatc | |||||||
|       status = qf_parse_fmt_f(regmatch, midx, fields, idx); |       status = qf_parse_fmt_f(regmatch, midx, fields, idx); | ||||||
|     } else if (i == FMT_PATTERN_M) { |     } else if (i == FMT_PATTERN_M) { | ||||||
|       if (fmt_ptr->flags == '+' && !qf_multiscan) {  // %+ |       if (fmt_ptr->flags == '+' && !qf_multiscan) {  // %+ | ||||||
|         qf_parse_fmt_plus(linebuf, linelen, fields); |         status = copy_nonerror_line(linebuf, linelen, fields); | ||||||
|       } else if (midx > 0) {  // %m |       } else if (midx > 0) {  // %m | ||||||
|         status = qf_parse_fmt_m(regmatch, midx, fields); |         status = qf_parse_fmt_m(regmatch, midx, fields); | ||||||
|       } |       } | ||||||
| @@ -1603,15 +1606,8 @@ static int qf_parse_line_nomatch(char *linebuf, size_t linelen, qffields_T *fiel | |||||||
|   fields->namebuf[0] = NUL;   // no match found, remove file name |   fields->namebuf[0] = NUL;   // no match found, remove file name | ||||||
|   fields->lnum = 0;           // don't jump to this line |   fields->lnum = 0;           // don't jump to this line | ||||||
|   fields->valid = false; |   fields->valid = false; | ||||||
|   if (linelen >= fields->errmsglen) { |  | ||||||
|     // linelen + null terminator |  | ||||||
|     fields->errmsg = xrealloc(fields->errmsg, linelen + 1); |  | ||||||
|     fields->errmsglen = linelen + 1; |  | ||||||
|   } |  | ||||||
|   // copy whole line to error message |  | ||||||
|   STRLCPY(fields->errmsg, linebuf, linelen + 1); |  | ||||||
|  |  | ||||||
|   return QF_OK; |   return copy_nonerror_line(linebuf, linelen, fields); | ||||||
| } | } | ||||||
|  |  | ||||||
| /// Parse multi-line error format prefixes (%C and %Z) | /// Parse multi-line error format prefixes (%C and %Z) | ||||||
|   | |||||||
| @@ -2241,6 +2241,25 @@ list_T *reg_submatch_list(int no) | |||||||
|   return list; |   return list; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /// Initialize the values used for matching against multiple lines | ||||||
|  | /// | ||||||
|  | /// @param win   window in which to search or NULL | ||||||
|  | /// @param buf   buffer in which to search | ||||||
|  | /// @param lnum  nr of line to start looking for match | ||||||
|  | static void init_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum) | ||||||
|  | { | ||||||
|  |   rex.reg_match = NULL; | ||||||
|  |   rex.reg_mmatch = rmp; | ||||||
|  |   rex.reg_buf = buf; | ||||||
|  |   rex.reg_win = win; | ||||||
|  |   rex.reg_firstlnum = lnum; | ||||||
|  |   rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum; | ||||||
|  |   rex.reg_line_lbr = false; | ||||||
|  |   rex.reg_ic = rmp->rmm_ic; | ||||||
|  |   rex.reg_icombine = false; | ||||||
|  |   rex.reg_maxcol = rmp->rmm_maxcol; | ||||||
|  | } | ||||||
|  |  | ||||||
| // XXX Do not allow headers generator to catch definitions from regexp_nfa.c | // XXX Do not allow headers generator to catch definitions from regexp_nfa.c | ||||||
| #ifndef DO_NOT_DEFINE_EMPTY_ATTRIBUTES | #ifndef DO_NOT_DEFINE_EMPTY_ATTRIBUTES | ||||||
| # include "nvim/regexp_bt.c" | # include "nvim/regexp_bt.c" | ||||||
|   | |||||||
| @@ -5164,17 +5164,7 @@ static int bt_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, bool line_l | |||||||
| static long bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, | static long bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, | ||||||
|                              proftime_T *tm, int *timed_out) |                              proftime_T *tm, int *timed_out) | ||||||
| { | { | ||||||
|   rex.reg_match = NULL; |   init_regexec_multi(rmp, win, buf, lnum); | ||||||
|   rex.reg_mmatch = rmp; |  | ||||||
|   rex.reg_buf = buf; |  | ||||||
|   rex.reg_win = win; |  | ||||||
|   rex.reg_firstlnum = lnum; |  | ||||||
|   rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum; |  | ||||||
|   rex.reg_line_lbr = false; |  | ||||||
|   rex.reg_ic = rmp->rmm_ic; |  | ||||||
|   rex.reg_icombine = false; |  | ||||||
|   rex.reg_maxcol = rmp->rmm_maxcol; |  | ||||||
|  |  | ||||||
|   return bt_regexec_both(NULL, col, tm, timed_out); |   return bt_regexec_both(NULL, col, tm, timed_out); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7601,16 +7601,6 @@ static int nfa_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, bool line_ | |||||||
| static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, | static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, | ||||||
|                               proftime_T *tm, int *timed_out) |                               proftime_T *tm, int *timed_out) | ||||||
| { | { | ||||||
|   rex.reg_match = NULL; |   init_regexec_multi(rmp, win, buf, lnum); | ||||||
|   rex.reg_mmatch = rmp; |  | ||||||
|   rex.reg_buf = buf; |  | ||||||
|   rex.reg_win = win; |  | ||||||
|   rex.reg_firstlnum = lnum; |  | ||||||
|   rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum; |  | ||||||
|   rex.reg_line_lbr = false; |  | ||||||
|   rex.reg_ic = rmp->rmm_ic; |  | ||||||
|   rex.reg_icombine = false; |  | ||||||
|   rex.reg_maxcol = rmp->rmm_maxcol; |  | ||||||
|  |  | ||||||
|   return nfa_regexec_both(NULL, col, tm, timed_out); |   return nfa_regexec_both(NULL, col, tm, timed_out); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq