Mercurial > vim
changeset 23096:b6aadb0b3a56 v8.2.2094
patch 8.2.2094: when an expression fails getting next command may be wrong
Commit: https://github.com/vim/vim/commit/d0fe620cbbf5f5e00446efa89893036265c5c302
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Dec 5 17:11:12 2020 +0100
patch 8.2.2094: when an expression fails getting next command may be wrong
Problem: When an expression fails getting the next command may be wrong.
Solution: Do not check for a next command after :eval fails. (closes https://github.com/vim/vim/issues/7415)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 05 Dec 2020 17:15:03 +0100 |
parents | 211188403293 |
children | 409258cef9ec |
files | src/eval.c src/testdir/test_vim9_cmd.vim src/version.c |
diffstat | 3 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/eval.c +++ b/src/eval.c @@ -2156,7 +2156,10 @@ eval0( && called_emsg == called_emsg_before && (flags & EVAL_CONSTANT) == 0) semsg(_(e_invexpr2), arg); - ret = FAIL; + + // Some of the expression may not have been consumed. Do not check for + // a next command to avoid more errors. + return FAIL; } if (eap != NULL)
--- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -558,6 +558,19 @@ def Test_eval_command() ->Increment() assert_equal(111 + 3 + 4 + 5, g:val) unlet g:val + + var lines =<< trim END + vim9script + g:caught = 'no' + try + eval 123 || 0 + catch + g:caught = 'yes' + endtry + assert_equal('yes', g:caught) + unlet g:caught + END + CheckScriptSuccess(lines) enddef def Test_map_command()