Selaa lähdekoodia

Fix Godot.Object.ToString() infinite recursion

Should not be using Variant to String conversion as that would call ToString() again
Ignacio Etcheverry 6 vuotta sitten
vanhempi
commit
aa3b8f7dbb
1 muutettua tiedostoa jossa 12 lisäystä ja 1 poistoa
  1. 12 1
      modules/mono/glue/base_object_glue.cpp

+ 12 - 1
modules/mono/glue/base_object_glue.cpp

@@ -219,7 +219,18 @@ MonoBoolean godot_icall_DynamicGodotObject_SetMember(Object *p_ptr, MonoString *
 }
 }
 
 
 MonoString *godot_icall_Object_ToString(Object *p_ptr) {
 MonoString *godot_icall_Object_ToString(Object *p_ptr) {
-	return GDMonoMarshal::mono_string_from_godot(Variant(p_ptr).operator String());
+#ifdef DEBUG_ENABLED
+	// Cannot happen in C#; would get an ObjectDisposedException instead.
+	CRASH_COND(p_ptr == NULL);
+
+	if (ScriptDebugger::get_singleton() && !Object::cast_to<Reference>(p_ptr)) { // Only if debugging!
+		// Cannot happen either in C#; the handle is nullified when the object is destroyed
+		CRASH_COND(!ObjectDB::instance_validate(p_ptr));
+	}
+#endif
+
+	String result = "[" + p_ptr->get_class() + ":" + itos(p_ptr->get_instance_id()) + "]";
+	return GDMonoMarshal::mono_string_from_godot(result);
 }
 }
 
 
 void godot_register_object_icalls() {
 void godot_register_object_icalls() {