summaryrefslogtreecommitdiff
path: root/codegen/valaccodebasemodule.vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2021-12-11 10:34:03 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2021-12-11 17:57:27 +0100
commit1473f3e709e3fe930686fa7f2374ccae0f27719b (patch)
tree379454a74b1d1a99b824efeeee13426917259eb4 /codegen/valaccodebasemodule.vala
parent55677efcad05ca1cc5e444a4b074cfd6ee1f3f62 (diff)
downloadvala-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.vala8
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") {