0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.4323: Vim9: nested function name can start with "_"

Problem:    Vim9: nested function name can start with "_".
Solution:   Use same rule for function name for nested functions.
            (closes #9713)
This commit is contained in:
Bram Moolenaar
2022-02-07 20:30:57 +00:00
parent 7aca5ca676
commit f681cfb90b
3 changed files with 33 additions and 2 deletions

View File

@@ -679,6 +679,30 @@ def Test_nested_function()
assert_equal('ok', g:result)
unlet g:result
lines =<< trim END
vim9script
def Outer()
def _Inner()
echo 'bad'
enddef
Inner()
enddef
defcompile
END
v9.CheckScriptFailure(lines, 'E128:')
lines =<< trim END
vim9script
def Outer()
def g:inner()
echo 'bad'
enddef
Inner()
enddef
defcompile
END
v9.CheckScriptFailure(lines, 'E128:')
# nested function inside conditional
lines =<< trim END
vim9script
@@ -3135,11 +3159,11 @@ func Test_partial_call_fails()
def Iter(container: any): any
var idx = -1
var obj = {state: container}
def g:__NextItem__(self: dict<any>): any
def g:NextItem__(self: dict<any>): any
++idx
return self.state[idx]
enddef
obj.__next__ = function('g:__NextItem__', [obj])
obj.__next__ = function('g:NextItem__', [obj])
return obj
enddef

View File

@@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4323,
/**/
4322,
/**/

View File

@@ -886,6 +886,11 @@ compile_nested_function(exarg_T *eap, cctx_T *cctx, garray_T *lines_to_free)
}
if (check_defined(name_start, name_end - name_start, cctx, FALSE) == FAIL)
return NULL;
if (!ASCII_ISUPPER(is_global ? name_start[2] : name_start[0]))
{
semsg(_(e_function_name_must_start_with_capital_or_s_str), name_start);
return NULL;
}
eap->arg = name_end;
fill_exarg_from_cctx(eap, cctx);