]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girwriter: Internal fields/vfuncs in type-symbols are public in C
authorRico Tzschichholz <ricotz@ubuntu.com>
Tue, 28 Jul 2020 11:53:29 +0000 (13:53 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 28 Jul 2020 12:54:54 +0000 (14:54 +0200)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/513

codegen/valagirwriter.vala
tests/girwriter/GirTest-1.0.gir-expected
tests/girwriter/girtest.vala
tests/girwriter/girtest.vapi-expected

index 03b0643145a2355716415b070b5f97a95d505f79..ff4600cb713d1f7484029d6c20f204380ed62497 100644 (file)
@@ -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;
        }
 
index 6977d77e824bf35d22791ca9e1f72016d0d8def1..d7521ddcc2f3937c9bb0ae56b2ea087af3635793 100644 (file)
                <field name="field">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <field name="fixed_array_field">
                        <array fixed-size="23" c:type="gint*">
                                <type name="gint" c:type="gint"/>
                                </parameter>
                        </parameters>
                </virtual-method>
+               <method name="internal_method_with_default_impl" c:identifier="gir_test_object_test_internal_method_with_default_impl">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </method>
+               <virtual-method name="internal_method_with_default_impl" invoker="internal_method_with_default_impl">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </virtual-method>
                <method name="int8_in" c:identifier="gir_test_object_test_int8_in">
                        <return-value transfer-ownership="full">
                                <type name="none" c:type="void"/>
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method_with_default_impl">
+                       <callback name="internal_method_with_default_impl" c:type="internal_method_with_default_impl">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+                                       </parameter>
+                                       <parameter name="param" transfer-ownership="none">
+                                               <type name="gint8" c:type="gint8"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="coroutine_virtual_async">
                        <callback name="coroutine_virtual_async" c:type="coroutine_virtual_async">
                                <return-value transfer-ownership="none">
                                </parameter>
                        </parameters>
                </virtual-method>
+               <method name="internal_method" c:identifier="gir_test_abstract_object_test_internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </method>
+               <virtual-method name="internal_method" invoker="internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="param" transfer-ownership="none">
+                                       <type name="gint8" c:type="gint8"/>
+                               </parameter>
+                       </parameters>
+               </virtual-method>
        </class>
        <record name="AbstractObjectTestClass" c:type="GirTestAbstractObjectTestClass" glib:is-gtype-struct-for="AbstractObjectTest">
                <field name="parent_class" readable="0" private="1">
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method">
+                       <callback name="internal_method" c:type="internal_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+                                       </parameter>
+                                       <parameter name="param" transfer-ownership="none">
+                                               <type name="gint8" c:type="gint8"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
        </record>
        <record name="AbstractObjectTestPrivate" c:type="GirTestAbstractObjectTestPrivate" disguised="1"/>
        <class name="ImplementionTest" c:type="GirTestImplementionTest" c:symbol-prefix="implemention_test" glib:type-name="GirTestImplementionTest" glib:get-type="gir_test_implemention_test_get_type" glib:type-struct="ImplementionTestClass" parent="GObject.Object">
                                </parameter>
                        </parameters>
                </virtual-method>
+               <method name="internal_method" c:identifier="gir_test_interface_test_internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+               </method>
+               <virtual-method name="internal_method" invoker="internal_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+               </virtual-method>
                <property name="property" writable="1" construct="1">
                        <type name="gint" c:type="gint"/>
                </property>
                                </parameters>
                        </callback>
                </field>
+               <field name="internal_method">
+                       <callback name="internal_method" c:type="internal_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="get_property">
                        <callback name="get_property" c:type="get_property">
                                <return-value transfer-ownership="none">
                                </parameters>
                        </callback>
                </field>
+               <field name="get_internal_property">
+                       <callback name="get_internal_property" c:type="get_internal_property">
+                               <return-value transfer-ownership="none">
+                                       <type name="utf8" c:type="const gchar*"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
+               <field name="set_internal_property">
+                       <callback name="set_internal_property" c:type="set_internal_property">
+                               <return-value transfer-ownership="none">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+                                       </parameter>
+                                       <parameter name="value" transfer-ownership="none">
+                                               <type name="utf8" c:type="const gchar*"/>
+                                       </parameter>
+                               </parameters>
+                       </callback>
+               </field>
        </record>
        <interface name="SkippedInterface" c:type="GirTestSkippedInterface" c:symbol-prefix="skipped_interface" glib:type-name="GirTestSkippedInterface" glib:get-type="gir_test_skipped_interface_get_type" glib:type-struct="SkippedInterfaceIface" introspectable="0">
        </interface>
                <field name="field_name">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field_name">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <function name="init" c:identifier="gir_test_boxed_struct_init">
                        <return-value transfer-ownership="none">
                                <type name="none" c:type="void"/>
                <field name="field_name">
                        <type name="gint" c:type="gint"/>
                </field>
+               <field name="internal_field_name">
+                       <type name="gint" c:type="gint"/>
+               </field>
                <function name="init" c:identifier="gir_test_struct_init">
                        <return-value transfer-ownership="none">
                                <type name="none" c:type="void"/>
index 9aeeacc4ad5b29fc2a15d569f3e74473fd317fc7..cd284b5c613ce333e3cbd2d43fb780467d19bfa8 100644 (file)
@@ -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]
index 23ca2a8bd67b57d7a62197d011eafa38cce9d785..da076711d7327757e2c3736fc3abe3773a1d4c9e 100644 (file)
@@ -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 ();
        }