patch 9.0.1609: crash when an object indirectly references itself
Problem: Crash when an object indirectly references itself.
Solution: Avoid clearing an object while it is already being cleared.
(closes #12494)
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 52812ea..1d0d77b 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -925,6 +925,33 @@
echo Point.pl Point.pd
END
call v9.CheckScriptSuccess(lines)
+
+ let lines =<< trim END
+ vim9script
+
+ interface View
+ endinterface
+
+ class Widget
+ this.view: View
+ endclass
+
+ class MyView implements View
+ this.widget: Widget
+
+ def new()
+ # this will result in a circular reference to this object
+ this.widget = Widget.new(this)
+ enddef
+ endclass
+
+ var view = MyView.new()
+
+ # overwrite "view", will be garbage-collected next
+ view = MyView.new()
+ test_garbagecollect_now()
+ END
+ call v9.CheckScriptSuccess(lines)
endfunc
def Test_class_function()