/datum var/gc_destroyed //Time when this object was destroyed. var/list/active_timers //for SStimer var/list/datum_components //for /datum/components var/datum_flags = NONE var/datum/weakref/weak_reference #ifdef TESTING var/running_find_references var/last_find_references = 0 #endif #ifdef DATUMVAR_DEBUGGING_MODE var/list/cached_vars #endif // Default implementation of clean-up code. // This should be overridden to remove all references pointing to the object being destroyed. // Return the appropriate QDEL_HINT; in most cases this is QDEL_HINT_QUEUE. /datum/proc/Destroy(force=FALSE, ...) tag = null weak_reference = null //ensure prompt GCing of weakref. var/list/timers = active_timers active_timers = null for(var/thing in timers) var/datum/timedevent/timer = thing if (timer.spent) continue qdel(timer) var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] if(length(all_components)) for(var/I in all_components) var/datum/component/C = I qdel(C, FALSE, TRUE) else var/datum/component/C = all_components qdel(C, FALSE, TRUE) dc.Cut() return QDEL_HINT_QUEUE #ifdef DATUMVAR_DEBUGGING_MODE /datum/proc/save_vars() cached_vars = list() for(var/i in vars) if(i == "cached_vars") continue cached_vars[i] = vars[i] /datum/proc/check_changed_vars() . = list() for(var/i in vars) if(i == "cached_vars") continue if(cached_vars[i] != vars[i]) .[i] = list(cached_vars[i], vars[i]) /datum/proc/txt_changed_vars() var/list/l = check_changed_vars() var/t = "[src]([REF(src)]) changed vars:" for(var/i in l) t += "\"[i]\" \[[l[i][1]]\] --> \[[l[i][2]]\] " t += "." /datum/proc/to_chat_check_changed_vars(target = world) to_chat(target, txt_changed_vars()) #endif