forked from aniani/vim
patch 8.2.2567: Vim9: no error if variable is defined for existing function
Problem: Vim9: no error if variable is defined for existing function. Solution: Check if name isn't already in use. (closes #7897)
This commit is contained in:
@@ -909,7 +909,7 @@ ex_let(exarg_T *eap)
|
||||
}
|
||||
|
||||
/*
|
||||
* Assign the typevalue "tv" to the variable or variables at "arg_start".
|
||||
* Assign the typeval "tv" to the variable or variables at "arg_start".
|
||||
* Handles both "var" with any type and "[var, var; var]" with a list type.
|
||||
* When "op" is not NULL it points to a string with characters that
|
||||
* must appear after the variable(s). Use "+", "-" or "." for add, subtract
|
||||
@@ -3179,6 +3179,7 @@ set_var_const(
|
||||
|
||||
if (di != NULL)
|
||||
{
|
||||
// Item already exists. Allowed to replace when reloading.
|
||||
if ((di->di_flags & DI_FLAGS_RELOAD) == 0)
|
||||
{
|
||||
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
|
||||
@@ -3269,6 +3270,14 @@ set_var_const(
|
||||
}
|
||||
else
|
||||
{
|
||||
// Item not found, check if a function already exists.
|
||||
if (is_script_local && (flags & (ASSIGN_NO_DECL | ASSIGN_DECL)) == 0
|
||||
&& lookup_scriptitem(name, STRLEN(name), NULL) == OK)
|
||||
{
|
||||
semsg(_(e_redefining_script_item_str), name);
|
||||
goto failed;
|
||||
}
|
||||
|
||||
// add a new variable
|
||||
if (vim9script && is_script_local && (flags & ASSIGN_NO_DECL))
|
||||
{
|
||||
|
@@ -1515,6 +1515,17 @@ def Test_script_reload_change_type()
|
||||
delete('Xreload.vim')
|
||||
enddef
|
||||
|
||||
def Test_script_var_shadows_function()
|
||||
var lines =<< trim END
|
||||
vim9script
|
||||
def Func(): number
|
||||
return 123
|
||||
enddef
|
||||
var Func = 1
|
||||
END
|
||||
CheckScriptFailure(lines, 'E1041:', 5)
|
||||
enddef
|
||||
|
||||
def s:RetSome(): string
|
||||
return 'some'
|
||||
enddef
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2567,
|
||||
/**/
|
||||
2566,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user