1
0
forked from aniani/vim

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.
This commit is contained in:
Bram Moolenaar
2021-11-28 22:00:12 +00:00
parent f566666e88
commit 38453528c3
8 changed files with 83 additions and 29 deletions

View File

@@ -586,15 +586,19 @@ def Test_func_with_comments()
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:')
@@ -702,6 +706,26 @@ def Test_nested_global_function()
END
CheckScriptSuccess(lines)
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()