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 <lambda>\d\+(_: any): number\n1 return 0\n enddef',
body)
enddef
+ def Test_lamba_block_variable()
+ var lines =<< trim END
+ vim9script
+ var flist: list<func>
+ 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<func>
+ 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<func>
+ 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 -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202107241215.16OCFT48797905%40masaka.moolenaar.net.