forked from aniani/vim
patch 8.2.1365: Vim9: no error for missing white space around operator
Problem: Vim9: no error for missing white space around operator. Solution: Check for white space. (closes #6618)
This commit is contained in:
27
src/eval.c
27
src/eval.c
@@ -2574,6 +2574,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
||||
int getnext;
|
||||
char_u *p;
|
||||
int op;
|
||||
int oplen;
|
||||
int concat;
|
||||
typval_T var2;
|
||||
|
||||
@@ -2584,11 +2585,19 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
||||
if (op != '+' && op != '-' && !concat)
|
||||
break;
|
||||
|
||||
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
|
||||
if (getnext)
|
||||
*arg = eval_next_line(evalarg);
|
||||
else
|
||||
{
|
||||
if (evaluate && in_vim9script() && !VIM_ISWHITE(**arg))
|
||||
{
|
||||
error_white_both(p, 1);
|
||||
clear_tv(rettv);
|
||||
return FAIL;
|
||||
}
|
||||
*arg = p;
|
||||
evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
|
||||
}
|
||||
if ((op != '+' || (rettv->v_type != VAR_LIST
|
||||
&& rettv->v_type != VAR_BLOB))
|
||||
#ifdef FEAT_FLOAT
|
||||
@@ -2613,9 +2622,14 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
|
||||
/*
|
||||
* Get the second variable.
|
||||
*/
|
||||
if (op == '.' && *(*arg + 1) == '.') // .. string concatenation
|
||||
++*arg;
|
||||
*arg = skipwhite_and_linebreak(*arg + 1, evalarg);
|
||||
oplen = (op == '.' && *(*arg + 1) == '.') ? 2 : 1;
|
||||
if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[oplen]))
|
||||
{
|
||||
error_white_both(p, oplen);
|
||||
clear_tv(rettv);
|
||||
return FAIL;
|
||||
}
|
||||
*arg = skipwhite_and_linebreak(*arg + oplen, evalarg);
|
||||
if (eval6(arg, &var2, evalarg, op == '.') == FAIL)
|
||||
{
|
||||
clear_tv(rettv);
|
||||
@@ -3358,6 +3372,7 @@ eval_method(
|
||||
}
|
||||
else
|
||||
{
|
||||
*arg = skipwhite(*arg);
|
||||
if (**arg != '(')
|
||||
{
|
||||
if (verbose)
|
||||
@@ -4841,7 +4856,7 @@ get_env_len(char_u **arg)
|
||||
|
||||
/*
|
||||
* Get the length of the name of a function or internal variable.
|
||||
* "arg" is advanced to the first non-white character after the name.
|
||||
* "arg" is advanced to after the name.
|
||||
* Return 0 if something is wrong.
|
||||
*/
|
||||
int
|
||||
@@ -4867,7 +4882,7 @@ get_id_len(char_u **arg)
|
||||
return 0;
|
||||
|
||||
len = (int)(p - *arg);
|
||||
*arg = skipwhite(p);
|
||||
*arg = p;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
Reference in New Issue
Block a user