0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

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.
This commit is contained in:
Bram Moolenaar
2021-12-17 14:46:12 +00:00
parent 259f443a93
commit 02929a372e
2 changed files with 23 additions and 2 deletions

View 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;