mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:9.0.1468: recursively calling :defer function if it does :qa
Problem: Recursively calling :defer function if it does :qa in a compiled
function.
Solution: Clear the defer entry before calling the function. (closes vim/vim#12271)
a1f2b5ddc6
This commit is contained in:
parent
8e0ad6e261
commit
a11849abdf
@ -609,33 +609,56 @@ func Test_defer_throw()
|
||||
call assert_false(filereadable('XDeleteTwo'))
|
||||
endfunc
|
||||
|
||||
func Test_defer_quitall()
|
||||
func Test_defer_quitall_func()
|
||||
let lines =<< trim END
|
||||
" vim9script
|
||||
func DeferLevelTwo()
|
||||
call writefile(['text'], 'XQuitallTwo', 'D')
|
||||
call writefile(['quit'], 'XQuitallThree', 'a')
|
||||
call writefile(['text'], 'XQuitallFuncTwo', 'D')
|
||||
call writefile(['quit'], 'XQuitallFuncThree', 'a')
|
||||
qa!
|
||||
endfunc
|
||||
|
||||
" def DeferLevelOne()
|
||||
func DeferLevelOne()
|
||||
call writefile(['text'], 'XQuitallOne', 'D')
|
||||
call DeferLevelTwo()
|
||||
" enddef
|
||||
call writefile(['text'], 'XQuitalFunclOne', 'D')
|
||||
defer DeferLevelTwo()
|
||||
endfunc
|
||||
|
||||
" DeferLevelOne()
|
||||
call DeferLevelOne()
|
||||
END
|
||||
call writefile(lines, 'XdeferQuitall', 'D')
|
||||
let res = system(GetVimCommand() .. ' -X -S XdeferQuitall')
|
||||
call writefile(lines, 'XdeferQuitallFunc', 'D')
|
||||
call system(GetVimCommand() .. ' -X -S XdeferQuitallFunc')
|
||||
call assert_equal(0, v:shell_error)
|
||||
call assert_false(filereadable('XQuitallOne'))
|
||||
call assert_false(filereadable('XQuitallTwo'))
|
||||
call assert_equal(['quit'], readfile('XQuitallThree'))
|
||||
call assert_false(filereadable('XQuitallFuncOne'))
|
||||
call assert_false(filereadable('XQuitallFuncTwo'))
|
||||
call assert_equal(['quit'], readfile('XQuitallFuncThree'))
|
||||
|
||||
call delete('XQuitallThree')
|
||||
call delete('XQuitallFuncThree')
|
||||
endfunc
|
||||
|
||||
func Test_defer_quitall_def()
|
||||
throw 'Skipped: Vim9 script is N/A'
|
||||
let lines =<< trim END
|
||||
vim9script
|
||||
def DeferLevelTwo()
|
||||
call writefile(['text'], 'XQuitallDefTwo', 'D')
|
||||
call writefile(['quit'], 'XQuitallDefThree', 'a')
|
||||
qa!
|
||||
enddef
|
||||
|
||||
def DeferLevelOne()
|
||||
call writefile(['text'], 'XQuitallDefOne', 'D')
|
||||
defer DeferLevelTwo()
|
||||
enddef
|
||||
|
||||
DeferLevelOne()
|
||||
END
|
||||
call writefile(lines, 'XdeferQuitallDef', 'D')
|
||||
call system(GetVimCommand() .. ' -X -S XdeferQuitallDef')
|
||||
call assert_equal(0, v:shell_error)
|
||||
call assert_false(filereadable('XQuitallDefOne'))
|
||||
call assert_false(filereadable('XQuitallDefTwo'))
|
||||
call assert_equal(['quit'], readfile('XQuitallDefThree'))
|
||||
|
||||
call delete('XQuitallDefThree')
|
||||
endfunc
|
||||
|
||||
func Test_defer_quitall_in_expr_func()
|
||||
@ -655,7 +678,7 @@ func Test_defer_quitall_in_expr_func()
|
||||
call Test_defer_in_funcref()
|
||||
END
|
||||
call writefile(lines, 'XdeferQuitallExpr', 'D')
|
||||
let res = system(GetVimCommand() .. ' -X -S XdeferQuitallExpr')
|
||||
call system(GetVimCommand() .. ' -X -S XdeferQuitallExpr')
|
||||
call assert_equal(0, v:shell_error)
|
||||
call assert_false(filereadable('Xentry0'))
|
||||
call assert_false(filereadable('Xentry1'))
|
||||
|
Loading…
Reference in New Issue
Block a user