[vala/staging] codegen: Stop generating wrappers for dynamic signal connections



commit 8152d9144c337925688bfd10d277fa167e913472
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Mon Nov 1 14:24:09 2021 +0100

    codegen: Stop generating wrappers for dynamic signal connections

 codegen/valaccodebasemodule.vala | 12 -------
 codegen/valagobjectmodule.vala   | 76 ----------------------------------------
 codegen/valagsignalmodule.vala   | 25 +++++--------
 tests/objects/dynamic.c-expected | 72 ++++++-------------------------------
 4 files changed, 19 insertions(+), 166 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index ff41d344a..c31c55a1f 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -6801,18 +6801,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                return "";
        }
 
-       public virtual string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) {
-               return "";
-       }
-
-       public virtual string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal node) {
-               return "";
-       }
-
-       public virtual string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) {
-               return "";
-       }
-
        public virtual string get_array_length_cname (string array_cname, int dim) {
                return "";
        }
diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala
index 238a67909..788de3e74 100644
--- a/codegen/valagobjectmodule.vala
+++ b/codegen/valagobjectmodule.vala
@@ -726,82 +726,6 @@ public class Vala.GObjectModule : GTypeModule {
                return "dynamic_%s%d_".printf (node.name, signal_wrapper_id++);
        }
 
