vim-patch:8.0.0184: fix ex-mode exit code #7943

Problem:    When in Ex mode and an error is caught by try-catch, Vim still
            exits with a non-zero exit code.
Solution:   Don't set ex_exitval when inside a try-catch. (partly by Christian
            Brabandt)

2b7bc567b9
This commit is contained in:
sohnryang
2018-01-31 19:45:04 +09:00
committed by Justin M. Keyes
parent 131aad953c
commit f50ce7d510
2 changed files with 39 additions and 3 deletions

View File

@@ -487,9 +487,6 @@ int emsg(const char_u *s_)
}
called_emsg = true;
if (emsg_silent == 0) {
ex_exitval = 1;
}
// If "emsg_severe" is TRUE: When an error exception is to be thrown,
// prefer this message over previous messages for the same command.
@@ -540,6 +537,8 @@ int emsg(const char_u *s_)
return true;
}
ex_exitval = 1;
// Reset msg_silent, an error causes messages to be switched back on.
msg_silent = 0;
cmd_silent = FALSE;

View File

@@ -46,3 +46,40 @@ function! Test_System()
call assert_fails('call system("wc -l", 99999)', 'E86:')
endfunction
function! Test_system_exmode()
let cmd=" -es --headless -u NONE -c 'source Xscript' +q; echo $?"
" Need to put this in a script, "catch" isn't found after an unknown
" function.
call writefile(['try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript')
let a = system(v:progpath . cmd)
call assert_equal('0', a[0])
call assert_equal(0, v:shell_error)
" Error before try does set error flag.
call writefile(['call nosuchfunction()', 'try', 'call doesnotexist()', 'catch', 'endtry'], 'Xscript')
let a = system(v:progpath . cmd)
call assert_notequal('0', a[0])
let cmd=" -es --headless -u NONE -c 'source Xscript' +q"
let a = system(v:progpath . cmd)
call assert_notequal(0, v:shell_error)
let cmd=" -es --headless -u NONE -c 'call doesnotexist()' +q; echo $?"
let a = system(v:progpath. cmd)
call assert_notequal(0, a[0])
let cmd=" -es --headless -u NONE -c 'call doesnotexist()' +q"
let a = system(v:progpath. cmd)
call assert_notequal(0, v:shell_error)
let cmd=" -es --headless -u NONE -c 'call doesnotexist()|let a=1' +q; echo $?"
let a = system(v:progpath. cmd)
call assert_notequal(0, a[0])
let cmd=" -es --headless -u NONE -c 'call doesnotexist()|let a=1' +q"
let a = system(v:progpath. cmd)
call assert_notequal(0, v:shell_error)
call delete('Xscript')
endfunc