1
0
forked from aniani/vim

patch 8.2.4573: a nested function is compiled for debugging without context

Problem:    A nested function (closure) is compiled for debugging without
            context.
Solution:   Check if a nested function is marked for debugging before
            compiling it.  Give an error when trying to compile a closure
            without its context. (closes #9951)
This commit is contained in:
Bram Moolenaar
2022-03-15 15:57:04 +00:00
parent 1a572e9b3b
commit 96923b7a14
6 changed files with 24 additions and 1 deletions

View File

@@ -1007,6 +1007,14 @@ compile_lambda(char_u **arg, cctx_T *cctx)
)
compile_def_function(ufunc, FALSE, CT_NONE, cctx);
// if the outer function is not compiled for debugging, this one might be
if (cctx->ctx_compile_type != CT_DEBUG)
{
update_has_breakpoint(ufunc);
if (COMPILE_TYPE(ufunc) == CT_DEBUG)
compile_def_function(ufunc, FALSE, CT_DEBUG, cctx);
}
// The last entry in evalarg.eval_tofree_ga is a copy of the last line and
// "*arg" may point into it. Point into the original line to avoid a
// dangling pointer.