diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-12-11 10:34:03 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-12-11 17:57:27 +0100 |
commit | 1473f3e709e3fe930686fa7f2374ccae0f27719b (patch) | |
tree | 379454a74b1d1a99b824efeeee13426917259eb4 /codegen/valaccodebasemodule.vala | |
parent | 55677efcad05ca1cc5e444a4b074cfd6ee1f3f62 (diff) | |
download | vala-1473f3e709e3fe930686fa7f2374ccae0f27719b.tar.gz |
codegen: Correctly handle chain up of struct creation methods
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1264
Diffstat (limited to 'codegen/valaccodebasemodule.vala')
-rw-r--r-- | codegen/valaccodebasemodule.vala | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 12bd99db2..2e7df70d5 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -4977,6 +4977,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } else if (param != null) { instance = get_cvalue_ (get_parameter_cvalue (param)); } + } else if (expr.is_chainup) { + instance = get_this_cexpression (); } else { var temp_value = create_temp_value (expr.type_reference, true, expr); instance = get_cvalue_ (temp_value); @@ -5033,7 +5035,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } if ((st != null && !st.is_simple_type ()) && !(get_ccode_instance_pos (m) < 0)) { - creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance)); + if (expr.is_chainup) { + creation_call.add_argument (instance); + } else { + creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance)); + } } else if (st != null && get_ccode_name (st) == "va_list") { creation_call.add_argument (instance); if (get_ccode_name (m) == "va_start") { |