]> granicus.if.org Git - vim/commitdiff
patch 8.2.1368: Vim9: no error for missing white space around operator v8.2.1368
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 09:51:30 +0000 (11:51 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 09:51:30 +0000 (11:51 +0200)
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around <, !=, etc.

src/eval.c
src/testdir/test_vim9_expr.vim
src/version.c

index b8367e0cfbc60f0ce257034c7bcb29f05a6cec0d..6411ffa146bdf05af2ab169333fbc9b79482241c 100644 (file)
@@ -2422,7 +2422,7 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
  *     var1 isnot var2
  *
  * "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.
  */
@@ -2452,9 +2452,17 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
        typval_T    var2;
        int         ic;
        int         vim9script = in_vim9script();
+       int         evaluate = evalarg == NULL
+                                  ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
 
        if (getnext)
            *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] == '#'))
        {
@@ -2482,13 +2490,19 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
        /*
         * 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);
        if (eval5(arg, &var2, evalarg) == FAIL)
        {
            clear_tv(rettv);
            return FAIL;
        }
-       if (evalarg != NULL && (evalarg->eval_flags & EVAL_EVALUATE))
+       if (evaluate)
        {
            int ret;
 
@@ -2552,7 +2566,7 @@ eval_addlist(typval_T *tv1, typval_T *tv2)
  *     ..      string concatenation
  *
  * "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.
  */
@@ -2754,7 +2768,7 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
  *     %       number modulo
  *
  * "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.
  */
@@ -2956,7 +2970,7 @@ eval6(
  *  trailing ->name()  method call
  *
  * "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.
  */
index ab274a10dfa024d264ca136a7f7cb742675d7a3b..aa7aed72a19856b27c5df0cb6c98c39be6e31bae 100644 (file)
@@ -726,6 +726,38 @@ def Test_expr4_vimscript()
     set noignorecase
   END
   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
 
 func Test_expr4_fails()
index 7ec5d2d2e4eff97bcdd5c4771918326484d89179..2609eb7e08d9e11d9469d0f07d33fd6a46a4f5ef 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1368,
 /**/
     1367,
 /**/