Problem: Vim9: function unreferenced while called is never deleted.
Solution: Delete a function when no longer referenced.
ufunc_T *find_func(char_u *name, int is_global, cctx_T *cctx);
int func_is_global(ufunc_T *ufunc);
int func_name_refcount(char_u *name);
+void func_clear_free(ufunc_T *fp, int force);
int copy_func(char_u *lambda, char_u *global, ectx_T *ectx);
int funcdepth_increment(void);
void funcdepth_decrement(void);
* Free all things that a function contains and free the function itself.
* When "force" is TRUE we are exiting.
*/
- static void
+ void
func_clear_free(ufunc_T *fp, int force)
{
func_clear(fp, force);
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 3753,
/**/
3752,
/**/
estack_pop();
current_sctx = save_current_sctx;
- // TODO: when is it safe to delete the function if it is no longer used?
- --ufunc->uf_calls;
+ if (--ufunc->uf_calls <= 0 && ufunc->uf_refcount <= 0)
+ // Function was unreferenced while being used, free it now.
+ func_clear_free(ufunc, FALSE);
if (*msg_list != NULL && saved_msg_list != NULL)
{