[vala/0.46] codegen: Append initializer for "_*_size_" of array field in internal struct
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.46] codegen: Append initializer for "_*_size_" of array field in internal struct
- Date: Tue, 21 Apr 2020 07:47:28 +0000 (UTC)
commit fde5954b6c7f222dc6d82e81a1452697cf482c47
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Tue Feb 25 12:35:15 2020 +0100
codegen: Append initializer for "_*_size_" of array field in internal struct
Fixes https://gitlab.gnome.org/GNOME/vala/issues/914
codegen/valaccodebasemodule.vala | 3 +++
tests/Makefile.am | 1 +
tests/arrays/struct-field-initializer.vala | 33 ++++++++++++++++++++++++++++++
3 files changed, 37 insertions(+)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 442b92f58..f53b1e93e 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -2701,6 +2701,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
for (int dim = 1; dim <= array_type.rank; dim++) {
clist.append (get_array_length_cvalue
(expr.target_value, dim));
}
+ if (array_type.rank == 1 && field.is_internal_symbol ()) {
+ clist.append (get_array_length_cvalue
(expr.target_value, 1));
+ }
}
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3d3bd3f78..d55db47bd 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -90,6 +90,7 @@ TESTS = \
arrays/length-inline-assignment.vala \
arrays/length-type-include.vala \
arrays/struct-field-length-cname.vala \
+ arrays/struct-field-initializer.vala \
arrays/incompatible-integer-elements.test \
arrays/slice-invalid-start.test \
arrays/slice-invalid-stop.test \
diff --git a/tests/arrays/struct-field-initializer.vala b/tests/arrays/struct-field-initializer.vala
new file mode 100644
index 000000000..9534c8490
--- /dev/null
+++ b/tests/arrays/struct-field-initializer.vala
@@ -0,0 +1,33 @@
+[CCode (has_type_id = false)]
+struct Foo {
+ public unowned string[] array;
+ public int i;
+}
+
+[CCode (has_type_id = false)]
+public struct Bar {
+ public unowned string[] array;
+ public int i;
+}
+
+const string[] SARRAY = { "foo", "bar" };
+
+const Foo FOO = { SARRAY, 23 };
+const Bar BAR = { SARRAY, 42 };
+
+void main () {
+ {
+ assert (FOO.array.length == 2);
+ assert (FOO.i == 23);
+ assert (BAR.array.length == 2);
+ assert (BAR.i == 42);
+ }
+ {
+ const Foo foo = { SARRAY, 23 };
+ const Bar bar = { SARRAY, 42 };
+ assert (foo.array.length == 2);
+ assert (foo.i == 23);
+ assert (bar.array.length == 2);
+ assert (bar.i == 42);
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]