Mercurial > vim
changeset 26658:ed73553992bf v8.2.3858
patch 8.2.3858: Vim9: not enough tests
Commit: https://github.com/vim/vim/commit/003312b1d2ee2f4922f473b8bf50af6663c0efac
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Dec 20 10:55:35 2021 +0000
patch 8.2.3858: Vim9: not enough tests
Problem: Vim9: not enough tests.
Solution: Add tests for :try/:catch and :redir. Add missing type check.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 20 Dec 2021 12:00:04 +0100 |
parents | 2fd1f389d13c |
children | c4b51a7d535e |
files | src/testdir/test_vim9_cmd.vim src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 63 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -1558,6 +1558,23 @@ def Test_redir_to_var() redir END END CheckDefFailure(lines, 'E1141:') + + lines =<< trim END + var text: string + redir => text + echo 'hello' + redir > Xfile + redir END + END + CheckDefFailure(lines, 'E1185:') + + lines =<< trim END + var text: number + redir => text + echo 'hello' + redir END + END + CheckDefFailure(lines, 'E1012:') enddef def Test_echo_void()
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -611,15 +611,49 @@ def Test_try_catch_throw() # no requirement for spaces before | try|echo 0|catch|endtry + # return in try with finally + def ReturnInTry(): number + var ret = 4 + try + return ret + catch /this/ + return -1 + catch /that/ + return -1 + finally + # changing ret has no effect + ret = 7 + endtry + return -2 + enddef + assert_equal(4, ReturnInTry()) + + # return in catch with finally + def ReturnInCatch(): number + var ret = 5 + try + throw 'getout' + return -1 + catch /getout/ + # ret is evaluated here + return ret + finally + # changing ret later has no effect + ret = -3 + endtry + return -2 + enddef + assert_equal(5, ReturnInCatch()) + # return in finally after empty catch def ReturnInFinally(): number try finally - return 4 + return 6 endtry - return 2 + return -1 enddef - assert_equal(4, ReturnInFinally()) + assert_equal(6, ReturnInFinally()) var lines =<< trim END vim9script
--- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3858, +/**/ 3857, /**/ 3856,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -8651,7 +8651,7 @@ compile_endblock(cctx_T *cctx) } /* - * compile "try" + * Compile "try". * Creates a new scope for the try-endtry, pointing to the first catch and * finally. * Creates another scope for the "try" block itself. @@ -8722,7 +8722,7 @@ compile_try(char_u *arg, cctx_T *cctx) } /* - * compile "catch {expr}" + * Compile "catch {expr}". */ static char_u * compile_catch(char_u *arg, cctx_T *cctx UNUSED) @@ -9477,8 +9477,8 @@ compile_substitute(char_u *arg, exarg_T static char_u * compile_redir(char_u *line, exarg_T *eap, cctx_T *cctx) { - char_u *arg = eap->arg; - lhs_T *lhs = &cctx->ctx_redir_lhs; + char_u *arg = eap->arg; + lhs_T *lhs = &cctx->ctx_redir_lhs; if (lhs->lhs_name != NULL) { @@ -9534,6 +9534,9 @@ compile_redir(char_u *line, exarg_T *eap if (compile_assign_lhs(arg, lhs, CMD_redir, FALSE, FALSE, 1, cctx) == FAIL) return NULL; + if (need_type(&t_string, lhs->lhs_member_type, + -1, 0, cctx, FALSE, FALSE) == FAIL) + return NULL; generate_instr(cctx, ISN_REDIRSTART); lhs->lhs_append = append; if (lhs->lhs_has_index)