From cb70c90c8b9e594da9c2c93b9824c18ed67d6e5c Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Wed, 20 Feb 2019 23:37:46 +0100 Subject: [PATCH] girparser: Correctly set array_length_type for delegates returning an array Fixes https://gitlab.gnome.org/GNOME/vala/issues/754 --- tests/Makefile.am | 3 +++ tests/gir/delegate-array-length-type.test | 28 ++++++++++++++++++++++ tests/gir/method-array-length-type.test | 21 ++++++++++++++++ tests/gir/parameter-array-length-type.test | 24 +++++++++++++++++++ vala/valagirparser.vala | 8 ++----- 5 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 tests/gir/delegate-array-length-type.test create mode 100644 tests/gir/method-array-length-type.test create mode 100644 tests/gir/parameter-array-length-type.test diff --git a/tests/Makefile.am b/tests/Makefile.am index b44a03fe0..e5489adb8 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -436,9 +436,12 @@ TESTS = \ gir/async-sync-out.test \ gir/class.test \ gir/delegate-alias-without-target.test \ + gir/delegate-array-length-type.test \ gir/delegate-closure-destroy-index-conflict.test \ gir/enum.test \ gir/errordomain.test \ + gir/method-array-length-type.test \ + gir/parameter-array-length-type.test \ gir/parameter-nullable-out-simple-type.test \ gir/property-non-readable.test \ annotations/deprecated.vala \ diff --git a/tests/gir/delegate-array-length-type.test b/tests/gir/delegate-array-length-type.test new file mode 100644 index 000000000..127ac8a76 --- /dev/null +++ b/tests/gir/delegate-array-length-type.test @@ -0,0 +1,28 @@ +GIR + +Input: + + + + + + + + + + + + + + + + + +Output: + +[CCode (array_length_pos = 0.1, array_length_type = "gsize", cheader_filename = "test.h", instance_pos = 0.9)] +public delegate string[] Foo (); diff --git a/tests/gir/method-array-length-type.test b/tests/gir/method-array-length-type.test new file mode 100644 index 000000000..b7ebccfc5 --- /dev/null +++ b/tests/gir/method-array-length-type.test @@ -0,0 +1,21 @@ +GIR + +Input: + + + + + + + + + + + + + + +Output: + +[CCode (array_length_pos = 0.1, array_length_type = "gsize", cheader_filename = "test.h")] +public static string[] function (); diff --git a/tests/gir/parameter-array-length-type.test b/tests/gir/parameter-array-length-type.test new file mode 100644 index 000000000..3bbbe9ec6 --- /dev/null +++ b/tests/gir/parameter-array-length-type.test @@ -0,0 +1,24 @@ +GIR + +Input: + + + + + + + + + + + + + + + + + +Output: + +[CCode (cheader_filename = "test.h")] +public static void function ([CCode (array_length_cname = "foo_length", array_length_pos = 1.1, array_length_type = "gsize")] string[] foo); diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala index eac90147e..080f8f735 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -1875,12 +1875,8 @@ public class Vala.GirParser : CodeVisitor { if (type_name != "int") { var st = root.lookup (type_name); if (st != null) { - if (sym is Method) { - var m = (Method) sym; - m.set_attribute_string ("CCode", "array_length_type", st.get_cname ()); - } else { - var param = (Parameter) sym; - param.set_attribute_string ("CCode", "array_length_type", st.get_cname ()); + if (sym is Callable || sym is Parameter) { + sym.set_attribute_string ("CCode", "array_length_type", st.get_cname ()); } } } -- 2.47.2