Mercurial > vim
diff src/vim9compile.c @ 33366:88fa56e88cd7 v9.0.1944
patch 9.0.1944: Vim9: function instruction pointer invalidated
Commit: https://github.com/vim/vim/commit/a76fbe6e00249d25fa2cfaf80ddaa360f0e1711d
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Wed Sep 27 18:51:43 2023 +0200
patch 9.0.1944: Vim9: function instruction pointer invalidated
Problem: Vim9: function instruction pointer invalidated
Solution: Use the funcref index instead of the instruction pointer
closes: #13178
closes: #13196
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 27 Sep 2023 19:00:10 +0200 |
parents | 41b50abddeea |
children | 577ef266309d |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1029,7 +1029,7 @@ compile_nested_function(exarg_T *eap, cc ufunc_T *ufunc; int r = FAIL; compiletype_T compile_type; - isn_T *funcref_isn = NULL; + int funcref_isn_idx = -1; lvar_T *lvar = NULL; if (eap->forceit) @@ -1148,7 +1148,7 @@ compile_nested_function(exarg_T *eap, cc ASSIGN_CONST, ufunc->uf_func_type); if (lvar == NULL) goto theend; - if (generate_FUNCREF(cctx, ufunc, NULL, 0, &funcref_isn) == FAIL) + if (generate_FUNCREF(cctx, ufunc, NULL, 0, &funcref_isn_idx) == FAIL) goto theend; r = generate_STORE(cctx, ISN_STORE, lvar->lv_idx, NULL); } @@ -1178,8 +1178,12 @@ compile_nested_function(exarg_T *eap, cc #endif // If a FUNCREF instruction was generated, set the index after compiling. - if (funcref_isn != NULL && ufunc->uf_def_status == UF_COMPILED) + if (funcref_isn_idx != -1 && ufunc->uf_def_status == UF_COMPILED) + { + isn_T *funcref_isn = ((isn_T *)cctx->ctx_instr.ga_data) + + funcref_isn_idx; funcref_isn->isn_arg.funcref.fr_dfunc_idx = ufunc->uf_dfunc_idx; + } theend: vim_free(lambda_name);