summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eval.c21
-rw-r--r--src/version.c2
2 files changed, 14 insertions, 9 deletions
diff --git a/src/eval.c b/src/eval.c
index f9babb3fc..ad127b5bb 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -19103,6 +19103,14 @@ set_var(name, tv, copy)
hashtab_T *ht;
char_u *p;
+ ht = find_var_ht(name, &varname);
+ if (ht == NULL || *varname == NUL)
+ {
+ EMSG2(_(e_illvar), name);
+ return;
+ }
+ v = find_var_in_ht(ht, varname, TRUE);
+
if (tv->v_type == VAR_FUNC)
{
if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
@@ -19112,7 +19120,10 @@ set_var(name, tv, copy)
EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
return;
}
- if (function_exists(name))
+ /* Don't allow hiding a function. When "v" is not NULL we migth be
+ * assigning another function to the same var, the type is checked
+ * below. */
+ if (v == NULL && function_exists(name))
{
EMSG2(_("E705: Variable name conflicts with existing function: %s"),
name);
@@ -19120,14 +19131,6 @@ set_var(name, tv, copy)
}
}
- ht = find_var_ht(name, &varname);
- if (ht == NULL || *varname == NUL)
- {
- EMSG2(_(e_illvar), name);
- return;
- }
-
- v = find_var_in_ht(ht, varname, TRUE);
if (v != NULL)
{
/* existing variable, need to clear the value */
diff --git a/src/version.c b/src/version.c
index 64e2a6067..c625dffa9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 402,
+/**/
401,
/**/
400,