[vala/staging] vala: Properly handle array-initializers inside struct-initializers
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] vala: Properly handle array-initializers inside struct-initializers
- Date: Thu, 15 Feb 2018 17:42:49 +0000 (UTC)
commit 8fc78e5a48805e16556f4717a5dcbab78e96e743
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Thu Feb 15 15:22:35 2018 +0100
vala: Properly handle array-initializers inside struct-initializers
https://bugzilla.gnome.org/show_bug.cgi?id=622178
tests/Makefile.am | 1 +
tests/basic-types/bug622178.vala | 26 ++++++++++++++++++++++++++
vala/valainitializerlist.vala | 4 +++-
3 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index decdb14..7ccc875 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -28,6 +28,7 @@ TESTS = \
basic-types/bug595751.vala \
basic-types/bug596637.vala \
basic-types/bug596785.vala \
+ basic-types/bug622178.vala \
basic-types/bug632322.vala \
basic-types/bug643612.vala \
basic-types/bug644046.vala \
diff --git a/tests/basic-types/bug622178.vala b/tests/basic-types/bug622178.vala
new file mode 100644
index 0000000..7754312
--- /dev/null
+++ b/tests/basic-types/bug622178.vala
@@ -0,0 +1,26 @@
+struct Foo {
+ int bar;
+ uint8[] data;
+ int baz;
+}
+
+struct Bar {
+ int bar;
+ uint8[,] data;
+ int baz;
+}
+
+void main () {
+ Foo foo = { 23, { 0, 1, 2, 3 }, 42 };
+ assert (foo.bar == 23);
+ assert (foo.baz == 42);
+ assert (foo.data.length == 4);
+ assert (foo.data[3] == 3);
+
+ Bar bar = { 23, { { 1, 2 }, { 3, 4 }, { 5, 6 } }, 42 };
+ assert (bar.bar == 23);
+ assert (bar.baz == 42);
+ assert (bar.data.length[0] == 3);
+ assert (bar.data.length[1] == 2);
+ assert (bar.data[2,0] == 5);
+}
diff --git a/vala/valainitializerlist.vala b/vala/valainitializerlist.vala
index c1f97ca..a30952d 100644
--- a/vala/valainitializerlist.vala
+++ b/vala/valainitializerlist.vala
@@ -131,7 +131,9 @@ public class Vala.InitializerList : Expression {
if (!(parent_node is ArrayCreationExpression)
&& !(parent_node is Constant)
- && !(parent_node is InitializerList)) {
+ && (!(parent_node is InitializerList)
+ || (((InitializerList) parent_node).target_type.data_type is Struct
+ && (array_type.value_owned || array_type.element_type.value_owned)))) {
// transform shorthand form
// int[] array = { 42 };
// into
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]