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:
23
src/eval.c
23
src/eval.c
@@ -2222,16 +2222,35 @@ eval0(
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
|
char_u *expr_end;
|
||||||
int did_emsg_before = did_emsg;
|
int did_emsg_before = did_emsg;
|
||||||
int called_emsg_before = called_emsg;
|
int called_emsg_before = called_emsg;
|
||||||
int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
|
int flags = evalarg == NULL ? 0 : evalarg->eval_flags;
|
||||||
|
int check_for_end = TRUE;
|
||||||
int end_error = FALSE;
|
int end_error = FALSE;
|
||||||
|
|
||||||
p = skipwhite(arg);
|
p = skipwhite(arg);
|
||||||
ret = eval1(&p, rettv, evalarg);
|
ret = eval1(&p, rettv, evalarg);
|
||||||
|
expr_end = p;
|
||||||
p = skipwhite(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);
|
end_error = !ends_excmd2(arg, p);
|
||||||
if (ret == FAIL || end_error)
|
if (ret == FAIL || end_error)
|
||||||
{
|
{
|
||||||
@@ -2263,7 +2282,7 @@ eval0(
|
|||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eap != NULL)
|
if (check_for_end && eap != NULL)
|
||||||
set_nextcmd(eap, p);
|
set_nextcmd(eap, p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -749,6 +749,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 */
|
||||||
|
/**/
|
||||||
|
3836,
|
||||||
/**/
|
/**/
|
||||||
3835,
|
3835,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user