# HG changeset patch # User Bram Moolenaar # Date 1660662903 -7200 # Node ID d19adfd545e26c20c28320cf471745777fe1207c # Parent 7e306219b233dc8734f365b12a1f6f862e048da6 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 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) diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim --- 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') diff --git a/src/userfunc.c b/src/userfunc.c --- 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; diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/vim9expr.c b/src/vim9expr.c --- 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,