Refactor profiling check in call_user_func.

do_profiling is a global variable, and as such the clang static
analyzer has trouble making arguments about it.

This commit does one comparison against do_profiling and puts the
result in a local variable. This prevents errors from the value of
do_profiling changing between comparisons.
This commit is contained in:
Paul Rigge
2018-01-01 21:15:22 -08:00
parent 65ec4ea629
commit 2e630d2611

View File

@@ -21254,15 +21254,17 @@ void call_user_func(ufunc_T *fp, int argcount, typval_T *argvars,
}
}
const bool do_profiling_yes = do_profiling == PROF_YES;
bool func_not_yet_profiling_but_should =
do_profiling == PROF_YES
do_profiling_yes
&& !fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL);
if (func_not_yet_profiling_but_should)
func_do_profile(fp);
bool func_or_func_caller_profiling =
do_profiling == PROF_YES
do_profiling_yes
&& (fp->uf_profiling
|| (fc->caller != NULL && fc->caller->func->uf_profiling));
@@ -21272,7 +21274,7 @@ void call_user_func(ufunc_T *fp, int argcount, typval_T *argvars,
fp->uf_tm_children = profile_zero();
}
if (do_profiling == PROF_YES) {
if (do_profiling_yes) {
script_prof_save(&wait_start);
}
@@ -21348,7 +21350,7 @@ void call_user_func(ufunc_T *fp, int argcount, typval_T *argvars,
sourcing_name = save_sourcing_name;
sourcing_lnum = save_sourcing_lnum;
current_SID = save_current_SID;
if (do_profiling == PROF_YES)
if (do_profiling_yes)
script_prof_restore(&wait_start);
if (p_verbose >= 12 && sourcing_name != NULL) {