Mercurial > vim
diff src/vim9execute.c @ 24590:2818f846f099 v8.2.2834
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Commit: https://github.com/vim/vim/commit/5f7d4c049e934dbc8d2c3f2720797c10ee3c55c2
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed May 5 21:31:39 2021 +0200
patch 8.2.2834: Vim9: :cexpr does not work with local variables
Problem: Vim9: :cexpr does not work with local variables.
Solution: Compile :cexpr.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 05 May 2021 21:45:04 +0200 |
parents | dd87d08f86de |
children | 5c456a88f651 |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -1442,6 +1442,29 @@ exec_instructions(ectx_T *ectx) } break; + case ISN_CEXPR_AUCMD: + if (trigger_cexpr_autocmd(iptr->isn_arg.number) == FAIL) + goto on_error; + break; + + case ISN_CEXPR_CORE: + { + exarg_T ea; + int res; + + CLEAR_FIELD(ea); + ea.cmdidx = iptr->isn_arg.cexpr.cexpr_ref->cer_cmdidx; + ea.forceit = iptr->isn_arg.cexpr.cexpr_ref->cer_forceit; + ea.cmdlinep = &iptr->isn_arg.cexpr.cexpr_ref->cer_cmdline; + --ectx->ec_stack.ga_len; + tv = STACK_TV_BOT(0); + res = cexpr_core(&ea, tv); + clear_tv(tv); + if (res == FAIL) + goto on_error; + } + break; + // execute Ex command from pieces on the stack case ISN_EXECCONCAT: { @@ -4391,6 +4414,20 @@ list_instructions(char *pfx, isn_T *inst smsg("%s%4d REDIR END%s", pfx, current, iptr->isn_arg.number ? " append" : ""); break; + case ISN_CEXPR_AUCMD: + smsg("%s%4d CEXPR pre %s", pfx, current, + cexpr_get_auname(iptr->isn_arg.number)); + break; + case ISN_CEXPR_CORE: + { + cexprref_T *cer = iptr->isn_arg.cexpr.cexpr_ref; + + smsg("%s%4d CEXPR core %s%s \"%s\"", pfx, current, + cexpr_get_auname(cer->cer_cmdidx), + cer->cer_forceit ? "!" : "", + cer->cer_cmdline); + } + break; case ISN_SUBSTITUTE: { subs_T *subs = &iptr->isn_arg.subs;