changeset 2119:111554354870 v7.2.402

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)
author Bram Moolenaar <bram@zimbu.org>
date Wed, 17 Mar 2010 19:53:49 +0100
parents 63bf37c1e7a2
children f63ace015c63
files src/eval.c src/version.c
diffstat 2 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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 */
--- 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,