From: Rico Tzschichholz Date: Wed, 20 Feb 2019 22:37:46 +0000 (+0100) Subject: girparser: Correctly set array_length_type for delegates returning an array X-Git-Tag: 0.36.18~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a15282ac4b397875da321b23e8b4da4836f90eb;p=thirdparty%2Fvala.git girparser: Correctly set array_length_type for delegates returning an array Fixes https://gitlab.gnome.org/GNOME/vala/issues/754 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index ac2e8efd7..c6c78fb6b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -379,6 +379,9 @@ TESTS = \ gir/async-result-pos.test \ gir/async-sync-out.test \ gir/delegate-alias-without-target.test \ + gir/delegate-array-length-type.test \ + gir/method-array-length-type.test \ + gir/parameter-array-length-type.test \ annotations/deprecated.vala \ annotations/description.vala \ annotations/noaccessormethod.test \ 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 ca99e3eca..40d0efb04 100644 --- a/vala/valagirparser.vala +++ b/vala/valagirparser.vala @@ -1855,12 +1855,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 ()); } } }