To: vim_dev@googlegroups.com Subject: Patch 8.2.1527 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1527 Problem: Vim9: cannot use a function name as a function reference at script level. Solution: Check if a name is a function name. (closes #6789) Files: src/evalvars.c, src/testdir/test_vim9_expr.vim, src/testdir/test_vim9_script.vim *** ../vim-8.2.1526/src/evalvars.c 2020-08-21 22:36:43.666719887 +0200 --- src/evalvars.c 2020-08-27 21:25:11.880376680 +0200 *************** *** 2461,2466 **** --- 2461,2480 ---- tv = sv->sv_tv; } } + else if (in_vim9script()) + { + ufunc_T *ufunc = find_func(name, FALSE, NULL); + + if (ufunc != NULL) + { + foundFunc = TRUE; + if (rettv != NULL) + { + rettv->v_type = VAR_FUNC; + rettv->vval.v_string = vim_strsave(ufunc->uf_name); + } + } + } } if (!foundFunc) *** ../vim-8.2.1526/src/testdir/test_vim9_expr.vim 2020-08-22 22:37:17.089141677 +0200 --- src/testdir/test_vim9_expr.vim 2020-08-27 21:24:33.904481255 +0200 *************** *** 1668,1673 **** --- 1668,1684 ---- CheckScriptSuccess(lines) enddef + def Test_epxr7_funcref() + let lines =<< trim END + def RetNumber(): number + return 123 + enddef + let FuncRef = RetNumber + assert_equal(123, FuncRef()) + END + CheckDefAndScriptSuccess(lines) + enddef + def Test_expr7_dict() # dictionary assert_equal(g:dict_empty, {}) *** ../vim-8.2.1526/src/testdir/test_vim9_script.vim 2020-08-23 21:05:59.210438670 +0200 --- src/testdir/test_vim9_script.vim 2020-08-27 21:31:56.667179839 +0200 *************** *** 1684,1691 **** delete('Xscript.vim') enddef ! " Check that when searcing for "FilterFunc" it doesn't find the import in the ! " script where FastFilter() is called from. def Test_vim9script_funcref_other_script() let filterLines =<< trim END vim9script --- 1684,1692 ---- delete('Xscript.vim') enddef ! " Check that when searching for "FilterFunc" it finds the import in the ! " script where FastFilter() is called from, both as a string and as a direct ! " function reference. def Test_vim9script_funcref_other_script() let filterLines =<< trim END vim9script *************** *** 1695,1716 **** export def FastFilter(): list return range(10)->filter('FilterFunc') enddef END writefile(filterLines, 'Xfilter.vim') let lines =<< trim END vim9script ! import {FilterFunc, FastFilter} from './Xfilter.vim' def Test() let x: list = FastFilter() enddef Test() END ! writefile(lines, 'Ximport.vim') ! assert_fails('source Ximport.vim', 'E121:') ! delete('Xfilter.vim') - delete('Ximport.vim') enddef def Test_vim9script_reload_delfunc() --- 1696,1721 ---- export def FastFilter(): list return range(10)->filter('FilterFunc') enddef + export def FastFilterDirect(): list + return range(10)->filter(FilterFunc) + enddef END writefile(filterLines, 'Xfilter.vim') let lines =<< trim END vim9script ! import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' def Test() let x: list = FastFilter() enddef Test() + def TestDirect() + let x: list = FastFilterDirect() + enddef + TestDirect() END ! CheckScriptSuccess(lines) delete('Xfilter.vim') enddef def Test_vim9script_reload_delfunc() *** ../vim-8.2.1526/src/version.c 2020-08-27 16:06:43.992450446 +0200 --- src/version.c 2020-08-27 21:20:55.173043981 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1527, /**/ -- Facepalm reply #3: "I had a great time in Manhattan" "I thought you were going to New York?" /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///