To: vim_dev@googlegroups.com Subject: Patch 8.2.1372 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1372 Problem: Vim9: no error for missing white space around operator. Solution: Check for white space around ? and :. Files: src/eval.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.1371/src/eval.c 2020-08-05 12:32:34.519963712 +0200 --- src/eval.c 2020-08-05 12:42:50.829677325 +0200 *************** *** 2072,2078 **** * expr2 ? expr1 : expr1 * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to the next non-white after the recognized expression. * * Note: "rettv.v_lock" is not set. * --- 2072,2078 ---- * expr2 ? expr1 : expr1 * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to just after the recognized expression. * * Note: "rettv.v_lock" is not set. * *************** *** 2111,2117 **** --- 2111,2125 ---- if (getnext) *arg = eval_next_line(evalarg_used); else + { + if (evaluate && in_vim9script() && !VIM_ISWHITE(p[-1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = p; + } result = FALSE; if (evaluate) *************** *** 2128,2133 **** --- 2136,2147 ---- /* * Get the second variable. Recursive! */ + 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_used); evalarg_used->eval_flags = result ? orig_flags : orig_flags & ~EVAL_EVALUATE; *************** *** 2148,2158 **** --- 2162,2186 ---- if (getnext) *arg = eval_next_line(evalarg_used); else + { + if (evaluate && in_vim9script() && !VIM_ISWHITE(p[-1])) + { + error_white_both(p, 1); + clear_tv(rettv); + return FAIL; + } *arg = p; + } /* * Get the third variable. Recursive! */ + 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_used); evalarg_used->eval_flags = !result ? orig_flags : orig_flags & ~EVAL_EVALUATE; *************** *** 2179,2185 **** * expr2 || expr2 || expr2 logical OR * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to the next non-white after the recognized expression. * * Return OK or FAIL. */ --- 2207,2213 ---- * expr2 || expr2 || expr2 logical OR * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to just after the recognized expression. * * Return OK or FAIL. */ *************** *** 2310,2316 **** * expr3 && expr3 && expr3 logical AND * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to the next non-white after the recognized expression. * * Return OK or FAIL. */ --- 2338,2344 ---- * expr3 && expr3 && expr3 logical AND * * "arg" must point to the first non-white of the expression. ! * "arg" is advanced to just after the recognized expression. * * Return OK or FAIL. */ *** ../vim-8.2.1371/src/testdir/test_vim9_expr.vim 2020-08-05 12:32:34.523963696 +0200 --- src/testdir/test_vim9_expr.vim 2020-08-05 12:39:17.918444490 +0200 *************** *** 60,66 **** enddef def Test_expr1_vimscript() ! # only checks line continuation let lines =<< trim END vim9script let var = 1 --- 60,66 ---- enddef def Test_expr1_vimscript() ! # check line continuation let lines =<< trim END vim9script let var = 1 *************** *** 87,92 **** --- 87,119 ---- assert_equal('no', var) END CheckScriptSuccess(lines) + + # check white space + lines =<< trim END + vim9script + let var = v:true?1:2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true? 1 : 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ?1 : 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ? 1: 2 + END + CheckScriptFailure(lines, 'E1004:') + lines =<< trim END + vim9script + let var = v:true ? 1 :2 + END + CheckScriptFailure(lines, 'E1004:') enddef func Test_expr1_fails() *** ../vim-8.2.1371/src/version.c 2020-08-05 12:32:34.523963696 +0200 --- src/version.c 2020-08-05 12:44:10.997392344 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1372, /**/ -- Statistics say that you can have a baby per month on average: Just get nine women pregnant. /// 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 ///