To: vim_dev@googlegroups.com Subject: Patch 8.2.1099 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1099 Problem: Vim9: cannot use line break in :cexpr argument. Solution: Check for line break. Files: src/eval.c, src/testdir/test_vim9_script.vim *** ../vim-8.2.1098/src/eval.c 2020-06-30 20:55:11.332334734 +0200 --- src/eval.c 2020-06-30 21:17:39.048857842 +0200 *************** *** 153,158 **** --- 153,170 ---- } #endif + static void + fill_evalarg_from_eap(evalarg_T *evalarg, exarg_T *eap, int skip) + { + CLEAR_FIELD(*evalarg); + evalarg->eval_flags = skip ? 0 : EVAL_EVALUATE; + if (eap != NULL && getline_equal(eap->getline, eap->cookie, getsourceline)) + { + evalarg->eval_getline = eap->getline; + evalarg->eval_cookie = eap->cookie; + } + } + /* * Top level evaluation function, returning a boolean. * Sets "error" to TRUE if there was an error. *************** *** 169,181 **** varnumber_T retval = FALSE; evalarg_T evalarg; ! CLEAR_FIELD(evalarg); ! evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE; ! if (eap != NULL && getline_equal(eap->getline, eap->cookie, getsourceline)) ! { ! evalarg.eval_getline = eap->getline; ! evalarg.eval_cookie = eap->cookie; ! } if (skip) ++emsg_skip; --- 181,187 ---- varnumber_T retval = FALSE; evalarg_T evalarg; ! fill_evalarg_from_eap(&evalarg, eap, skip); if (skip) ++emsg_skip; *************** *** 335,347 **** char_u *retval; evalarg_T evalarg; ! CLEAR_FIELD(evalarg); ! evalarg.eval_flags = skip ? 0 : EVAL_EVALUATE; ! if (eap != NULL && getline_equal(eap->getline, eap->cookie, getsourceline)) ! { ! evalarg.eval_getline = eap->getline; ! evalarg.eval_cookie = eap->cookie; ! } if (skip) ++emsg_skip; if (eval0(arg, &tv, eap, &evalarg) == FAIL || skip) --- 341,347 ---- char_u *retval; evalarg_T evalarg; ! fill_evalarg_from_eap(&evalarg, eap, skip); if (skip) ++emsg_skip; if (eval0(arg, &tv, eap, &evalarg) == FAIL || skip) *************** *** 535,546 **** eval_expr(char_u *arg, exarg_T *eap) { typval_T *tv; tv = ALLOC_ONE(typval_T); ! if (tv != NULL && eval0(arg, tv, eap, &EVALARG_EVALUATE) == FAIL) VIM_CLEAR(tv); - clear_evalarg(&EVALARG_EVALUATE, eap); return tv; } --- 535,549 ---- eval_expr(char_u *arg, exarg_T *eap) { typval_T *tv; + evalarg_T evalarg; + + fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip); tv = ALLOC_ONE(typval_T); ! if (tv != NULL && eval0(arg, tv, eap, &evalarg) == FAIL) VIM_CLEAR(tv); + clear_evalarg(&evalarg, eap); return tv; } *************** *** 5239,5251 **** int called_emsg_before = called_emsg; evalarg_T evalarg; ! CLEAR_FIELD(evalarg); ! evalarg.eval_flags = eap->skip ? 0 : EVAL_EVALUATE; ! if (getline_equal(eap->getline, eap->cookie, getsourceline)) ! { ! evalarg.eval_getline = eap->getline; ! evalarg.eval_cookie = eap->cookie; ! } if (eap->skip) ++emsg_skip; --- 5242,5248 ---- int called_emsg_before = called_emsg; evalarg_T evalarg; ! fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip); if (eap->skip) ++emsg_skip; *** ../vim-8.2.1098/src/testdir/test_vim9_script.vim 2020-06-30 20:55:11.336334711 +0200 --- src/testdir/test_vim9_script.vim 2020-06-30 21:08:36.935859185 +0200 *************** *** 599,604 **** --- 599,618 ---- CheckScriptSuccess(lines) enddef + def Test_cexpr_vimscript() + " only checks line continuation + set errorformat=File\ %f\ line\ %l + let lines =<< trim END + vim9script + cexpr 'File' + .. ' someFile' .. + ' line 19' + assert_equal(19, getqflist()[0].lnum) + END + CheckScriptSuccess(lines) + set errorformat& + enddef + if has('channel') let someJob = test_null_job() *** ../vim-8.2.1098/src/version.c 2020-06-30 20:55:11.336334711 +0200 --- src/version.c 2020-06-30 21:09:02.243723196 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1099, /**/ -- Computers make very fast, very accurate, mistakes. /// 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 ///