0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.1368: Vim9: no error for missing white space around operator

Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around <, !=, etc.
This commit is contained in:
Bram Moolenaar 2020-08-05 11:51:30 +02:00
parent b4caa163ff
commit ff1cd39cfe
3 changed files with 53 additions and 5 deletions

View File

@ -2422,7 +2422,7 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
* var1 isnot var2 * var1 isnot var2
* *
* "arg" must point to the first non-white of the expression. * "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression. * "arg" is advanced to just after the recognized expression.
* *
* Return OK or FAIL. * Return OK or FAIL.
*/ */
@ -2452,9 +2452,17 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
typval_T var2; typval_T var2;
int ic; int ic;
int vim9script = in_vim9script(); int vim9script = in_vim9script();
int evaluate = evalarg == NULL
? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
if (getnext) if (getnext)
*arg = eval_next_line(evalarg); *arg = eval_next_line(evalarg);
else if (evaluate && vim9script && !VIM_ISWHITE(**arg))
{
error_white_both(p, len);
clear_tv(rettv);
return FAIL;
}
if (vim9script && type_is && (p[len] == '?' || p[len] == '#')) if (vim9script && type_is && (p[len] == '?' || p[len] == '#'))
{ {
@ -2482,13 +2490,19 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
/* /*
* Get the second variable. * Get the second variable.
*/ */
if (evaluate && vim9script && !IS_WHITE_OR_NUL(p[len]))
{
error_white_both(p, 1);
clear_tv(rettv);
return FAIL;
}
*arg = skipwhite_and_linebreak(p + len, evalarg); *arg = skipwhite_and_linebreak(p + len, evalarg);
if (eval5(arg, &var2, evalarg) == FAIL) if (eval5(arg, &var2, evalarg) == FAIL)
{ {
clear_tv(rettv); clear_tv(rettv);
return FAIL; return FAIL;
} }
if (evalarg != NULL && (evalarg->eval_flags & EVAL_EVALUATE)) if (evaluate)
{ {
int ret; int ret;
@ -2552,7 +2566,7 @@ eval_addlist(typval_T *tv1, typval_T *tv2)
* .. string concatenation * .. string concatenation
* *
* "arg" must point to the first non-white of the expression. * "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression. * "arg" is advanced to just after the recognized expression.
* *
* Return OK or FAIL. * Return OK or FAIL.
*/ */
@ -2754,7 +2768,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
* % number modulo * % number modulo
* *
* "arg" must point to the first non-white of the expression. * "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression. * "arg" is advanced to just after the recognized expression.
* *
* Return OK or FAIL. * Return OK or FAIL.
*/ */
@ -2956,7 +2970,7 @@ eval6(
* trailing ->name() method call * trailing ->name() method call
* *
* "arg" must point to the first non-white of the expression. * "arg" must point to the first non-white of the expression.
* "arg" is advanced to the next non-white after the recognized expression. * "arg" is advanced to just after the recognized expression.
* *
* Return OK or FAIL. * Return OK or FAIL.
*/ */

View File

@ -726,6 +726,38 @@ def Test_expr4_vimscript()
set noignorecase set noignorecase
END END
CheckScriptSuccess(lines) CheckScriptSuccess(lines)
# check missing white space
lines =<< trim END
vim9script
echo 2>3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2 >3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2> 3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2!=3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2 !=3
END
CheckScriptFailure(lines, 'E1004:')
lines =<< trim END
vim9script
echo 2!= 3
END
CheckScriptFailure(lines, 'E1004:')
enddef enddef
func Test_expr4_fails() func Test_expr4_fails()

View File

@ -754,6 +754,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 */
/**/
1368,
/**/ /**/
1367, 1367,
/**/ /**/