Patch 9.0.1149
Problem: Class members may be garbage collected.
Solution: Mark class members as being in use.
Files: src/structs.h, src/eval.c, src/testdir/test_vim9_class.vim
*** ../vim-9.0.1148/src/structs.h 2023-01-03 19:08:46.005020599 +0000
--- src/structs.h 2023-01-05 12:47:06.846955677 +0000
***************
*** 1487,1492 ****
--- 1487,1493 ----
{
char_u *class_name; // allocated
int class_refcount;
+ int class_copyID; // used by garbage collection
// class members: "static varname"
int class_class_member_count;
*** ../vim-9.0.1148/src/eval.c 2023-01-04 17:17:49.121005598 +0000
--- src/eval.c 2023-01-05 13:11:11.375333880 +0000
***************
*** 5674,5682 ****
}
case VAR_CLASS:
! // TODO: Mark methods in class_obj_methods ?
! // Mark initializer expressions?
! break;
case VAR_OBJECT:
{
--- 5674,5705 ----
}
case VAR_CLASS:
! {
! 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:
{
*** ../vim-9.0.1148/src/testdir/test_vim9_class.vim 2023-01-04
18:54:05.320172637 +0000
--- src/testdir/test_vim9_class.vim 2023-01-05 12:54:17.094239479 +0000
***************
*** 493,498 ****
--- 493,515 ----
v9.CheckScriptFailure(lines, 'E1341: Variable already declared in the
class: count')
enddef
+ func Test_class_garbagecollect()
+ let lines =<< trim END
+ vim9script
+
+ class Point
+ this.p = [2, 3]
+ static pl = ['a', 'b']
+ static pd = {a: 'a', b: 'b'}
+ endclass
+
+ echo Point.pl Point.pd
+ call test_garbagecollect_now()
+ echo Point.pl Point.pd
+ END
+ call v9.CheckScriptSuccess(lines)
+ endfunc
+
def Test_class_function()
var lines =<< trim END
vim9script
*** ../vim-9.0.1148/src/version.c 2023-01-04 18:59:53.457710839 +0000
--- src/version.c 2023-01-05 13:15:14.815939665 +0000
***************
*** 697,698 ****
--- 697,700 ----
{ /* Add new patch number below this line */
+ /**/
+ 1149,
/**/
--
SECOND SOLDIER: It could be carried by an African swallow!
FIRST SOLDIER: Oh yes! An African swallow maybe ... but not a European
swallow. that's my point.
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// \\\
\\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/20230105131635.C3C1A1C02DC%40moolenaar.net.