diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-14 14:13:12 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-04-14 16:10:09 +0800 |
commit | 78dd6100b1b00e4a30d389fccc3c7770132e91a4 (patch) | |
tree | 8e3f4a47561a6ee907a69244511e08bc73f35e27 | |
parent | ff963d699bd8113913d3511c7b4ea1621eae8a06 (diff) | |
download | rneovim-78dd6100b1b00e4a30d389fccc3c7770132e91a4.tar.gz rneovim-78dd6100b1b00e4a30d389fccc3c7770132e91a4.tar.bz2 rneovim-78dd6100b1b00e4a30d389fccc3c7770132e91a4.zip |
vim-patch:8.2.1099: Vim9: cannot use line break in :cexpr argument
Problem: Vim9: cannot use line break in :cexpr argument.
Solution: Check for line break.
https://github.com/vim/vim/commit/37c837119579ff70b005a4e54c2e26ca42b74022
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/eval.c | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 1a2268504c..5944cebf4c 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -692,6 +692,15 @@ void eval_patch(const char *const origfile, const char *const difffile, const ch set_vim_var_string(VV_FNAME_OUT, NULL, -1); } +static void fill_evalarg_from_eap(evalarg_T *evalarg, exarg_T *eap, bool skip) +{ + *evalarg = (evalarg_T){ .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. /// @@ -702,14 +711,9 @@ int eval_to_bool(char *arg, bool *error, exarg_T *eap, int skip) { typval_T tv; bool retval = false; + evalarg_T evalarg; - evalarg_T 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; - } + fill_evalarg_from_eap(&evalarg, eap, skip); if (skip) { emsg_skip++; @@ -836,14 +840,9 @@ char *eval_to_string_skip(char *arg, exarg_T *eap, const bool skip) { typval_T tv; char *retval; + evalarg_T evalarg; - evalarg_T 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; - } + fill_evalarg_from_eap(&evalarg, eap, skip); if (skip) { emsg_skip++; } @@ -976,10 +975,15 @@ varnumber_T eval_to_number(char *expr) typval_T *eval_expr(char *arg, exarg_T *eap) { typval_T *tv = xmalloc(sizeof(*tv)); - if (eval0(arg, tv, eap, &EVALARG_EVALUATE) == FAIL) { + evalarg_T evalarg; + + fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip); + + if (eval0(arg, tv, eap, &evalarg) == FAIL) { XFREE_CLEAR(tv); } - clear_evalarg(&EVALARG_EVALUATE, eap); + + clear_evalarg(&evalarg, eap); return tv; } @@ -7476,14 +7480,9 @@ void ex_echo(exarg_T *eap) bool need_clear = true; const int did_emsg_before = did_emsg; const int called_emsg_before = called_emsg; + evalarg_T evalarg; - evalarg_T 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; - } + fill_evalarg_from_eap(&evalarg, eap, eap != NULL && eap->skip); if (eap->skip) { emsg_skip++; |