mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
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>
This commit is contained in:
@@ -3954,7 +3954,7 @@ find_ex_command(
|
|||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
if (eap->cmdidx < CMD_SIZE
|
if (eap->cmdidx < CMD_SIZE
|
||||||
&& vim9
|
&& vim9
|
||||||
&& !IS_WHITE_OR_NUL(*p) && *p != '\n' && *p != '!' && *p != '|'
|
&& !IS_WHITE_NL_OR_NUL(*p) && *p != '!' && *p != '|'
|
||||||
&& (eap->cmdidx < 0 ||
|
&& (eap->cmdidx < 0 ||
|
||||||
(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
|
(cmdnames[eap->cmdidx].cmd_argt & EX_NONWHITE_OK) == 0))
|
||||||
{
|
{
|
||||||
|
@@ -1592,7 +1592,7 @@ eval_list(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int do_error)
|
|||||||
had_comma = **arg == ',';
|
had_comma = **arg == ',';
|
||||||
if (had_comma)
|
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);
|
semsg(_(e_white_space_required_after_str_str), ",", *arg);
|
||||||
goto failret;
|
goto failret;
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
*/
|
*/
|
||||||
#define VIM_ISWHITE(x) ((x) == ' ' || (x) == '\t')
|
#define VIM_ISWHITE(x) ((x) == ' ' || (x) == '\t')
|
||||||
#define IS_WHITE_OR_NUL(x) ((x) == ' ' || (x) == '\t' || (x) == NUL)
|
#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
|
* LINEEMPTY() - return TRUE if the line is empty
|
||||||
|
@@ -62,7 +62,6 @@ func Test_crash1()
|
|||||||
|
|
||||||
let file = 'crash/vim_regsub_both_poc'
|
let file = 'crash/vim_regsub_both_poc'
|
||||||
let args = printf(cmn_args, vim, file)
|
let args = printf(cmn_args, vim, file)
|
||||||
" using || because this poc causes vim to exit with exitstatus != 0
|
|
||||||
call term_sendkeys(buf, args ..
|
call term_sendkeys(buf, args ..
|
||||||
\ ' && echo "crash 7: [OK]" >> X_crash1_result.txt' .. "\<cr>")
|
\ ' && echo "crash 7: [OK]" >> X_crash1_result.txt' .. "\<cr>")
|
||||||
call TermWait(buf, 1000)
|
call TermWait(buf, 1000)
|
||||||
|
@@ -772,6 +772,33 @@ func Test_usercmd_with_block()
|
|||||||
END
|
END
|
||||||
call v9.CheckScriptFailure(lines, 'E1128:')
|
call v9.CheckScriptFailure(lines, 'E1128:')
|
||||||
delcommand BadCommand
|
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
|
endfunc
|
||||||
|
|
||||||
func Test_delcommand_buffer()
|
func Test_delcommand_buffer()
|
||||||
|
@@ -1879,7 +1879,7 @@ get_func_arguments(
|
|||||||
argp = skipwhite(argp);
|
argp = skipwhite(argp);
|
||||||
if (*argp != ',')
|
if (*argp != ',')
|
||||||
break;
|
break;
|
||||||
if (vim9script && !IS_WHITE_OR_NUL(argp[1]))
|
if (vim9script && !IS_WHITE_NL_OR_NUL(argp[1]))
|
||||||
{
|
{
|
||||||
if (evaluate)
|
if (evaluate)
|
||||||
semsg(_(e_white_space_required_after_str_str), ",", argp);
|
semsg(_(e_white_space_required_after_str_str), ",", argp);
|
||||||
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1876,
|
||||||
/**/
|
/**/
|
||||||
1875,
|
1875,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user