eval_call_provider(): free unused return value #12819

Caller can pass discard=true to free the unwanted return value.
This commit is contained in:
Jacques Germishuys
2020-09-02 04:22:42 +01:00
committed by GitHub
parent 4bcf54478a
commit a166c2aadb
4 changed files with 18 additions and 9 deletions

View File

@@ -10383,10 +10383,13 @@ void script_host_eval(char *name, typval_T *argvars, typval_T *rettv)
list_T *args = tv_list_alloc(1);
tv_list_append_string(args, (const char *)argvars[0].vval.v_string, -1);
*rettv = eval_call_provider(name, "eval", args);
*rettv = eval_call_provider(name, "eval", args, false);
}
typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
/// @param discard Clears the value returned by the provider and returns
/// an empty typval_T.
typval_T eval_call_provider(char *provider, char *method, list_T *arguments,
bool discard)
{
if (!eval_has_provider(provider)) {
emsgf("E319: No \"%s\" provider found. Run \":checkhealth provider\"",
@@ -10445,6 +10448,10 @@ typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
provider_call_nesting--;
assert(provider_call_nesting >= 0);
if (discard) {
tv_clear(&rettv);
}
return rettv;
}