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.
|
* 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
|
* When "op" is not NULL it points to a string with characters that
|
||||||
* must appear after the variable(s). Use "+", "-" or "." for add, subtract
|
* must appear after the variable(s). Use "+", "-" or "." for add, subtract
|
||||||
@@ -3179,6 +3179,7 @@ set_var_const(
|
|||||||
|
|
||||||
if (di != NULL)
|
if (di != NULL)
|
||||||
{
|
{
|
||||||
|
// Item already exists. Allowed to replace when reloading.
|
||||||
if ((di->di_flags & DI_FLAGS_RELOAD) == 0)
|
if ((di->di_flags & DI_FLAGS_RELOAD) == 0)
|
||||||
{
|
{
|
||||||
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
|
if (flags & (ASSIGN_CONST | ASSIGN_FINAL))
|
||||||
@@ -3269,6 +3270,14 @@ set_var_const(
|
|||||||
}
|
}
|
||||||
else
|
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
|
// add a new variable
|
||||||
if (vim9script && is_script_local && (flags & ASSIGN_NO_DECL))
|
if (vim9script && is_script_local && (flags & ASSIGN_NO_DECL))
|
||||||
{
|
{
|
||||||
|
@@ -1515,6 +1515,17 @@ def Test_script_reload_change_type()
|
|||||||
delete('Xreload.vim')
|
delete('Xreload.vim')
|
||||||
enddef
|
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
|
def s:RetSome(): string
|
||||||
return 'some'
|
return 'some'
|
||||||
enddef
|
enddef
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2567,
|
||||||
/**/
|
/**/
|
||||||
2566,
|
2566,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user