From d57b09e47bb229b164ac34a408207882635b541b Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 21 Jun 2016 19:34:45 -0300 Subject: [PATCH] Better support in ScriptLanguage for GC based scripts --- core/reference.cpp | 14 ++++++++++++-- core/script_language.h | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/reference.cpp b/core/reference.cpp index 90bafd0a9c4..34f36a57350 100644 --- a/core/reference.cpp +++ b/core/reference.cpp @@ -27,7 +27,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "reference.h" - +#include "script_language.h" bool Reference::init_ref() { @@ -66,11 +66,21 @@ int Reference::reference_get_count() const { void Reference::reference(){ refcount.ref(); + if (get_script_instance()) { + get_script_instance()->refcount_incremented(); + } } bool Reference::unreference(){ - return refcount.unref(); + bool die = refcount.unref(); + + if (get_script_instance()) { + die = die && get_script_instance()->refcount_decremented(); + } + + return die; + } Reference::Reference() { diff --git a/core/script_language.h b/core/script_language.h index 478ebd88ed0..ceaa8624634 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -129,6 +129,9 @@ public: virtual void notification(int p_notification)=0; + virtual void refcount_incremented() {} + virtual bool refcount_decremented() { return true; } //return true if it can die + virtual Ref