summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-01-31 16:37:44 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-01-31 16:37:44 +0100
commit8885d2438299f2e860775452d8226725ee3853ed (patch)
tree9712bc7ed01ce58297efbd2180b927c6f163cca8 /codegen
parent7b5c4f538cc1a1d1bf02b309f1e6286927901d87 (diff)
downloadvala-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.vala15
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"));
+ }
}
}
}