1
0
forked from aniani/vim

patch 9.0.0390: cannot use a partial with :defer

Problem:    Cannot use a partial with :defer.
Solution:   Add the partial arguments before the other arguments.  Disallow
            using a dictionary.
This commit is contained in:
Bram Moolenaar
2022-09-05 21:21:25 +01:00
parent ccfde4d028
commit 86d87256c4
4 changed files with 57 additions and 5 deletions

View File

@@ -529,8 +529,11 @@ func Test_funcdef_alloc_failure()
bw!
endfunc
func AddDefer(arg)
call extend(g:deferred, [a:arg])
func AddDefer(arg1, ...)
call extend(g:deferred, [a:arg1])
if a:0 == 1
call extend(g:deferred, [a:1])
endif
endfunc
func WithDeferTwo()
@@ -550,6 +553,13 @@ func WithDeferOne()
call extend(g:deferred, ['end One'])
endfunc
func WithPartialDefer()
call extend(g:deferred, ['in Partial'])
let Part = funcref('AddDefer', ['arg1'])
defer Part("arg2")
call extend(g:deferred, ['end Partial'])
endfunc
func Test_defer()
let g:deferred = []
call WithDeferOne()
@@ -558,6 +568,17 @@ func Test_defer()
unlet g:deferred
call assert_equal('', glob('Xfuncdefer'))
call assert_fails('defer delete("Xfuncdefer")->Another()', 'E488:')
call assert_fails('defer delete("Xfuncdefer").member', 'E488:')
let g:deferred = []
call WithPartialDefer()
call assert_equal(['in Partial', 'end Partial', 'arg1', 'arg2'], g:deferred)
unlet g:deferred
let Part = funcref('AddDefer', ['arg1'], {})
call assert_fails('defer Part("arg2")', 'E1300:')
endfunc