[vala/staging] codegen: Stop generating wrappers for dynamic signal connections
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] codegen: Stop generating wrappers for dynamic signal connections
- Date: Mon, 1 Nov 2021 13:33:45 +0000 (UTC)
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]