Mercurial > vim
changeset 29759:d19adfd545e2 v9.0.0219
patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Commit: https://github.com/vim/vim/commit/948a3894d98f5e2a6e7fc57189fe9c2a5919eebf
Author: Kota Kato <github@kat0h.com>
Date: Tue Aug 16 16:09:59 2022 +0100
patch 9.0.0219: cannot make a funcref with "s:func" in a def function
Problem: Cannot make a funcref with "s:func" in a def function in legacy
script.
Solution: Allow for using a lower case function name after "s:". (Kota Kato,
closes #10926)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 16 Aug 2022 17:15:03 +0200 |
parents | 7e306219b233 |
children | 946d96da668b |
files | src/testdir/test_vim9_func.vim src/userfunc.c src/version.c src/vim9expr.c |
diffstat | 4 files changed, 45 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim +++ b/src/testdir/test_vim9_func.vim @@ -1957,6 +1957,45 @@ def Test_call_funcref() g:listarg->assert_equal([1, 2, 3]) END v9.CheckScriptSuccess(lines) + + lines =<< trim END + function s:func(num) + return a:num * 2 + endfunction + + def s:CallFuncref() + var Funcref = function('s:func') + Funcref(3)->assert_equal(6) + enddef + call s:CallFuncref() + END + v9.CheckScriptSuccess(lines) + + lines =<< trim END + function s:func(num) + return a:num * 2 + endfunction + + def s:CallFuncref() + var Funcref = function(s:func) + Funcref(3)->assert_equal(6) + enddef + call s:CallFuncref() + END + v9.CheckScriptSuccess(lines) + + lines =<< trim END + function s:func(num) + return a:num * 2 + endfunction + + def s:CallFuncref() + var Funcref = s:func + Funcref(3)->assert_equal(6) + enddef + call s:CallFuncref() + END + v9.CheckScriptSuccess(lines) enddef let SomeFunc = function('len')
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -3995,7 +3995,8 @@ trans_function_name( { if (!vim9_local) { - if (vim9script && lead == 2 && !ASCII_ISUPPER(*lv.ll_name)) + if (vim9script && lead == 2 && !ASCII_ISUPPER(*lv.ll_name) + && current_script_is_vim9()) { semsg(_(e_function_name_must_start_with_capital_str), start); goto theend;
--- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 219, +/**/ 218, /**/ 217,
--- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -8,7 +8,7 @@ */ /* - * vim9cmds.c: Dealing with compiled function expressions + * vim9expr.c: Dealing with compiled function expressions */ #define USING_FLOAT_STUFF @@ -451,8 +451,7 @@ compile_load( vim_free(name); return FAIL; } - if (is_expr && ASCII_ISUPPER(*name) - && find_func(name, FALSE) != NULL) + if (is_expr && find_func(name, FALSE) != NULL) res = generate_funcref(cctx, name, FALSE); else res = compile_load_scriptvar(cctx, name,