comparison src/eval.c @ 31633:d19377e0a0b4 v9.0.1149

patch 9.0.1149: class members may be garbage collected Commit: https://github.com/vim/vim/commit/cf760d50dceb46bd583321c210b88b92360eb959 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 5 13:16:04 2023 +0000 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.
author Bram Moolenaar <Bram@vim.org>
date Thu, 05 Jan 2023 14:30:04 +0100
parents f5bb69a83d8e
children 62237ea155d9
comparison
equal deleted inserted replaced
31632:874f82a0817c 31633:d19377e0a0b4
5672 #endif 5672 #endif
5673 break; 5673 break;
5674 } 5674 }
5675 5675
5676 case VAR_CLASS: 5676 case VAR_CLASS:
5677 // TODO: Mark methods in class_obj_methods ? 5677 {
5678 // Mark initializer expressions? 5678 class_T *cl = tv->vval.v_class;
5679 break; 5679 if (cl != NULL && cl->class_copyID != copyID)
5680 {
5681 cl->class_copyID = copyID;
5682 for (int i = 0; !abort
5683 && i < cl->class_class_member_count; ++i)
5684 abort = abort || set_ref_in_item(
5685 &cl->class_members_tv[i],
5686 copyID, ht_stack, list_stack);
5687
5688
5689 for (int i = 0; !abort
5690 && i < cl->class_class_function_count; ++i)
5691 abort = abort || set_ref_in_func(NULL,
5692 cl->class_class_functions[i], copyID);
5693
5694 for (int i = 0; !abort
5695 && i < cl->class_obj_method_count; ++i)
5696 abort = abort || set_ref_in_func(NULL,
5697 cl->class_obj_methods[i], copyID);
5698
5699 // Mark initializer expressions?
5700 }
5701 break;
5702 }
5680 5703
5681 case VAR_OBJECT: 5704 case VAR_OBJECT:
5682 { 5705 {
5683 object_T *obj = tv->vval.v_object; 5706 object_T *obj = tv->vval.v_object;
5684 if (obj != NULL && obj->obj_copyID != copyID) 5707 if (obj != NULL && obj->obj_copyID != copyID)