]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1063: Vim9: no line break allowed before || or && v8.2.1063
authorBram Moolenaar <Bram@vim.org>
Fri, 26 Jun 2020 19:38:51 +0000 (21:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 26 Jun 2020 19:38:51 +0000 (21:38 +0200)
Problem:    Vim9: no line break allowed before || or &&.
Solution:   Check for operator after line break.

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

index fe53632df9eba668003a28d5882e823c0c9c72b5..9f06fd8d71b5eebe564a752e50e37c059954b453 100644 (file)
@@ -1991,6 +1991,8 @@ eval1(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
     static int
 eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
 {
+    char_u     *p;
+    int                getnext;
     typval_T   var2;
     long       result;
     int                first;
@@ -2007,12 +2009,16 @@ eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
      */
     first = TRUE;
     result = FALSE;
-    while ((*arg)[0] == '|' && (*arg)[1] == '|')
+    p = eval_next_non_blank(*arg, evalarg, &getnext);
+    while (p[0] == '|' && p[1] == '|')
     {
        evalarg_T   nested_evalarg;
        int         evaluate;
        int         orig_flags;
 
+       if (getnext)
+           *arg = eval_next_line(evalarg);
+
        if (evalarg == NULL)
        {
            CLEAR_FIELD(nested_evalarg);
@@ -2061,6 +2067,8 @@ eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
            rettv->v_type = VAR_NUMBER;
            rettv->vval.v_number = result;
        }
+
+       p = eval_next_non_blank(*arg, evalarg, &getnext);
     }
 
     return OK;
@@ -2078,6 +2086,8 @@ eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
     static int
 eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
 {
+    char_u     *p;
+    int                getnext;
     typval_T   var2;
     long       result;
     int                first;
@@ -2094,12 +2104,16 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
      */
     first = TRUE;
     result = TRUE;
-    while ((*arg)[0] == '&' && (*arg)[1] == '&')
+    p = eval_next_non_blank(*arg, evalarg, &getnext);
+    while (p[0] == '&' && p[1] == '&')
     {
        evalarg_T   nested_evalarg;
        int         orig_flags;
        int         evaluate;
 
+       if (getnext)
+           *arg = eval_next_line(evalarg);
+
        if (evalarg == NULL)
        {
            CLEAR_FIELD(nested_evalarg);
@@ -2147,6 +2161,8 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
            rettv->v_type = VAR_NUMBER;
            rettv->vval.v_number = result;
        }
+
+       p = eval_next_non_blank(*arg, evalarg, &getnext);
     }
 
     return OK;
index 566af673ff7a76d53be4ec2030940f12cdf9f7b8..dcdaeb240357556c4638b15cdb4f3535be24f73e 100644 (file)
@@ -117,6 +117,26 @@ def Test_expr2()
   assert_equal([[], '', 0], g:vals)
 enddef
 
+def Test_expr2_vimscript()
+  " only checks line continuation
+  let lines =<< trim END
+      vim9script
+      let var = 0
+               || 1
+      assert_equal(1, var)
+  END
+  CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      let var = v:false
+               || v:true
+               || v:false
+      assert_equal(1, var)
+  END
+  CheckScriptSuccess(lines)
+enddef
+
 func Test_expr2_fails()
   let msg = "white space required before and after '||'"
   call CheckDefFailure(["let x = 1||2"], msg)
@@ -160,6 +180,26 @@ def Test_expr3()
   assert_equal([[1], 'z', 0], g:vals)
 enddef
 
+def Test_expr3_vimscript()
+  " only checks line continuation
+  let lines =<< trim END
+      vim9script
+      let var = 0
+               && 1
+      assert_equal(0, var)
+  END
+  CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      let var = v:true
+               && v:true
+               && v:true
+      assert_equal(1, var)
+  END
+  CheckScriptSuccess(lines)
+enddef
+
 func Test_expr3_fails()
   let msg = "white space required before and after '&&'"
   call CheckDefFailure(["let x = 1&&2"], msg)
index a97b40acef10ba2c895ba73dcf5744ce5c5c0e02..bdb43fcc574b5e979971ac7429dc9df0e174548b 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1063,
 /**/
     1062,
 /**/