]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girwriter: Don't emit invoker for methods attributed with NoWrapper
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 30 Jan 2021 10:44:17 +0000 (11:44 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 30 Jan 2021 12:18:58 +0000 (13:18 +0100)
codegen/valagirwriter.vala
tests/girwriter/GirTest-1.0.gir-expected
tests/girwriter/girtest.vala
tests/girwriter/girtest.vapi-expected
tests/girwriter/girtest.vapigen-expected

index 0ad27ed24a0d4132fbf54dcfa06587fa9daf8a03..afcab6ea96ed0f10310e9af9d6dd25aa0a96f412 100644 (file)
@@ -1276,7 +1276,9 @@ public class Vala.GIRWriter : CodeVisitor {
                        tag_name = "function";
                }
 
-               write_signature (m, tag_name, true);
+               if (m.get_attribute ("NoWrapper") == null) {
+                       write_signature (m, tag_name, true);
+               }
 
                if (m.is_abstract || m.is_virtual) {
                        write_signature (m, "virtual-method", true, false);
@@ -1343,7 +1345,9 @@ public class Vala.GIRWriter : CodeVisitor {
                write_indent ();
                buffer.append_printf ("<%s name=\"%s\"", tag_name, name);
                if (tag_name == "virtual-method") {
-                       buffer.append_printf (" invoker=\"%s\"", name);
+                       if (m.get_attribute ("NoWrapper") == null) {
+                               buffer.append_printf (" invoker=\"%s\"", name);
+                       }
                } else if (tag_name == "callback") {
                        /* this is only used for vfuncs */
                        buffer.append_printf (" c:type=\"%s\"", name);
index 75a6c51d063ecea9a269fc603b7296134e000b8a..129cdd0e37302a21d97ae8fa3521f357628892d2 100644 (file)
                                </instance-parameter>
                        </parameters>
                </method>
+               <virtual-method name="no_wrapper_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <instance-parameter name="self" transfer-ownership="none">
+                                       <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+                               </instance-parameter>
+                       </parameters>
+               </virtual-method>
                <property name="some-property" writable="1" construct="1">
                        <type name="utf8" c:type="gchar*"/>
                </property>
                                </parameters>
                        </callback>
                </field>
+               <field name="no_wrapper_method">
+                       <callback name="no_wrapper_method" c:type="no_wrapper_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <instance-parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.ObjectTest" c:type="GirTestObjectTest*"/>
+                                       </instance-parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="signal_with_default_handlder">
                        <callback name="object_test_signal_with_default_handlder" c:type="object_test_signal_with_default_handlder">
                                <return-value transfer-ownership="full">
                                </parameter>
                        </parameters>
                </virtual-method>
+               <virtual-method name="no_wrapper_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <instance-parameter name="self" transfer-ownership="none">
+                                       <type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+                               </instance-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="no_wrapper_method">
+                       <callback name="no_wrapper_method" c:type="no_wrapper_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <instance-parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.AbstractObjectTest" c:type="GirTestAbstractObjectTest*"/>
+                                       </instance-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">
                                </instance-parameter>
                        </parameters>
                </virtual-method>
+               <virtual-method name="no_wrapper_method">
+                       <return-value transfer-ownership="full">
+                               <type name="none" c:type="void"/>
+                       </return-value>
+                       <parameters>
+                               <instance-parameter name="self" transfer-ownership="none">
+                                       <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+                               </instance-parameter>
+                       </parameters>
+               </virtual-method>
                <property name="property" writable="1" construct="1">
                        <type name="gint" c:type="gint"/>
                </property>
                                </parameters>
                        </callback>
                </field>
+               <field name="no_wrapper_method">
+                       <callback name="no_wrapper_method" c:type="no_wrapper_method">
+                               <return-value transfer-ownership="full">
+                                       <type name="none" c:type="void"/>
+                               </return-value>
+                               <parameters>
+                                       <instance-parameter name="self" transfer-ownership="none">
+                                               <type name="GirTest.InterfaceTest" c:type="GirTestInterfaceTest*"/>
+                                       </instance-parameter>
+                               </parameters>
+                       </callback>
+               </field>
                <field name="get_property">
                        <callback name="get_property" c:type="get_property">
                                <return-value transfer-ownership="none">
index 18c3ba80e1cfd1e64e8c29b599ba8d0402151608..72d3e88669b11449dbac421905af1ad130f05dd9 100644 (file)
@@ -81,6 +81,9 @@ namespace GirTest {
                }
                internal virtual void internal_method () {
                }
+               [NoWrapper]
+               public virtual void no_wrapper_method () {
+               }
        }
 
        [GIR (visible = false)]
@@ -280,6 +283,10 @@ namespace GirTest {
                [GIR (visible = false)]
                public void skipped_method () {
                }
+
+               [NoWrapper]
+               public virtual void no_wrapper_method () {
+               }
        }
 
        public abstract class AbstractObjectTest : Object {
@@ -297,6 +304,9 @@ namespace GirTest {
                public abstract async void skipped_coroutine_method (int param);
 
                internal abstract void internal_method (int8 param);
+
+               [NoWrapper]
+               public abstract void no_wrapper_method ();
        }
 
        public interface PrerequisiteTest : InterfaceTest {
index 7e78a87c0a5154c571de4227769c302753a90b17..672e0de4bb572133671208b5dd5618104a07aa88 100644 (file)
@@ -12,6 +12,8 @@ namespace GirTest {
                public abstract void method_int8_out (out int8 param);
                public abstract void method_throw () throws GirTest.ErrorTest;
                public abstract void method_valist (int param, va_list vargs);
+               [NoWrapper]
+               public abstract void no_wrapper_method ();
                [GIR (visible = false)]
                public abstract async void skipped_coroutine_method (int param);
        }
@@ -76,6 +78,8 @@ namespace GirTest {
                public virtual void method_with_default_impl (int8 param);
                public ObjectTest.new_valist (int param, va_list vargs);
                public ObjectTest.newv (int param, ...);
+               [NoWrapper]
+               public virtual void no_wrapper_method ();
                public void none_in ();
                public static void none_inout (ref unowned GirTest.ObjectTest obj);
                public static void none_out (out unowned GirTest.ObjectTest obj);
@@ -119,6 +123,8 @@ namespace GirTest {
                public virtual async void coroutine_async ();
                public virtual void int8_in (int8 param);
                public virtual void method_valist (int param, va_list vargs);
+               [NoWrapper]
+               public virtual void no_wrapper_method ();
                [GIR (visible = false)]
                public virtual async void skipped_coroutine_method (int param);
                public abstract int property { get; set construct; }
index 68bb68f90e235cf7b73beab829b301e7a270bd16..6b66c49d99a7cd816c63ec9878989732a47b3fa2 100644 (file)
@@ -14,6 +14,8 @@ namespace GirTest {
                public abstract void method_int8_out (out int8 param);
                public abstract void method_throw () throws GLib.Error;
                public abstract void method_valist (int param, va_list vargs);
+               [NoWrapper]
+               public abstract void no_wrapper_method ();
        }
        [CCode (cheader_filename = "girtest.h", has_type_id = false)]
        [Compact]
@@ -104,6 +106,8 @@ namespace GirTest {
                public virtual void method_throw () throws GLib.Error;
                public void method_with_default (int i);
                public virtual void method_with_default_impl (int8 param);
+               [NoWrapper]
+               public virtual void no_wrapper_method ();
                public void none_in ();
                public static void none_inout (ref unowned GirTest.ObjectTest obj);
                public static void none_out (out unowned GirTest.ObjectTest obj);
@@ -149,6 +153,8 @@ namespace GirTest {
                public virtual int get_property ();
                public virtual void int8_in (int8 param);
                public virtual void internal_method ();
+               [NoWrapper]
+               public virtual void no_wrapper_method ();
                public virtual void set_property (int value);
                public abstract int property { get; set construct; }
        }