To: vim_dev@googlegroups.com Subject: Patch 8.2.1063 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1063 Problem: Vim9: no line break allowed before || or &&. Solution: Check for operator after line break. Files: src/eval.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.1062/src/eval.c 2020-06-26 21:28:22.008863411 +0200 --- src/eval.c 2020-06-26 21:32:13.304254326 +0200 *************** *** 1991,1996 **** --- 1991,1998 ---- 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,2018 **** */ first = TRUE; result = FALSE; ! while ((*arg)[0] == '|' && (*arg)[1] == '|') { evalarg_T nested_evalarg; int evaluate; int orig_flags; if (evalarg == NULL) { CLEAR_FIELD(nested_evalarg); --- 2009,2024 ---- */ first = TRUE; result = FALSE; ! 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,2066 **** --- 2067,2074 ---- rettv->v_type = VAR_NUMBER; rettv->vval.v_number = result; } + + p = eval_next_non_blank(*arg, evalarg, &getnext); } return OK; *************** *** 2078,2083 **** --- 2086,2093 ---- 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,2105 **** */ first = TRUE; result = TRUE; ! while ((*arg)[0] == '&' && (*arg)[1] == '&') { evalarg_T nested_evalarg; int orig_flags; int evaluate; if (evalarg == NULL) { CLEAR_FIELD(nested_evalarg); --- 2104,2119 ---- */ first = TRUE; result = TRUE; ! 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,2152 **** --- 2161,2168 ---- rettv->v_type = VAR_NUMBER; rettv->vval.v_number = result; } + + p = eval_next_non_blank(*arg, evalarg, &getnext); } return OK; *** ../vim-8.2.1062/src/testdir/test_vim9_expr.vim 2020-06-26 21:28:22.012863401 +0200 --- src/testdir/test_vim9_expr.vim 2020-06-26 21:34:53.039900980 +0200 *************** *** 117,122 **** --- 117,142 ---- 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,165 **** --- 180,205 ---- 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) *** ../vim-8.2.1062/src/version.c 2020-06-26 21:28:22.012863401 +0200 --- src/version.c 2020-06-26 21:32:52.248170613 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1063, /**/ -- "Software is like sex... it's better when it's free." -- Linus Torvalds, initiator of the free Linux OS Makes me wonder what FSF stands for...? /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///