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)
diff --git a/src/vim9execute.c b/src/vim9execute.c
index c90fb65..7f6ce5f 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -601,6 +601,12 @@
+ 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