diff options
author | Christian Brabandt <cb@256bit.org> | 2023-09-05 20:46:25 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-09-05 20:53:46 +0200 |
commit | 00cb247465856eaa546c520b65cf0ccc753ee1cd (patch) | |
tree | e6925577888a5fa96c3fb5ae4b68dd8c02bc0d1d | |
parent | 28a60f898d5cd7023596b0e96a081b1573edc807 (diff) |
patch 9.0.1876: Vim9: parsing commands with newlines wrongv9.0.1876
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>
-rw-r--r-- | src/ex_docmd.c | 2 | ||||
-rw-r--r-- | src/list.c | 2 | ||||
-rw-r--r-- | src/macros.h | 1 | ||||
-rw-r--r-- | src/testdir/test_crash.vim | 1 | ||||
-rw-r--r-- | src/testdir/test_usercommands.vim | 27 | ||||
-rw-r--r-- | src/userfunc.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
7 files changed, 33 insertions, 4 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 10d979d493..d4b972a2ef 100644 --- 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)) { diff --git a/src/list.c b/src/list.c index 6210fd6380..d1494c67d5 100644 --- a/src/list.c +++ b/src/list.c @@ -1592,7 +1592,7 @@ eval_list(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error) 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; diff --git a/src/macros.h b/src/macros.h index b41a81827e..d86097ced3 100644 --- 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 diff --git a/src/testdir/test_crash.vim b/src/testdir/test_crash.vim index f7b528c3e9..aa30684291 100644 --- 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) diff --git a/src/testdir/test_usercommands.vim b/src/testdir/test_usercommands.vim index 1e1856727a..e161ee63fe 100644 --- 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() diff --git a/src/userfunc.c b/src/userfunc.c index 0ebd61872d..6638849dbb 100644 --- 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); diff --git a/src/version.c b/src/version.c index f09039c64d..db11876b30 100644 --- 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, |