From 778e030a1ab0b0ee1e6866da79984722e5711c8e Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 18 Oct 2021 00:15:19 +0200 Subject: [PATCH] [MIRROR] List literal components now store weakrefs in their list instead of the datum directly [MDB IGNORE] (#8891) * List literal components now store weakrefs instead of the datum directly (#62004) Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> * List literal components now store weakrefs in their list instead of the datum directly Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com> --- code/modules/wiremod/components/list/assoc_literal.dm | 5 ++++- code/modules/wiremod/components/list/list_literal.dm | 5 ++++- code/modules/wiremod/core/port.dm | 8 ++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/code/modules/wiremod/components/list/assoc_literal.dm b/code/modules/wiremod/components/list/assoc_literal.dm index 7f0db7fdfd7..dc92c5cce65 100644 --- a/code/modules/wiremod/components/list/assoc_literal.dm +++ b/code/modules/wiremod/components/list/assoc_literal.dm @@ -53,7 +53,10 @@ if(islist(entry_ports[index].value) && get_list_count(entry_ports[index].value, max_list_count) >= max_list_count) visible_message("[src] begins to overheat!") return - new_literal += list(key_ports[index].value = entry_ports[index].value) + var/value_to_add = entry_ports[index].value + if(is_proper_datum(value_to_add)) + value_to_add = WEAKREF(value_to_add) + new_literal[key_ports[index].value] = entry_ports[index].value list_output.set_output(new_literal) diff --git a/code/modules/wiremod/components/list/list_literal.dm b/code/modules/wiremod/components/list/list_literal.dm index 0fc72c8bd7d..20566fa0668 100644 --- a/code/modules/wiremod/components/list/list_literal.dm +++ b/code/modules/wiremod/components/list/list_literal.dm @@ -102,7 +102,10 @@ if(islist(value) && get_list_count(value, max_list_count) >= max_list_count) visible_message("[src] begins to overheat!") return - new_literal += list(value) + if(is_proper_datum(value)) + new_literal += WEAKREF(value) + else + new_literal += list(value) list_output.set_output(new_literal) diff --git a/code/modules/wiremod/core/port.dm b/code/modules/wiremod/core/port.dm index 304dc506917..b0facee8fdd 100644 --- a/code/modules/wiremod/core/port.dm +++ b/code/modules/wiremod/core/port.dm @@ -46,9 +46,13 @@ * Casts to the port's datatype (e.g. number -> string), and assumes this can be done. */ /datum/port/proc/set_value(value, force = FALSE) + if(isweakref(value)) + var/datum/weakref/reference_to_obj = value + value = reference_to_obj.resolve() + if(src.value != value || force) - if(isatom(value)) - UnregisterSignal(value, COMSIG_PARENT_QDELETING) + if(isatom(src.value)) + UnregisterSignal(src.value, COMSIG_PARENT_QDELETING) src.value = datatype_handler.convert_value(src, value, force) if(isatom(value)) RegisterSignal(value, COMSIG_PARENT_QDELETING, .proc/null_value)