0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.0.1149: class members may be garbage collected

Problem:    Class members may be garbage collected.
Solution:   Mark class members as being in use.
This commit is contained in:
Bram Moolenaar
2023-01-05 13:16:04 +00:00
parent 2468add0b8
commit cf760d50dc
4 changed files with 46 additions and 3 deletions

View File

@@ -5674,9 +5674,32 @@ set_ref_in_item(
}
case VAR_CLASS:
// TODO: Mark methods in class_obj_methods ?
// Mark initializer expressions?
break;
{
class_T *cl = tv->vval.v_class;
if (cl != NULL && cl->class_copyID != copyID)
{
cl->class_copyID = copyID;
for (int i = 0; !abort
&& i < cl->class_class_member_count; ++i)
abort = abort || set_ref_in_item(
&cl->class_members_tv[i],
copyID, ht_stack, list_stack);
for (int i = 0; !abort
&& i < cl->class_class_function_count; ++i)
abort = abort || set_ref_in_func(NULL,
cl->class_class_functions[i], copyID);
for (int i = 0; !abort
&& i < cl->class_obj_method_count; ++i)
abort = abort || set_ref_in_func(NULL,
cl->class_obj_methods[i], copyID);
// Mark initializer expressions?
}
break;
}
case VAR_OBJECT:
{