diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-05 12:44:41 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-05 12:44:41 +0200 |
commit | fdac71c5075062f97f77044e9619fa5c907e0327 (patch) | |
tree | 921f26225586ac1b903d3a6b0b58065010f7310d | |
parent | 3c1c9fd94bc80871119a8519f3b881595082a6c0 (diff) | |
download | vim-git-fdac71c5075062f97f77044e9619fa5c907e0327.tar.gz |
patch 8.2.1372: Vim9: no error for missing white space around operatorv8.2.1372
Problem: Vim9: no error for missing white space around operator.
Solution: Check for white space around ? and :.
-rw-r--r-- | src/eval.c | 34 | ||||
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 29 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 61 insertions, 4 deletions
diff --git a/src/eval.c b/src/eval.c index a9c36ac38..a7f6086ef 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2072,7 +2072,7 @@ eval0( * expr2 ? expr1 : expr1 * * "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. * * Note: "rettv.v_lock" is not set. * @@ -2111,7 +2111,15 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg) if (getnext) *arg = eval_next_line(evalarg_used); else + { + if (evaluate && in_vim9script() && !VIM_ISWHITE(p[-1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = p; + } result = FALSE; if (evaluate) @@ -2128,6 +2136,12 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg) /* * Get the second variable. Recursive! */ + if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = skipwhite_and_linebreak(*arg + 1, evalarg_used); evalarg_used->eval_flags = result ? orig_flags : orig_flags & ~EVAL_EVALUATE; @@ -2148,11 +2162,25 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg) if (getnext) *arg = eval_next_line(evalarg_used); else + { + if (evaluate && in_vim9script() && !VIM_ISWHITE(p[-1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = p; + } /* * Get the third variable. Recursive! */ + if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = skipwhite_and_linebreak(*arg + 1, evalarg_used); evalarg_used->eval_flags = !result ? orig_flags : orig_flags & ~EVAL_EVALUATE; @@ -2179,7 +2207,7 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg) * expr2 || expr2 || expr2 logical OR * * "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. */ @@ -2310,7 +2338,7 @@ eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg) * expr3 && expr3 && expr3 logical AND * * "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. */ diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index 70813377b..8be0dea36 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -60,7 +60,7 @@ def Test_expr1() enddef def Test_expr1_vimscript() - # only checks line continuation + # check line continuation let lines =<< trim END vim9script let var = 1 @@ -87,6 +87,33 @@ def Test_expr1_vimscript() assert_equal('no', var) END CheckScriptSuccess(lines) + + # check white space + lines =<< trim END + vim9script + let var = v:true?1:2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true? 1 : 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ?1 : 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ? 1: 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ? 1 :2 + END + CheckScriptFailure(lines, 'E1004:') enddef func Test_expr1_fails() diff --git a/src/version.c b/src/version.c index 9d06cd20e..1e23a08ad 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1372, +/**/ 1371, /**/ 1370, |