mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-24 05:36:57 +01:00
Fixes #5712: error handler and decl runtimes
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
/****************
|
||||
* Debug Support *
|
||||
****************/
|
||||
var/datum/all_observable_events/all_observable_events = new()
|
||||
|
||||
/datum/all_observable_events
|
||||
var/list/events
|
||||
|
||||
@@ -5,11 +5,10 @@
|
||||
//
|
||||
// Arguments that the called proc should expect:
|
||||
// /datum/destroyed_instance: The instance that was destroyed.
|
||||
var/decl/observ/destroyed/destroyed_event = new()
|
||||
|
||||
/decl/observ/destroyed
|
||||
name = "Destroyed"
|
||||
|
||||
/datum/Destroy()
|
||||
destroyed_event.raise_event(src)
|
||||
GLOB.destroyed_event.raise_event(src)
|
||||
. = ..()
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
var/list/global_listeners = list() // Associative list of instances that listen to all events of this type (as opposed to events belonging to a specific source) and the proc to call.
|
||||
|
||||
/decl/observ/New()
|
||||
all_observable_events.events += src
|
||||
GLOB.all_observable_events.events += src
|
||||
. = ..()
|
||||
|
||||
/decl/observ/proc/is_listening(var/event_source, var/datum/listener, var/proc_call)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var/list/global_listen_count = list()
|
||||
var/list/event_sources_count = list()
|
||||
var/list/event_listen_count = list()
|
||||
GLOBAL_LIST_EMPTY(global_listen_count)
|
||||
GLOBAL_LIST_EMPTY(event_sources_count)
|
||||
GLOBAL_LIST_EMPTY(event_listen_count)
|
||||
|
||||
/decl/observ/destroyed/raise_event()
|
||||
. = ..()
|
||||
@@ -8,39 +8,39 @@ var/list/event_listen_count = list()
|
||||
return
|
||||
var/source = args[1]
|
||||
|
||||
if(global_listen_count[source])
|
||||
cleanup_global_listener(source, global_listen_count[source])
|
||||
if(event_sources_count[source])
|
||||
cleanup_source_listeners(source, event_sources_count[source])
|
||||
if(event_listen_count[source])
|
||||
cleanup_event_listener(source, event_listen_count[source])
|
||||
if(GLOB.global_listen_count[source])
|
||||
cleanup_global_listener(source, GLOB.global_listen_count[source])
|
||||
if(GLOB.event_sources_count[source])
|
||||
cleanup_source_listeners(source, GLOB.event_sources_count[source])
|
||||
if(GLOB.event_listen_count[source])
|
||||
cleanup_event_listener(source, GLOB.event_listen_count[source])
|
||||
|
||||
|
||||
/decl/observ/register(var/datum/event_source, var/datum/listener, var/proc_call)
|
||||
. = ..()
|
||||
if(.)
|
||||
event_sources_count[event_source] += 1
|
||||
event_listen_count[listener] += 1
|
||||
GLOB.event_sources_count[event_source] += 1
|
||||
GLOB.event_listen_count[listener] += 1
|
||||
|
||||
/decl/observ/unregister(var/datum/event_source, var/datum/listener, var/proc_call)
|
||||
. = ..()
|
||||
if(.)
|
||||
event_sources_count[event_source] -= 1
|
||||
event_listen_count[listener] -= 1
|
||||
GLOB.event_sources_count[event_source] -= 1
|
||||
GLOB.event_listen_count[listener] -= 1
|
||||
|
||||
/decl/observ/register_global(var/datum/listener, var/proc_call)
|
||||
. = ..()
|
||||
if(.)
|
||||
global_listen_count[listener] += 1
|
||||
GLOB.global_listen_count[listener] += 1
|
||||
|
||||
/decl/observ/unregister_global(var/datum/listener, var/proc_call)
|
||||
. = ..()
|
||||
if(.)
|
||||
global_listen_count[listener] -= 1
|
||||
GLOB.global_listen_count[listener] -= 1
|
||||
|
||||
/decl/observ/destroyed/proc/cleanup_global_listener(listener, listen_count)
|
||||
global_listen_count -= listener
|
||||
for(var/entry in all_observable_events.events)
|
||||
GLOB.global_listen_count -= listener
|
||||
for(var/entry in GLOB.all_observable_events.events)
|
||||
var/decl/observ/event = entry
|
||||
if(event.unregister_global(listener))
|
||||
log_debug("[event] - [listener] was deleted while still registered to global events.")
|
||||
@@ -48,8 +48,8 @@ var/list/event_listen_count = list()
|
||||
return
|
||||
|
||||
/decl/observ/destroyed/proc/cleanup_source_listeners(event_source, source_listener_count)
|
||||
event_sources_count -= event_source
|
||||
for(var/entry in all_observable_events.events)
|
||||
GLOB.event_sources_count -= event_source
|
||||
for(var/entry in GLOB.all_observable_events.events)
|
||||
var/decl/observ/event = entry
|
||||
var/proc_owners = event.event_sources[event_source]
|
||||
if(proc_owners)
|
||||
@@ -60,8 +60,8 @@ var/list/event_listen_count = list()
|
||||
return
|
||||
|
||||
/decl/observ/destroyed/proc/cleanup_event_listener(listener, listener_count)
|
||||
event_listen_count -= listener
|
||||
for(var/entry in all_observable_events.events)
|
||||
GLOB.event_listen_count -= listener
|
||||
for(var/entry in GLOB.all_observable_events.events)
|
||||
var/decl/observ/event = entry
|
||||
for(var/event_source in event.event_sources)
|
||||
if(event.unregister(event_source, listener))
|
||||
|
||||
Reference in New Issue
Block a user