]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.3836: Vim9: comment after expression not skipped to find NL v8.2.3836
authorBram Moolenaar <Bram@vim.org>
Fri, 17 Dec 2021 14:46:12 +0000 (14:46 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 17 Dec 2021 14:46:12 +0000 (14:46 +0000)
Problem:    Vim9: comment after expression not skipped to find NL.
Solution:   After evaluating an expression look for a newline after a #
            comment.

src/eval.c
src/version.c

index 61bbb1d6e48a0f8466c204636315ba75859dab99..f45cd8e772392cce69b5a5728ccec64a3b780032 100644 (file)
@@ -2222,16 +2222,35 @@ eval0(
 {
     int                ret;
     char_u     *p;
+    char_u     *expr_end;
     int                did_emsg_before = did_emsg;
     int                called_emsg_before = called_emsg;
     int                flags = evalarg == NULL ? 0 : evalarg->eval_flags;
+    int                check_for_end = TRUE;
     int                end_error = FALSE;
 
     p = skipwhite(arg);
     ret = eval1(&p, rettv, evalarg);
+    expr_end = p;
     p = skipwhite(p);
 
-    if (ret != FAIL)
+    // In Vim9 script a command block is not split at NL characters for
+    // commands using an expression argument.  Skip over a '#' comment to check
+    // for a following NL.  Require white space before the '#'.
+    if (in_vim9script() && p > expr_end)
+       while (*p == '#')
+       {
+           char_u *nl = vim_strchr(p, NL);
+
+           if (nl == NULL)
+               break;
+           p = skipwhite(nl + 1);
+           if (eap != NULL && *p != NUL)
+               eap->nextcmd = p;
+           check_for_end = FALSE;
+       }
+
+    if (ret != FAIL && check_for_end)
        end_error = !ends_excmd2(arg, p);
     if (ret == FAIL || end_error)
     {
@@ -2263,7 +2282,7 @@ eval0(
        return FAIL;
     }
 
-    if (eap != NULL)
+    if (check_for_end && eap != NULL)
        set_nextcmd(eap, p);
 
     return ret;
index 7b2c4845922a82cdfd3c462d5156cb5f9e15052d..22f97ea212edc91787f5997cb80bb9e07bb1ca1a 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3836,
 /**/
     3835,
 /**/