patch 8.2.0056: execution stack is incomplete and inefficient
Problem: Execution stack is incomplete and inefficient.
Solution: Introduce a proper execution stack and use it instead of
sourcing_name/sourcing_lnum. Create a string only when used.
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 4d76572..382e99e 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -534,15 +534,16 @@
goto nomem;
excp->type = type;
- excp->throw_name = vim_strsave(sourcing_name == NULL
- ? (char_u *)"" : sourcing_name);
+ excp->throw_name = estack_sfile();
+ if (excp->throw_name == NULL)
+ excp->throw_name = vim_strsave((char_u *)"");
if (excp->throw_name == NULL)
{
if (should_free)
vim_free(excp->value);
goto nomem;
}
- excp->throw_lnum = sourcing_lnum;
+ excp->throw_lnum = SOURCING_LNUM;
if (p_verbose >= 13 || debug_break_level > 0)
{