]> granicus.if.org Git - vim/commitdiff
patch 8.2.4886: Vim9: redir in skipped block seen as assignment v8.2.4886
authorBram Moolenaar <Bram@vim.org>
Fri, 6 May 2022 13:29:09 +0000 (14:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 6 May 2022 13:29:09 +0000 (14:29 +0100)
Problem:    Vim9: redir in skipped block seen as assignment.
Solution:   Check for valid assignment.

src/ex_docmd.c
src/testdir/test_vim9_assign.vim
src/version.c

index f78e4edf2523c439cc5b8f5e080d0d1237ae20d9..26acc07e0fa7acbfdc5c432907bff95aaeba4726 100644 (file)
@@ -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;
index 97a69701d5cd1b923cd695c632c10c11dcaa0333..36a0ba296b9e81ff321628965fc0c1a6276f1500 100644 (file)
@@ -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
index 24219311fba21fa21716a1b77f7d299123389a65..6c4aa52e688b52c1319189ecc9a2ac97cc89d9ad 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4886,
 /**/
     4885,
 /**/