Mercurial > vim
diff src/vim9execute.c @ 24541:df90c61c306c v8.2.2810
patch 8.2.2810: Vim9: crash when calling a function in a substitute expression
Commit: https://github.com/vim/vim/commit/d386e923c751f389b2ac038ff2cb7b40035f8cc6
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Apr 25 14:48:49 2021 +0200
patch 8.2.2810: Vim9: crash when calling a function in a substitute expression
Problem: Vim9: crash when calling a function in a substitute expression.
Solution: Set the instructions back to the substitute expression
instrunctions. (closes #8148)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 25 Apr 2021 15:00:04 +0200 |
parents | e7577f79d6eb |
children | fe29b220eece |
line wrap: on
line diff
--- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -601,6 +601,12 @@ func_return(ectx_T *ectx) + STACK_FRAME_IDX_OFF)->vval.v_number; ectx->ec_instr = INSTRUCTIONS(prev_dfunc); + // If the call was inside an ISN_SUBSTITUTE instruction need to use its + // list of instructions. + if (ectx->ec_instr[ectx->ec_iidx - 1].isn_type == ISN_SUBSTITUTE) + ectx->ec_instr = ectx->ec_instr[ectx->ec_iidx - 1] + .isn_arg.subs.subs_instr; + if (floc == NULL) ectx->ec_funclocal.floc_restore_cmdmod = FALSE; else