Browse Source

Better support in ScriptLanguage for GC based scripts

Juan Linietsky 9 years ago
parent
commit
d57b09e47b
2 changed files with 15 additions and 2 deletions
  1. 12 2
      core/reference.cpp
  2. 3 0
      core/script_language.h

+ 12 - 2
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() {

+ 3 - 0
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<Script> get_script() const=0;
 
 	virtual bool is_placeholder() const { return false; }