patch 8.2.2617: Vim9: script variable in block not found by function
Problem: Vim9: script variable in a block scope not found by a nested
function.
Solution: Copy the block scope IDs before compiling the function.
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 6258b7d..73d8e37 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -393,7 +393,6 @@
CheckDefFailure(lines, 'E1117:')
# nested function inside conditional
- # TODO: should it work when "thecount" is inside the "if"?
lines =<< trim END
vim9script
var thecount = 0
@@ -411,6 +410,25 @@
assert_equal(2, Test())
END
CheckScriptSuccess(lines)
+
+ # also works when "thecount" is inside the "if" block
+ lines =<< trim END
+ vim9script
+ if true
+ var thecount = 0
+ def Test(): number
+ def TheFunc(): number
+ thecount += 1
+ return thecount
+ enddef
+ return TheFunc()
+ enddef
+ endif
+ defcompile
+ assert_equal(1, Test())
+ assert_equal(2, Test())
+ END
+ CheckScriptSuccess(lines)
enddef
def Test_not_nested_function()