diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2024-03-22 19:37:29 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-03-22 19:37:29 +0100 |
commit | 5d77364e4afe69b28f6d8b3493595c5c6fc056b8 (patch) | |
tree | 396b20268dea90b39b78b925551373c5efe98260 /src | |
parent | 8e37daf620d951ce13187f62dd8a03c7abc4fb22 (diff) |
patch 9.1.0197: Vim9: problem evaluating negated boolean logicv9.1.0197
Problem: Vim9: problem evaluating negated boolean logic
(lxhillwind)
Solution: Don't clear the first value on short circuit evaluation
(Yegappan Lakshmanan)
fixes: #14265
closes: #14269
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 27 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9expr.c | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index 6285ba124a..7764b3791b 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -311,6 +311,33 @@ def Test_expr2() assert_equal([1], g:vals) END v9.CheckDefAndScriptSuccess(lines) + + # test the short-circuit operation + lines =<< trim END + assert_equal(true, true && true) + assert_equal(false, true && !true) + assert_equal(false, !true && true) + assert_equal(false, !true && !true) + + assert_equal(true, true || true) + assert_equal(true, true || !true) + assert_equal(true, !true || true) + assert_equal(false, !true || !true) + + assert_equal(false, false && false) + assert_equal(false, false && !false) + assert_equal(false, !false && false) + assert_equal(true, !false && !false) + + assert_equal(false, false || false) + assert_equal(true, false || !false) + assert_equal(true, !false || false) + assert_equal(true, !false || !false) + + assert_equal(false, !true && !true && !true) + assert_equal(true, !false || !false || !false) + END + v9.CheckDefAndScriptSuccess(lines) enddef def Test_expr2_vimscript() diff --git a/src/version.c b/src/version.c index ad9f6e1dfa..2c1cd161c9 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 197, +/**/ 196, /**/ 195, diff --git a/src/vim9expr.c b/src/vim9expr.c index ee9712bfd9..9d67aead59 100644 --- a/src/vim9expr.c +++ b/src/vim9expr.c @@ -2779,7 +2779,7 @@ compile_expr9( if (compile_subscript(arg, cctx, start_leader, &end_leader, ppconst) == FAIL) return FAIL; - if (ppconst->pp_used > 0) + if ((ppconst->pp_used > 0) && (cctx->ctx_skip != SKIP_YES)) { // apply the '!', '-' and '+' before the constant rettv = &ppconst->pp_tv[ppconst->pp_used - 1]; |