From: Rico Tzschichholz Date: Fri, 3 May 2019 13:32:04 +0000 (+0200) Subject: girwriter: Write implicit fields for arrays and delegates X-Git-Tag: 0.45.1~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23a8257eafbcce0280dd26fe011fdb66dc1b684d;p=thirdparty%2Fvala.git girwriter: Write implicit fields for arrays and delegates --- diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala index 590a887c3..0c7c5b987 100644 --- a/codegen/valagirwriter.vala +++ b/codegen/valagirwriter.vala @@ -942,6 +942,49 @@ public class Vala.GIRWriter : CodeVisitor { indent--; write_indent (); buffer.append_printf ("\n"); + + if (f.variable_type is ArrayType && get_ccode_array_length (f)) { + var array_type = (ArrayType) f.variable_type; + if (!array_type.fixed_length) { + for (var i = 0; i < array_type.rank; i++) { + write_indent (); + buffer.append_printf ("\n"); + indent++; + write_type (array_type.length_type); + indent--; + write_indent (); + buffer.append_printf ("\n"); + } + } + } else if (f.variable_type is DelegateType) { + var deleg_type = (DelegateType) f.variable_type; + if (deleg_type.delegate_symbol.has_target) { + write_indent (); + buffer.append_printf ("\n"); + indent++; + write_indent (); + buffer.append_printf ("\n"); + indent--; + write_indent (); + buffer.append_printf ("\n"); + if (deleg_type.is_disposable ()) { + write_indent (); + buffer.append_printf ("\n"); + indent++; + write_indent (); + buffer.append_printf ("\n"); + indent--; + write_indent (); + buffer.append_printf ("\n"); + } + } + } } private void write_implicit_params (DataType? type, ref int index, bool has_array_length, string? name, ParameterDirection direction) { diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected index 9aba2a5f8..034f48418 100644 --- a/tests/girwriter/GirTest-1.0.gir-expected +++ b/tests/girwriter/GirTest-1.0.gir-expected @@ -75,6 +75,23 @@ + + + + + + + + + + + + + + + + + diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala index 1164ab1da..3ace08a5b 100644 --- a/tests/girwriter/girtest.vala +++ b/tests/girwriter/girtest.vala @@ -87,6 +87,8 @@ namespace GirTest { } public class SubTypeTest : TypeTest { + public string[] array_field; + public DelegateTest delegate_field; } public class ObjectTest : Object { diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected index 8e3b3b697..52d23d16a 100644 --- a/tests/girwriter/girtest.vapi-expected +++ b/tests/girwriter/girtest.vapi-expected @@ -87,6 +87,8 @@ namespace GirTest { } [CCode (cheader_filename = "girtest.h")] public class SubTypeTest : GirTest.TypeTest { + public string[] array_field; + public GirTest.DelegateTest delegate_field; public SubTypeTest (); } [CCode (cheader_filename = "girtest.h")]