patch 8.2.3692: Vim9: cannot use :func inside a :def function
Problem: Vim9: cannot use :func inside a :def function.
Solution: Make it work.
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 34f84f2..51b95ab 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -586,15 +586,19 @@
enddef
def Test_nested_function()
- def Nested(arg: string): string
+ def NestedDef(arg: string): string
return 'nested ' .. arg
enddef
- Nested('function')->assert_equal('nested function')
+ NestedDef(':def')->assert_equal('nested :def')
+
+ func NestedFunc(arg)
+ return 'nested ' .. a:arg
+ endfunc
+ NestedFunc(':func')->assert_equal('nested :func')
CheckDefFailure(['def Nested()', 'enddef', 'Nested(66)'], 'E118:')
CheckDefFailure(['def Nested(arg: string)', 'enddef', 'Nested()'], 'E119:')
- CheckDefFailure(['func Nested()', 'endfunc'], 'E1086:')
CheckDefFailure(['def s:Nested()', 'enddef'], 'E1075:')
CheckDefFailure(['def b:Nested()', 'enddef'], 'E1075:')
@@ -705,6 +709,26 @@
lines =<< trim END
vim9script
def Outer()
+ func g:Inner()
+ return 'inner'
+ endfunc
+ enddef
+ defcompile
+ Outer()
+ g:Inner()->assert_equal('inner')
+ delfunc g:Inner
+ Outer()
+ g:Inner()->assert_equal('inner')
+ delfunc g:Inner
+ Outer()
+ g:Inner()->assert_equal('inner')
+ delfunc g:Inner
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ def Outer()
def g:Inner(): string
return 'inner'
enddef