-       public override string get_dynamic_signal_connect_wrapper_name (DynamicSignal sig) {
-               if (sig.dynamic_type.type_symbol == null
-                   || !sig.dynamic_type.type_symbol.is_subtype_of (gobject_type)) {
-                       return base.get_dynamic_signal_connect_wrapper_name (sig);
-               }
-
-               string connect_wrapper_name = "_%sconnect".printf (get_dynamic_signal_cname (sig));
-               var func = new CCodeFunction (connect_wrapper_name, "gulong");
-               func.add_parameter (new CCodeParameter ("obj", "gpointer"));
-               func.add_parameter (new CCodeParameter ("signal_name", "const char *"));
-               func.add_parameter (new CCodeParameter ("handler", "GCallback"));
-               func.add_parameter (new CCodeParameter ("data", "gpointer"));
-               push_function (func);
-               generate_gobject_connect_wrapper (sig, false);
-               pop_function ();
-
-               // append to C source file
-               cfile.add_function_declaration (func);
-               cfile.add_function (func);
-
-               return connect_wrapper_name;
-       }
-
-       public override string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal sig) {
-               if (sig.dynamic_type.type_symbol == null
-                   || !sig.dynamic_type.type_symbol.is_subtype_of (gobject_type)) {
-                       return base.get_dynamic_signal_connect_wrapper_name (sig);
-               }
-
-               string connect_wrapper_name = "_%sconnect_after".printf (get_dynamic_signal_cname (sig));
-               var func = new CCodeFunction (connect_wrapper_name, "gulong");
-               func.add_parameter (new CCodeParameter ("obj", "gpointer"));
-               func.add_parameter (new CCodeParameter ("signal_name", "const char *"));
-               func.add_parameter (new CCodeParameter ("handler", "GCallback"));
-               func.add_parameter (new CCodeParameter ("data", "gpointer"));
-               push_function (func);
-               generate_gobject_connect_wrapper (sig, true);
-               pop_function ();
-
-               // append to C source file
-               cfile.add_function_declaration (func);
-               cfile.add_function (func);
-
-               return connect_wrapper_name;
-       }
-
-       void generate_gobject_connect_wrapper (DynamicSignal sig, bool after) {
-               var m = (Method) sig.handler.symbol_reference;
-
-               sig.accept (this);
-
-               string connect_func = "g_signal_connect_object";
-               if (m.binding != MemberBinding.INSTANCE) {
-                       if (!after)
-                               connect_func = "g_signal_connect";
-                       else
-                               connect_func = "g_signal_connect_after";
-               }
-
-               var call = new CCodeFunctionCall (new CCodeIdentifier (connect_func));
-               call.add_argument (new CCodeIdentifier ("obj"));
-               call.add_argument (new CCodeIdentifier ("signal_name"));
-               call.add_argument (new CCodeIdentifier ("handler"));
-               call.add_argument (new CCodeIdentifier ("data"));
-
-               if (m.binding == MemberBinding.INSTANCE) {
-                       if (!after) {
-                               call.add_argument (new CCodeConstant ("0"));
-                       } else {
-                               call.add_argument (new CCodeConstant ("G_CONNECT_AFTER"));
-                       }
-               }
-
-               ccode.add_return (call);
-       }
-
        public override void visit_property (Property prop) {
                base.visit_property (prop);
 
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index 00413173e..cfd4a5da8 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -611,25 +611,19 @@ public class Vala.GSignalModule : GObjectModule {
 
                if (!disconnect) {
                        // connect
-                       if (sig is DynamicSignal) {
-                               if (!after)
-                                       connect_func = get_dynamic_signal_connect_wrapper_name 
((DynamicSignal) sig);
-                               else
-                                       connect_func = get_dynamic_signal_connect_after_wrapper_name 
((DynamicSignal) sig);
+                       if (!(sig is DynamicSignal) && ((m != null && m.closure) || (dt != null && 
dt.value_owned))) {
+                               connect_func = "g_signal_connect_data";
+                       } else if (m != null && in_gobject_instance (m)) {
+                               connect_func = "g_signal_connect_object";
+                       } else if (!after) {
+                               connect_func = "g_signal_connect";
                        } else {
-                               if ((m != null && m.closure) || (dt != null && dt.value_owned)) {
-                                       connect_func = "g_signal_connect_data";
-                               } else if (m != null && in_gobject_instance (m)) {
-                                       connect_func = "g_signal_connect_object";
-                               } else if (!after) {
-                                       connect_func = "g_signal_connect";
-                               } else
-                                       connect_func = "g_signal_connect_after";
+                               connect_func = "g_signal_connect_after";
                        }
                } else {
                        // disconnect
                        if (sig is DynamicSignal) {
-                               connect_func = get_dynamic_signal_disconnect_wrapper_name ((DynamicSignal) 
sig);
+                               connect_func = "VALA_UNSUPPORTED";
                        } else {
                                connect_func = "g_signal_handlers_disconnect_matched";
                        }
@@ -742,8 +736,7 @@ public class Vala.GSignalModule : GObjectModule {
                        } else if (handler is LambdaExpression) {
                                ccall.add_argument (get_this_cexpression ());
                        }
-                       if (!disconnect && !(sig is DynamicSignal)
-                           && in_gobject_instance (m)) {
+                       if (!disconnect && in_gobject_instance (m)) {
                                // g_signal_connect_object
 
                                // fifth argument: connect_flags
diff --git a/tests/objects/dynamic.c-expected b/tests/objects/dynamic.c-expected
index c3b9bf9e8..c216564f9 100644
--- a/tests/objects/dynamic.c-expected
+++ b/tests/objects/dynamic.c-expected
@@ -122,28 +122,12 @@ static inline void _dynamic_set_prop0 (GObject* obj,
 static inline gchar* _dynamic_get_prop1 (GObject* obj);
 static void _sig_after_cb_dynamic_sig0_ (GObject* _sender,
                                   gpointer self);
-gulong _dynamic_sig1_connect_after (gpointer obj,
-                                    const char * signal_name,
-                                    GCallback handler,
-                                    gpointer data);
-static void _sig_cb_dynamic_sig2_ (GObject* _sender,
+static void _sig_cb_dynamic_sig1_ (GObject* _sender,
                             gpointer self);
-gulong _dynamic_sig3_connect (gpointer obj,
-                              const char * signal_name,
-                              GCallback handler,
-                              gpointer data);
-static void _bar_sig_after_cb_dynamic_sig4_ (GObject* _sender,
+static void _bar_sig_after_cb_dynamic_sig2_ (GObject* _sender,
                                       gpointer self);
-gulong _dynamic_sig5_connect_after (gpointer obj,
-                                    const char * signal_name,
-                                    GCallback handler,
-                                    gpointer data);
-static void _bar_sig_cb_dynamic_sig6_ (GObject* _sender,
+static void _bar_sig_cb_dynamic_sig3_ (GObject* _sender,
                                 gpointer self);
-gulong _dynamic_sig7_connect (gpointer obj,
-                              const char * signal_name,
-                              GCallback handler,
-                              gpointer data);
 
 static inline gpointer
 foo_get_instance_private (Foo* self)
@@ -391,63 +375,27 @@ _sig_after_cb_dynamic_sig0_ (GObject* _sender,
        sig_after_cb ();
 }
 
-gulong
-_dynamic_sig1_connect_after (gpointer obj,
-                             const char * signal_name,
-                             GCallback handler,
-                             gpointer data)
-{
-       return g_signal_connect_after (obj, signal_name, handler, data);
-}
-
 static void
-_sig_cb_dynamic_sig2_ (GObject* _sender,
+_sig_cb_dynamic_sig1_ (GObject* _sender,
                        gpointer self)
 {
        sig_cb ();
 }
 
-gulong
-_dynamic_sig3_connect (gpointer obj,
-                       const char * signal_name,
-                       GCallback handler,
-                       gpointer data)
-{
-       return g_signal_connect (obj, signal_name, handler, data);
-}
-
 static void
-_bar_sig_after_cb_dynamic_sig4_ (GObject* _sender,
+_bar_sig_after_cb_dynamic_sig2_ (GObject* _sender,
                                  gpointer self)
 {
        bar_sig_after_cb ((Bar*) self);
 }
 
-gulong
-_dynamic_sig5_connect_after (gpointer obj,
-                             const char * signal_name,
-                             GCallback handler,
-                             gpointer data)
-{
-       return g_signal_connect_object (obj, signal_name, handler, data, G_CONNECT_AFTER);
-}
-
 static void
-_bar_sig_cb_dynamic_sig6_ (GObject* _sender,
+_bar_sig_cb_dynamic_sig3_ (GObject* _sender,
                            gpointer self)
 {
        bar_sig_cb ((Bar*) self);
 }
 
-gulong
-_dynamic_sig7_connect (gpointer obj,
-                       const char * signal_name,
-                       GCallback handler,
-                       gpointer data)
-{
-       return g_signal_connect_object (obj, signal_name, handler, data, 0);
-}
-
 static void
 _vala_main (void)
 {
@@ -473,9 +421,9 @@ _vala_main (void)
                s = _tmp3_;
                _vala_assert (g_strcmp0 (s, "foo") == 0, "s == \"foo\"");
                success = FALSE;
-               _tmp4_ = _dynamic_sig1_connect_after (foo, "sig", (GCallback) _sig_after_cb_dynamic_sig0_, 
NULL);
+               _tmp4_ = g_signal_connect_after (foo, "sig", (GCallback) _sig_after_cb_dynamic_sig0_, NULL);
                id1 = _tmp4_;
-               _tmp5_ = _dynamic_sig3_connect (foo, "sig", (GCallback) _sig_cb_dynamic_sig2_, NULL);
+               _tmp5_ = g_signal_connect (foo, "sig", (GCallback) _sig_cb_dynamic_sig1_, NULL);
                id2 = _tmp5_;
                g_signal_emit (real, foo_signals[FOO_SIG_SIGNAL], 0);
                _vala_assert (success, "success");
@@ -506,9 +454,9 @@ _vala_main (void)
                _tmp8_ = bar_new ();
                bar = _tmp8_;
                bar->success = FALSE;
-               _tmp9_ = _dynamic_sig5_connect_after (foo, "sig", (GCallback) 
_bar_sig_after_cb_dynamic_sig4_, bar);
+               _tmp9_ = g_signal_connect_object (foo, "sig", (GCallback) _bar_sig_after_cb_dynamic_sig2_, 
bar, G_CONNECT_AFTER);
                id1 = _tmp9_;
-               _tmp10_ = _dynamic_sig7_connect (foo, "sig", (GCallback) _bar_sig_cb_dynamic_sig6_, bar);
+               _tmp10_ = g_signal_connect_object (foo, "sig", (GCallback) _bar_sig_cb_dynamic_sig3_, bar, 0);
                id2 = _tmp10_;
                g_signal_emit (real, foo_signals[FOO_SIG_SIGNAL], 0);
                _vala_assert (bar->success, "bar.success");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]