From: Rico Tzschichholz Date: Tue, 28 Jul 2020 11:53:29 +0000 (+0200) Subject: girwriter: Internal fields/vfuncs in type-symbols are public in C X-Git-Tag: 0.49.1~9 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=4e7b665ee40eb55f4f5953c850ee9f2e49443c90;p=thirdparty%2Fvala.git girwriter: Internal fields/vfuncs in type-symbols are public in C Fixes https://gitlab.gnome.org/GNOME/vala/issues/513 --- diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala index 03b064314..ff4600cb7 100644 --- a/codegen/valagirwriter.vala +++ b/codegen/valagirwriter.vala @@ -1754,6 +1754,17 @@ public class Vala.GIRWriter : CodeVisitor { return true; } + // internal fields and function pointers in classes/interfaces are public API + if (sym.access == SymbolAccessibility.INTERNAL) { + unowned Symbol? parent = sym.parent_symbol; + if (parent != null + && (parent is Class || parent is Interface) + && ((sym is Field && ((Field) sym).binding == MemberBinding.INSTANCE) + || (sym is Method && ((Method) sym).binding == MemberBinding.INSTANCE && (((Method) sym).is_abstract || ((Method) sym).is_virtual)))) { + return true; + } + } + return false; } diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected index 6977d77e8..d7521ddcc 100644 --- a/tests/girwriter/GirTest-1.0.gir-expected +++ b/tests/girwriter/GirTest-1.0.gir-expected @@ -114,6 +114,9 @@ + + + @@ -248,6 +251,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -773,6 +796,21 @@ + + + + + + + + + + + + + + + @@ -1026,6 +1064,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -1142,6 +1200,21 @@ + + + + + + + + + + + + + + + @@ -1552,6 +1625,16 @@ + + + + + + + + + + @@ -1692,6 +1775,18 @@ + + + + + + + + + + + + @@ -1719,6 +1814,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1739,6 +1861,9 @@ + + + @@ -1759,6 +1884,9 @@ + + + diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala index 9aeeacc4a..cd284b5c6 100644 --- a/tests/girwriter/girtest.vala +++ b/tests/girwriter/girtest.vala @@ -2,6 +2,7 @@ namespace GirTest { public struct BoxedStruct { public int field_name; + internal int internal_field_name; public BoxedStruct () { } @@ -13,6 +14,7 @@ namespace GirTest { [CCode (has_type_id = false)] public struct Struct { public int field_name; + internal int internal_field_name; public Struct () { } @@ -67,6 +69,7 @@ namespace GirTest { public interface InterfaceTest : Object { public abstract int property { get; construct set; } + internal abstract string internal_property { get; set; } public virtual void int8_in (int8 param) { } public virtual async void coroutine_async () { @@ -76,6 +79,8 @@ namespace GirTest { [GIR (visible = false)] public virtual async void skipped_coroutine_method (int param) { } + internal virtual void internal_method () { + } } [GIR (visible = false)] @@ -103,6 +108,8 @@ namespace GirTest { public class ObjectTest : Object { private static ObjectTest global_instance = new ObjectTest (); + internal static int internal_global_field = 4711; + public signal void some_signal (int param); [GIR (visible = false)] @@ -110,6 +117,8 @@ namespace GirTest { public int field = 42; + internal int internal_field = 23; + public int fixed_array_field[23]; public string? nullable_field; @@ -120,6 +129,8 @@ namespace GirTest { public string construct_only_property { construct; } + internal string internal_property { get; set; } + [GIR (visible = false)] public string skipped_property { get; construct set; } @@ -164,6 +175,9 @@ namespace GirTest { public virtual void method_with_default_impl (int8 param) { } + internal virtual void internal_method_with_default_impl (int8 param) { + } + public void int8_in (int8 param) { } @@ -281,6 +295,8 @@ namespace GirTest { [GIR (visible = false)] public abstract async void skipped_coroutine_method (int param); + + internal abstract void internal_method (int8 param); } public interface PrerequisiteTest : InterfaceTest { @@ -288,6 +304,7 @@ namespace GirTest { public class ImplementionTest : Object, InterfaceTest { public int property { get; construct set; } + internal string internal_property { get; set; } } [Compact] diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected index 23ca2a8bd..da076711d 100644 --- a/tests/girwriter/girtest.vapi-expected +++ b/tests/girwriter/girtest.vapi-expected @@ -129,6 +129,7 @@ namespace GirTest { [CCode (cheader_filename = "girtest.h")] public struct BoxedStruct { public int field_name; + public int internal_field_name; public BoxedStruct (); public void inv (); } @@ -140,6 +141,7 @@ namespace GirTest { [CCode (cheader_filename = "girtest.h", has_type_id = false)] public struct Struct { public int field_name; + public int internal_field_name; public Struct (); public void inv (); }