[vala/0.48] codegen: Cast given default-value of struct with possible member initializer
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.48] codegen: Cast given default-value of struct with possible member initializer
- Date: Tue, 4 Jan 2022 11:44:27 +0000 (UTC)
commit f676564ffb89d4a95538969a6cd5a2d7d59a6cf5
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Mon Jan 3 13:59:36 2022 +0100
codegen: Cast given default-value of struct with possible member initializer
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1272
codegen/valaccodebasemodule.vala | 6 +++++-
tests/structs/simple-type-default-value.vala | 14 ++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index eafe71009..db66ddb8e 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -6382,7 +6382,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
var array_type = type as ArrayType;
if (type.type_symbol != null && !type.nullable
&& (on_error ? get_ccode_default_value_on_error (type.type_symbol) :
get_ccode_default_value (type.type_symbol)) != "") {
- return new CCodeConstant (on_error ? get_ccode_default_value_on_error
(type.type_symbol) : get_ccode_default_value (type.type_symbol));
+ CCodeExpression val = new CCodeConstant (on_error ? get_ccode_default_value_on_error
(type.type_symbol) : get_ccode_default_value (type.type_symbol));
+ if (st != null && st.get_fields ().size > 0) {
+ val = new CCodeCastExpression (val, get_ccode_name (st));
+ }
+ return val;
} else if (initializer_expression && !type.nullable &&
(st != null || (array_type != null && array_type.fixed_length))) {
// 0-initialize struct with struct initializer { 0 }
diff --git a/tests/structs/simple-type-default-value.vala b/tests/structs/simple-type-default-value.vala
new file mode 100644
index 000000000..63c21bdd2
--- /dev/null
+++ b/tests/structs/simple-type-default-value.vala
@@ -0,0 +1,14 @@
+[CCode (default_value = "{ .i = 23 }")]
+[SimpleType]
+public struct Foo {
+ int i;
+}
+
+Foo bar (Object o) {
+ return {};
+}
+
+void main () {
+ Foo foo = {};
+ assert (foo.i == 23);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]