changeset 26614:d9425f5d4b20 v8.2.3836

patch 8.2.3836: Vim9: comment after expression not skipped to find NL Commit: https://github.com/vim/vim/commit/02929a372e5e14db1b85abdc7d4515d6b2d81888 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Dec 17 14:46:12 2021 +0000 patch 8.2.3836: Vim9: comment after expression not skipped to find NL Problem: Vim9: comment after expression not skipped to find NL. Solution: After evaluating an expression look for a newline after a # comment.
author Bram Moolenaar <Bram@vim.org>
date Fri, 17 Dec 2021 16:00:05 +0100
parents 7f6ae3111d34
children d549244ead36
files src/eval.c src/version.c
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -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;
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3836,
+/**/
     3835,
 /**/
     3834,