updated for version 7.2.402
Problem: This gives a #705 error: let X = function('haslocaldir')
let X = function('getcwd')
Solution: Don't give E705 when the name is found in the hashtab. (Sergey
Khorev)
diff --git a/src/eval.c b/src/eval.c
index f9babb3..ad127b5 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -19103,6 +19103,14 @@
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 @@
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 @@
}
}
- 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 */