changeset 33193:256febd1cbf0 v9.0.1876

patch 9.0.1876: Vim9: parsing commands with newlines wrong Commit: https://github.com/vim/vim/commit/00cb247465856eaa546c520b65cf0ccc753ee1cd Author: Christian Brabandt <cb@256bit.org> Date: Tue Sep 5 20:46:25 2023 +0200 patch 9.0.1876: Vim9: parsing commands with newlines wrong Problem: Vim9: parsing commands with newlines wrong Solution: Accept a '\n' for parsing lists and command arguments closes: #13015 closes: #13020 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 05 Sep 2023 21:00:03 +0200
parents efd072489401
children ea714e01275b
files src/ex_docmd.c src/list.c src/macros.h src/testdir/test_crash.vim src/testdir/test_usercommands.vim src/userfunc.c src/version.c
diffstat 7 files changed, 33 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3954,7 +3954,7 @@ find_ex_command(
 #ifdef FEAT_EVAL
     if (eap->cmdidx < CMD_SIZE
 	    && vim9
-	    && !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!' && *p != '|'
+	    && !IS_WHITE_NL_OR_NUL(*p) && *p != '!' && *p != '|'
 	    && (eap->cmdidx < 0 ||
 		(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
     {
--- a/src/list.c
+++ b/src/list.c
@@ -1592,7 +1592,7 @@ eval_list(char_u **arg, typval_T *rettv,
 	had_comma = **arg == ',';
 	if (had_comma)
 	{
-	    if (vim9script && !IS_WHITE_OR_NUL((*arg)[1]) && (*arg)[1] != ']')
+	    if (vim9script && !IS_WHITE_NL_OR_NUL((*arg)[1]) && (*arg)[1] != ']')
 	    {
 		semsg(_(e_white_space_required_after_str_str), ",", *arg);
 		goto failret;
--- a/src/macros.h
+++ b/src/macros.h
@@ -43,6 +43,7 @@
  */
 #define VIM_ISWHITE(x)		((x) == ' ' || (x) == '\t')
 #define IS_WHITE_OR_NUL(x)	((x) == ' ' || (x) == '\t' || (x) == NUL)
+#define IS_WHITE_NL_OR_NUL(x)	((x) == ' ' || (x) == '\t' || (x) == '\n' || (x) == NUL)
 
 /*
  * LINEEMPTY() - return TRUE if the line is empty
--- a/src/testdir/test_crash.vim
+++ b/src/testdir/test_crash.vim
@@ -62,7 +62,6 @@ func Test_crash1()
 
   let file = 'crash/vim_regsub_both_poc'
   let args = printf(cmn_args, vim, file)
-  " using || because this poc causes vim to exit with exitstatus != 0
   call term_sendkeys(buf, args ..
     \ '  && echo "crash 7: [OK]" >> X_crash1_result.txt' .. "\<cr>")
   call TermWait(buf, 1000)
--- a/src/testdir/test_usercommands.vim
+++ b/src/testdir/test_usercommands.vim
@@ -772,6 +772,33 @@ func Test_usercmd_with_block()
   END
   call v9.CheckScriptFailure(lines, 'E1128:')
   delcommand BadCommand
+
+  let lines =<< trim END
+	  vim9script
+    command Cmd {
+        g:result = [1,
+        2]
+    }
+    Cmd
+  END
+  call v9.CheckScriptSuccess(lines)
+  call assert_equal([1, 2], g:result)
+  delcommand Cmd
+	unlet! g:result
+
+  let lines =<< trim END
+		vim9script
+		command Cmd {
+			g:result = and(0x80,
+			0x80)
+    }
+    Cmd
+  END
+  call v9.CheckScriptSuccess(lines)
+  call assert_equal(128, g:result)
+  delcommand Cmd
+	unlet! g:result
+
 endfunc
 
 func Test_delcommand_buffer()
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1879,7 +1879,7 @@ get_func_arguments(
 	    argp = skipwhite(argp);
 	if (*argp != ',')
 	    break;
-	if (vim9script && !IS_WHITE_OR_NUL(argp[1]))
+	if (vim9script && !IS_WHITE_NL_OR_NUL(argp[1]))
 	{
 	    if (evaluate)
 		semsg(_(e_white_space_required_after_str_str), ",", argp);
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1876,
+/**/
     1875,
 /**/
     1874,