[patch] E705 for funcref redefinition

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[patch] E705 for funcref redefinition

Sergey Khorev
Hi,

I've noticed the following item in Vim TODO:
Why does this give a #705 error:
let X = function('haslocaldir')
let X = function('getcwd')
Inserting "unlet X" helps.


It seems this can be easily fixed with the patch below.

diff -r aab202d244b6 src/eval.c
--- a/src/eval.c Wed Mar 10 17:16:12 2010 +0100
+++ b/src/eval.c Tue Mar 16 09:16:33 2010 +0300
@@ -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,7 @@
     EMSG2(_("E704: Funcref variable name must start with a capital:
%s"), name);
     return;
  }
- if (function_exists(name))
+ if (function_exists(name) && v == NULL)
  {
     EMSG2(_("E705: Variable name conflicts with existing function: %s"),
  name);
@@ -19120,14 +19128,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 */

--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php