summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-03-17 19:53:49 +0100
committerBram Moolenaar <Bram@vim.org>2010-03-17 19:53:49 +0100
commitbaff0fec3f3c250bde59796d94a3fd10979e3b66 (patch)
tree39b1f98f0334a528bc464f2dfb46839b00772d1b /src/eval.c
parentb91e59b0f3b68913dba2042a55b8a50c8ddf50fb (diff)
downloadvim-git-baff0fec3f3c250bde59796d94a3fd10979e3b66.tar.gz
updated for version 7.2.402v7.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)
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c21
1 files changed, 12 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 */