From bc6f2bf78af28c93b48906408756b797ab2fd7bd Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 6 May 2022 14:29:09 +0100 Subject: patch 8.2.4886: Vim9: redir in skipped block seen as assignment Problem: Vim9: redir in skipped block seen as assignment. Solution: Check for valid assignment. --- src/ex_docmd.c | 4 +++- src/testdir/test_vim9_assign.vim | 8 ++++++++ src/version.c | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index f78e4edf25..26acc07e0f 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3683,6 +3683,7 @@ find_ex_command( // "&opt = expr" // "var = expr" where "var" is a variable name or we are skipping // (variable declaration might have been skipped). + // Not "redir => var" (when skipping). oplen = assignment_len(skipwhite(p), &heredoc); if (oplen > 0) { @@ -3690,7 +3691,8 @@ find_ex_command( || *eap->cmd == '&' || *eap->cmd == '$' || *eap->cmd == '@' - || eap->skip + || (eap->skip && IS_WHITE_OR_NUL( + *(skipwhite(p) + oplen))) || lookup(eap->cmd, p - eap->cmd, TRUE, cctx) == OK) { eap->cmdidx = CMD_var; diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 97a69701d5..36a0ba296b 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -739,6 +739,14 @@ def Test_init_in_for_loop() v9.CheckDefAndScriptSuccess(lines) enddef +def Test_redir_is_not_assign() + if false + redir => res + echo var_job + redir END + endif +enddef + def Test_extend_list() # using uninitialized list assigns empty list var lines =<< trim END diff --git a/src/version.c b/src/version.c index 24219311fb..6c4aa52e68 100644 --- a/src/version.c +++ b/src/version.c @@ -746,6 +746,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4886, /**/ 4885, /**/ -- cgit v1.2.3