Mercurial > vim
changeset 27593:8c7836f8668d v8.2.4323
patch 8.2.4323: Vim9: nested function name can start with "_"
Commit: https://github.com/vim/vim/commit/f681cfb90b972cb347b3d707c87e48f8accd0e2a
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Feb 7 20:30:57 2022 +0000
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 07 Feb 2022 21:45:02 +0100 |
parents | 9203ba0e764a |
children | 02d1da50e9d4 |
files | src/testdir/test_vim9_func.vim src/version.c src/vim9compile.c |
diffstat | 3 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -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
--- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4323, +/**/ 4322, /**/ 4321,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -886,6 +886,11 @@ compile_nested_function(exarg_T *eap, cc } 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);