[vala/staging] codegen: Split out GSignalModule.emit_signal()
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] codegen: Split out GSignalModule.emit_signal()
- Date: Mon, 1 Nov 2021 13:02:44 +0000 (UTC)
commit b9df26bcf3d8f6884f14dcc33a1a9d891916ac9d
Author: Rico Tzschichholz <ricotz ubuntu com>
Date: Mon Nov 1 14:02:04 2021 +0100
codegen: Split out GSignalModule.emit_signal()
codegen/valagsignalmodule.vala | 127 +++++++++++++++++++----------------------
1 file changed, 59 insertions(+), 68 deletions(-)
---
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index 126e78a44..00413173e 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -486,36 +486,20 @@ public class Vala.GSignalModule : GObjectModule {
}
public override void visit_element_access (ElementAccess expr) {
- if (expr.container is MemberAccess && expr.container.symbol_reference is Signal) {
- if (expr.parent_node is MethodCall) {
- // detailed signal emission
- var sig = (Signal) expr.symbol_reference;
- var ma = (MemberAccess) expr.container;
-
- var detail_expr = expr.get_indices ().get (0);
-
- CCodeFunctionCall ccall;
- if (!sig.external_package && expr.source_reference.file ==
sig.source_reference.file) {
- var detail_cexpr = get_detail_cexpression (detail_expr, expr);
-
- ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_emit"));
- ccall.add_argument (get_cvalue (ma.inner));
- ccall.add_argument (get_signal_id_cexpression (sig));
- ccall.add_argument (detail_cexpr);
- } else {
- var signal_name_cexpr = get_signal_name_cexpression (sig,
detail_expr, expr);
+ if (!(expr.container is MemberAccess && expr.container.symbol_reference is Signal)) {
+ base.visit_element_access (expr);
+ return;
+ }
- ccall = new CCodeFunctionCall (new CCodeIdentifier
("g_signal_emit_by_name"));
- ccall.add_argument (get_cvalue (ma.inner));
- ccall.add_argument (signal_name_cexpr);
- }
+ if (expr.parent_node is MethodCall) {
+ // detailed signal emission
+ unowned Signal sig = (Signal) expr.symbol_reference;
+ unowned MemberAccess ma = (MemberAccess) expr.container;
+ var detail_expr = expr.get_indices ().get (0);
- set_cvalue (expr, ccall);
- } else {
- // signal connect or disconnect
- }
+ set_cvalue (expr, emit_signal (sig, ma, detail_expr));
} else {
- base.visit_element_access (expr);
+ // signal connect or disconnect
}
}
@@ -528,57 +512,64 @@ public class Vala.GSignalModule : GObjectModule {
}
public override void visit_member_access (MemberAccess expr) {
- if (expr.symbol_reference is Signal) {
- CCodeExpression pub_inst = null;
+ if (!(expr.symbol_reference is Signal)) {
+ base.visit_member_access (expr);
+ return;
+ }
- if (expr.inner != null) {
- pub_inst = get_cvalue (expr.inner);
- }
+ unowned Signal sig = (Signal) expr.symbol_reference;
- var sig = (Signal) expr.symbol_reference;
- var cl = (TypeSymbol) sig.parent_symbol;
+ set_cvalue (expr, emit_signal (sig, expr));
+ }
- if (expr.inner is BaseAccess && sig.is_virtual) {
- var m = sig.default_handler;
- var base_class = (Class) m.parent_symbol;
- var vcast = new CCodeFunctionCall (new CCodeIdentifier
(get_ccode_class_type_function (base_class)));
- vcast.add_argument (new CCodeIdentifier ("%s_parent_class".printf
(get_ccode_lower_case_name (current_class))));
+ CCodeExpression emit_signal (Signal sig, MemberAccess expr, Expression? detail_expr = null) {
+ CCodeExpression pub_inst = null;
- set_cvalue (expr, new CCodeMemberAccess.pointer (vcast, m.name));
- return;
- }
+ if (expr.inner != null) {
+ pub_inst = get_cvalue (expr.inner);
+ }
- if (!sig.external_package && expr.source_reference.file == sig.source_reference.file)
{
- var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_emit"));
- ccall.add_argument (pub_inst);
- ccall.add_argument (get_signal_id_cexpression (sig));
- ccall.add_argument (new CCodeConstant ("0"));
+ if (expr.inner is BaseAccess && sig.is_virtual) {
+ var m = sig.default_handler;
+ var base_class = (Class) m.parent_symbol;
+ var vcast = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_class_type_function
(base_class)));
+ vcast.add_argument (new CCodeIdentifier ("%s_parent_class".printf
(get_ccode_lower_case_name (current_class))));
+ return new CCodeMemberAccess.pointer (vcast, m.name);
+ }
- set_cvalue (expr, ccall);
- } else if (get_ccode_has_emitter (sig)) {
- string emitter_func;
- if (sig.emitter != null) {
- if (!sig.external_package && expr.source_reference.file !=
sig.source_reference.file) {
- generate_method_declaration (sig.emitter, cfile);
- }
- emitter_func = get_ccode_lower_case_name (sig.emitter);
- } else {
- emitter_func = "%s_%s".printf (get_ccode_lower_case_name (cl),
get_ccode_lower_case_name (sig));
+ if (!sig.external_package && expr.source_reference.file == sig.source_reference.file) {
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_emit"));
+ ccall.add_argument (pub_inst);
+ ccall.add_argument (get_signal_id_cexpression (sig));
+ if (detail_expr == null) {
+ ccall.add_argument (new CCodeConstant ("0"));
+ } else {
+ ccall.add_argument (get_detail_cexpression (detail_expr, expr));
+ }
+ return ccall;
+ } else if (get_ccode_has_emitter (sig)) {
+ string emitter_func;
+ if (sig.emitter != null) {
+ if (!sig.external_package && expr.source_reference.file !=
sig.source_reference.file) {
+ generate_method_declaration (sig.emitter, cfile);
}
- var ccall = new CCodeFunctionCall (new CCodeIdentifier (emitter_func));
-
- ccall.add_argument (pub_inst);
- set_cvalue (expr, ccall);
+ emitter_func = get_ccode_lower_case_name (sig.emitter);
} else {
- var ccall = new CCodeFunctionCall (new CCodeIdentifier
("g_signal_emit_by_name"));
- ccall.add_argument (pub_inst);
-
- ccall.add_argument (get_signal_canonical_constant (sig));
-
- set_cvalue (expr, ccall);
+ unowned TypeSymbol sym = (TypeSymbol) sig.parent_symbol;
+ emitter_func = "%s_%s".printf (get_ccode_lower_case_name (sym),
get_ccode_lower_case_name (sig));
}
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier (emitter_func));
+ ccall.add_argument (pub_inst);
+ return ccall;
} else {
- base.visit_member_access (expr);
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_signal_emit_by_name"));
+ ccall.add_argument (pub_inst);
+ if (detail_expr == null) {
+ ccall.add_argument (get_signal_canonical_constant (sig));
+ } else {
+ ccall.add_argument (get_signal_name_cexpression (sig, detail_expr, expr));
+ }
+ return ccall;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]