From: Rico Tzschichholz Date: Mon, 1 Nov 2021 13:24:09 +0000 (+0100) Subject: codegen: Stop generating wrappers for dynamic signal connections X-Git-Tag: 0.55.1~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8152d9144c337925688bfd10d277fa167e913472;p=thirdparty%2Fvala.git codegen: Stop generating wrappers for dynamic signal connections --- 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");