To: vim_dev@googlegroups.com Subject: Patch 8.2.3209 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3209 Problem: Vim9: lambda doesn't find block-local variable. Solution: Adjust how a script-local variable is found. (closes #8614) Files: src/vim9compile.c, src/testdir/test_vim9_func.vim *** ../vim-8.2.3208/src/vim9compile.c 2021-07-24 13:18:43.861887612 +0200 --- src/vim9compile.c 2021-07-24 14:08:47.007729983 +0200 *************** *** 339,344 **** --- 339,345 ---- hashitem_T *hi; int cc; sallvar_T *sav; + sallvar_T *found_sav; ufunc_T *ufunc; // Find the list of all script variables with the right name. *************** *** 361,366 **** --- 362,368 ---- // Go over the variables with this name and find one that was visible // from the function. ufunc = cctx->ctx_ufunc; + found_sav = sav; while (sav != NULL) { int idx; *************** *** 373,379 **** sav = sav->sav_next; } ! return NULL; } /* --- 375,382 ---- sav = sav->sav_next; } ! // Not found, assume variable at script level was visible. ! return found_sav; } /* *** ../vim-8.2.3208/src/testdir/test_vim9_func.vim 2021-07-21 20:38:43.283635192 +0200 --- src/testdir/test_vim9_func.vim 2021-07-24 14:13:44.699038696 +0200 *************** *** 2352,2357 **** --- 2352,2393 ---- assert_match('def \d\+(_: any): number\n1 return 0\n enddef', body) enddef + def Test_lamba_block_variable() + var lines =<< trim END + vim9script + var flist: list + for i in range(10) + var inloop = i + flist[i] = () => inloop + endfor + END + CheckScriptSuccess(lines) + + lines =<< trim END + vim9script + if true + var outloop = 5 + var flist: list + for i in range(10) + flist[i] = () => outloop + endfor + endif + END + CheckScriptSuccess(lines) + + lines =<< trim END + vim9script + if true + var outloop = 5 + endif + var flist: list + for i in range(10) + flist[i] = () => outloop + endfor + END + CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1) + enddef + def Test_legacy_lambda() legacy echo {x -> 'hello ' .. x}('foo') *** ../vim-8.2.3208/src/version.c 2021-07-24 13:57:25.481296527 +0200 --- src/version.c 2021-07-24 14:14:06.550987862 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3209, /**/ -- If evolution theories are correct, humans will soon grow a third hand for operating the mouse. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///