summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/userfunc.c15
-rw-r--r--src/version.c2
2 files changed, 7 insertions, 10 deletions
diff --git a/src/userfunc.c b/src/userfunc.c
index 7366fc5cd..3f9171d2e 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1501,6 +1501,10 @@ call_func(
int argv_base = 0;
partial_T *partial = funcexe->partial;
+ // Initialize rettv so that it is safe for caller to invoke clear_tv(rettv)
+ // even when call_func() returns FAIL.
+ rettv->v_type = VAR_UNKNOWN;
+
// Make a copy of the name, if it comes from a funcref variable it could
// be changed or deleted in the called function.
name = len > 0 ? vim_strnsave(funcname, len) : vim_strsave(funcname);
@@ -1530,16 +1534,7 @@ call_func(
}
}
- /*
- * Execute the function if executing and no errors were detected.
- */
- if (!funcexe->evaluate)
- {
- // Not evaluating, which means the return value is unknown. This
- // matters for giving error messages.
- rettv->v_type = VAR_UNKNOWN;
- }
- else if (error == ERROR_NONE)
+ if (error == ERROR_NONE && funcexe->evaluate)
{
char_u *rfname = fname;
diff --git a/src/version.c b/src/version.c
index c6bf6c5c6..96e0b40bb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1938,
+/**/
1937,
/**/
1936,