]> granicus.if.org Git - vim/commitdiff
patch 8.2.1367: Vim9: no error for missing white space around operator v8.2.1367
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 09:36:52 +0000 (11:36 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 09:36:52 +0000 (11:36 +0200)
Problem:    Vim9: no error for missing white space around operator.
Solution:   Check for white space around *, / and %.

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

index 3c4e5bdefc26bc92c4d47ac77ea665d0e265afbc..b8367e0cfbc60f0ce257034c7bcb29f05a6cec0d 100644 (file)
@@ -2586,13 +2586,14 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
            break;
 
        evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
+       oplen = (concat && p[1] == '.') ? 2 : 1;
        if (getnext)
            *arg = eval_next_line(evalarg);
        else
        {
            if (evaluate && in_vim9script() && !VIM_ISWHITE(**arg))
            {
-               error_white_both(p, 1);
+               error_white_both(p, oplen);
                clear_tv(rettv);
                return FAIL;
            }
@@ -2622,7 +2623,6 @@ eval5(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
        /*
         * Get the second variable.
         */
-       oplen = (op == '.' && *(*arg + 1) == '.') ? 2 : 1;
        if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[oplen]))
        {
            error_white_both(p, oplen);
@@ -2796,17 +2796,25 @@ eval6(
        if (op != '*' && op != '/' && op != '%')
            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;
+       }
 
 #ifdef FEAT_FLOAT
        f1 = 0;
        f2 = 0;
 #endif
        error = FALSE;
-       evaluate = evalarg == NULL ? 0 : (evalarg->eval_flags & EVAL_EVALUATE);
        if (evaluate)
        {
 #ifdef FEAT_FLOAT
@@ -2829,7 +2837,13 @@ eval6(
        /*
         * Get the second variable.
         */
-       *arg = skipwhite(*arg + 1);
+       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);
        if (eval7(arg, &var2, evalarg, FALSE) == FAIL)
            return FAIL;
 
index 7e53a287d5ca099f42cbd8ea590008e47acbc46d..ab274a10dfa024d264ca136a7f7cb742675d7a3b 100644 (file)
@@ -841,6 +841,15 @@ def Test_expr5_vim9script()
   END
   CheckScriptSuccess(lines)
 
+  lines =<< trim END
+      vim9script
+      let var = 11 +
+                 77 -
+                 22
+      assert_equal(66, var)
+  END
+  CheckScriptSuccess(lines)
+
   lines =<< trim END
       vim9script
       let var = 'one'
@@ -999,7 +1008,7 @@ def Test_expr6()
 enddef
 
 def Test_expr6_vim9script()
-  # only checks line continuation
+  # check line continuation
   let lines =<< trim END
       vim9script
       let var = 11
@@ -1016,6 +1025,32 @@ def Test_expr6_vim9script()
       assert_equal(5, var)
   END
   CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      let var = 11 *
+               22 /
+               3
+      assert_equal(80, var)
+  END
+  CheckScriptSuccess(lines)
+
+  # check white space
+  lines =<< trim END
+      vim9script
+      echo 5*6
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      echo 5 *6
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      echo 5* 6
+  END
+  CheckScriptFailure(lines, 'E1004:')
 enddef
 
 def Test_expr6_float()
index 97bdb24c074cc2c8ea5ec03bf52bf1e3d9ce2ea8..7ec5d2d2e4eff97bcdd5c4771918326484d89179 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1367,
 /**/
     1366,
 /**/