]> granicus.if.org Git - vim/commitdiff
patch 8.2.1371: Vim9: no error for missing white space around operator v8.2.1371
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 10:32:38 +0000 (12:32 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Aug 2020 10:32:38 +0000 (12:32 +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 6411ffa146bdf05af2ab169333fbc9b79482241c..a9c36ac38c11536d563ac1dafb60f2e4f648c611 100644 (file)
@@ -2242,11 +2242,25 @@ eval2(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, 2);
+                   clear_tv(rettv);
+                   return FAIL;
+               }
                *arg = p;
+           }
 
            /*
             * Get the second variable.
             */
+           if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
+           {
+               error_white_both(p, 2);
+               clear_tv(rettv);
+               return FAIL;
+           }
            *arg = skipwhite_and_linebreak(*arg + 2, evalarg_used);
            evalarg_used->eval_flags = !result ? orig_flags
                                                 : orig_flags & ~EVAL_EVALUATE;
@@ -2359,11 +2373,25 @@ eval3(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, 2);
+                   clear_tv(rettv);
+                   return FAIL;
+               }
                *arg = p;
+           }
 
            /*
             * Get the second variable.
             */
+           if (evaluate && in_vim9script() && !IS_WHITE_OR_NUL((*arg)[2]))
+           {
+               error_white_both(p, 2);
+               clear_tv(rettv);
+               return FAIL;
+           }
            *arg = skipwhite_and_linebreak(*arg + 2, evalarg_used);
            evalarg_used->eval_flags = result ? orig_flags
                                                 : orig_flags & ~EVAL_EVALUATE;
index aa7aed72a19856b27c5df0cb6c98c39be6e31bae..70813377b561171df9eef88bb3692f794496eda0 100644 (file)
@@ -175,6 +175,23 @@ def Test_expr2_vimscript()
   END
   CheckScriptSuccess(lines)
 
+  # check white space
+  lines =<< trim END
+      vim9script
+      let var = v:true||v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      let var = v:true ||v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      let var = v:true|| v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+
   # check keeping the value
   lines =<< trim END
       vim9script
@@ -279,6 +296,23 @@ def Test_expr3_vimscript()
   END
   CheckScriptSuccess(lines)
 
+  # check white space
+  lines =<< trim END
+      vim9script
+      let var = v:true&&v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      let var = v:true &&v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+  lines =<< trim END
+      vim9script
+      let var = v:true&& v:true
+  END
+  CheckScriptFailure(lines, 'E1004:')
+
   # check keeping the value
   lines =<< trim END
       vim9script
index 5246d84c2e711c430dce2ab53983ae2bb9c63f2e..9d06cd20e3efb6d2175b4af53fe497e9891982c9 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1371,
 /**/
     1370,
 /**/