comparison src/testdir/test_vim9_func.vim @ 25344:d1fcd9c14a93 v8.2.3209

patch 8.2.3209: Vim9: lambda doesn't find block-local variable Commit: https://github.com/vim/vim/commit/88421d6dc812a2f3b0eab34740f174c9558cb734 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jul 24 14:14:52 2021 +0200 patch 8.2.3209: Vim9: lambda doesn't find block-local variable Problem: Vim9: lambda doesn't find block-local variable. Solution: Adjust how a script-local variable is found. (closes https://github.com/vim/vim/issues/8614)
author Bram Moolenaar <Bram@vim.org>
date Sat, 24 Jul 2021 14:15:04 +0200
parents 0716cc2e4a8b
children d52504ef26ed
comparison
equal deleted inserted replaced
25343:f182fac1243e 25344:d1fcd9c14a93
2350 ->substitute("')", '', '') 2350 ->substitute("')", '', '')
2351 ->substitute('function\zs', ' ', '')) 2351 ->substitute('function\zs', ' ', ''))
2352 assert_match('def <lambda>\d\+(_: any): number\n1 return 0\n enddef', body) 2352 assert_match('def <lambda>\d\+(_: any): number\n1 return 0\n enddef', body)
2353 enddef 2353 enddef
2354 2354
2355 def Test_lamba_block_variable()
2356 var lines =<< trim END
2357 vim9script
2358 var flist: list<func>
2359 for i in range(10)
2360 var inloop = i
2361 flist[i] = () => inloop
2362 endfor
2363 END
2364 CheckScriptSuccess(lines)
2365
2366 lines =<< trim END
2367 vim9script
2368 if true
2369 var outloop = 5
2370 var flist: list<func>
2371 for i in range(10)
2372 flist[i] = () => outloop
2373 endfor
2374 endif
2375 END
2376 CheckScriptSuccess(lines)
2377
2378 lines =<< trim END
2379 vim9script
2380 if true
2381 var outloop = 5
2382 endif
2383 var flist: list<func>
2384 for i in range(10)
2385 flist[i] = () => outloop
2386 endfor
2387 END
2388 CheckScriptFailure(lines, 'E1001: Variable not found: outloop', 1)
2389 enddef
2390
2355 def Test_legacy_lambda() 2391 def Test_legacy_lambda()
2356 legacy echo {x -> 'hello ' .. x}('foo') 2392 legacy echo {x -> 'hello ' .. x}('foo')
2357 2393
2358 var lines =<< trim END 2394 var lines =<< trim END
2359 echo {x -> 'hello ' .. x}('foo') 2395 echo {x -> 'hello ' .. x}('foo')