diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-01-31 16:37:44 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-01-31 16:37:44 +0100 |
commit | 8885d2438299f2e860775452d8226725ee3853ed (patch) | |
tree | 9712bc7ed01ce58297efbd2180b927c6f163cca8 /codegen | |
parent | 7b5c4f538cc1a1d1bf02b309f1e6286927901d87 (diff) | |
download | vala-8885d2438299f2e860775452d8226725ee3853ed.tar.gz |
codegen: Use correct target/destroy of delegate field initializer
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1285
Diffstat (limited to 'codegen')
-rw-r--r-- | codegen/valaccodebasemodule.vala | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index cf0d94682..edf72b5a6 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1325,10 +1325,19 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var delegate_type = (DelegateType) f.variable_type; if (delegate_type.delegate_symbol.has_target) { var field_value = get_field_cvalue (f, load_this_parameter ((TypeSymbol) f.parent_symbol)); - - ccode.add_assignment (get_delegate_target_cvalue (field_value), new CCodeIdentifier ("self")); + var target_cvalue = get_delegate_target_cvalue (f.initializer.target_value); + if (target_cvalue != null) { + ccode.add_assignment (get_delegate_target_cvalue (field_value), target_cvalue); + } else { + ccode.add_assignment (get_delegate_target_cvalue (field_value), new CCodeIdentifier ("self")); + } if (delegate_type.is_disposable ()) { - ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), new CCodeConstant ("NULL")); + var destroy_cvalue = get_delegate_target_destroy_notify_cvalue (f.initializer.target_value); + if (destroy_cvalue != null) { + ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), destroy_cvalue); + } else { + ccode.add_assignment (get_delegate_target_destroy_notify_cvalue (field_value), new CCodeConstant ("NULL")); + } } } } |