diff options
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | gobject/Makefile.am | 3 | ||||
-rw-r--r-- | gobject/valaccodeassignmentmodule.vala | 4 | ||||
-rw-r--r-- | gobject/valaccodebinding.vala | 47 | ||||
-rw-r--r-- | gobject/valaccodedynamicsignalmodule.vala (renamed from gobject/valaccodedynamicsignalbinding.vala) | 109 | ||||
-rw-r--r-- | gobject/valaccodegenerator.vala | 14 | ||||
-rw-r--r-- | gobject/valaccodemodule.vala | 12 | ||||
-rw-r--r-- | vala/Makefile.am | 1 | ||||
-rw-r--r-- | vala/valacodebinding.vala | 29 | ||||
-rw-r--r-- | vala/valacodegenerator.vala | 4 | ||||
-rw-r--r-- | vala/valacodenode.vala | 20 | ||||
-rw-r--r-- | vala/valadynamicsignal.vala | 4 |
12 files changed, 79 insertions, 184 deletions
@@ -1,5 +1,21 @@ 2008-10-24 Jürg Billeter <j@bitron.ch> + * vala/Makefile.am: + * vala/valacodebinding.vala: + * vala/valacodegenerator.vala: + * vala/valacodenode.vala: + * vala/valadynamicsignal.vala: + * gobject/Makefile.am: + * gobject/valaccodeassignmentmodule.vala: + * gobject/valaccodebinding.vala: + * gobject/valaccodedynamicsignalmodule.vala: + * gobject/valaccodegenerator.vala: + * gobject/valaccodemodule.vala: + + Add CCodeDynamicSignalModule, remove CodeBinding and CCodeBinding + +2008-10-24 Jürg Billeter <j@bitron.ch> + * vala/valacodegenerator.vala: * vala/valadynamicproperty.vala: * gobject/Makefile.am: diff --git a/gobject/Makefile.am b/gobject/Makefile.am index cb50fe68f..80e86e4c3 100644 --- a/gobject/Makefile.am +++ b/gobject/Makefile.am @@ -15,10 +15,9 @@ libvala_la_VALASOURCES = \ valaccodearraymodule.vala \ valaccodeassignmentmodule.vala \ valaccodebasemodule.vala \ - valaccodebinding.vala \ valaccodecompiler.vala \ valaccodedynamicpropertymodule.vala \ - valaccodedynamicsignalbinding.vala \ + valaccodedynamicsignalmodule.vala \ valaccodeelementaccessmodule.vala \ valaccodegenerator.vala \ valaccodegeneratorsignal.vala \ diff --git a/gobject/valaccodeassignmentmodule.vala b/gobject/valaccodeassignmentmodule.vala index e4083e408..56abf3e2b 100644 --- a/gobject/valaccodeassignmentmodule.vala +++ b/gobject/valaccodeassignmentmodule.vala @@ -99,7 +99,7 @@ public class Vala.CCodeAssignmentModule : CCodeModule { if (assignment.operator == AssignmentOperator.ADD) { if (sig is DynamicSignal) { - connect_func = codegen.dynamic_signal_binding ((DynamicSignal) sig).get_connect_wrapper_name (); + connect_func = head.get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig); } else { connect_func = "g_signal_connect_object"; if (m.binding != MemberBinding.INSTANCE) { @@ -108,7 +108,7 @@ public class Vala.CCodeAssignmentModule : CCodeModule { } } else if (assignment.operator == AssignmentOperator.SUB) { if (sig is DynamicSignal) { - connect_func = codegen.dynamic_signal_binding ((DynamicSignal) sig).get_disconnect_wrapper_name (); + connect_func = head.get_dynamic_signal_disconnect_wrapper_name ((DynamicSignal) sig); } else { connect_func = "g_signal_handlers_disconnect_matched"; } diff --git a/gobject/valaccodebinding.vala b/gobject/valaccodebinding.vala deleted file mode 100644 index 4a29021e1..000000000 --- a/gobject/valaccodebinding.vala +++ /dev/null @@ -1,47 +0,0 @@ -/* valaccodebinding.vala - * - * Copyright (C) 2007-2008 Jürg Billeter - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Author: - * Jürg Billeter <j@bitron.ch> - */ - -using GLib; - -/** - * The link between a source code node and generated code. - */ -public abstract class Vala.CCodeBinding : CodeBinding { - /** - * The C Code generator. - */ - public CCodeGenerator codegen { get; set; } - - public CCodeModule head { - get { return codegen.head; } - } - - /** - * Generate code for this source code node. - */ - public virtual void emit () { - } - - public CCodeBinding? code_binding (CodeNode node) { - return (CCodeBinding) node.get_code_binding (codegen); - } -} diff --git a/gobject/valaccodedynamicsignalbinding.vala b/gobject/valaccodedynamicsignalmodule.vala index a070e3ebb..f8b9c60dc 100644 --- a/gobject/valaccodedynamicsignalbinding.vala +++ b/gobject/valaccodedynamicsignalmodule.vala @@ -1,4 +1,4 @@ -/* valaccodedynamicsignalbinding.vala +/* valaccodedynamicsignalmodule.vala * * Copyright (C) 2007-2008 Jürg Billeter * @@ -26,86 +26,71 @@ using Gee; /** * The link between a dynamic signal and generated code. */ -public class Vala.CCodeDynamicSignalBinding : CCodeBinding { - public Signal node { get; set; } - - public CCodeDynamicSignalBinding (CCodeGenerator codegen, DynamicSignal node) { - this.node = node; - this.codegen = codegen; +public class Vala.CCodeDynamicSignalModule : CCodeModule { + public CCodeDynamicSignalModule (CCodeGenerator codegen, CCodeModule? next) { + base (codegen, next); } - string? connect_wrapper_name; - string? disconnect_wrapper_name; - - string? dynamic_cname; - - private static int signal_wrapper_id; + int signal_wrapper_id; - public string get_dynamic_cname () { - if (dynamic_cname == null) { - dynamic_cname = "dynamic_%s%d_".printf (node.name, signal_wrapper_id++); - } - return dynamic_cname; + public override string get_dynamic_signal_cname (DynamicSignal node) { + return "dynamic_%s%d_".printf (node.name, signal_wrapper_id++); } - public string get_connect_wrapper_name () { + public override string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) { var dynamic_signal = (DynamicSignal) node; - if (connect_wrapper_name == null) { - connect_wrapper_name = "_%sconnect".printf (get_dynamic_cname ()); - var func = new CCodeFunction (connect_wrapper_name, "void"); - func.add_parameter (new CCodeFormalParameter ("obj", "gpointer")); - func.add_parameter (new CCodeFormalParameter ("signal_name", "const char *")); - func.add_parameter (new CCodeFormalParameter ("handler", "GCallback")); - func.add_parameter (new CCodeFormalParameter ("data", "gpointer")); - var block = new CCodeBlock (); - if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) { - generate_dbus_connect_wrapper (block); - } else if (dynamic_signal.dynamic_type.data_type != null - && dynamic_signal.dynamic_type.data_type.is_subtype_of (codegen.gobject_type)) { - generate_gobject_connect_wrapper (block); - } else { - Report.error (node.source_reference, "dynamic signals are not supported for `%s'".printf (dynamic_signal.dynamic_type.to_string ())); - } + string connect_wrapper_name = "_%sconnect".printf (get_dynamic_signal_cname (node)); + var func = new CCodeFunction (connect_wrapper_name, "void"); + func.add_parameter (new CCodeFormalParameter ("obj", "gpointer")); + func.add_parameter (new CCodeFormalParameter ("signal_name", "const char *")); + func.add_parameter (new CCodeFormalParameter ("handler", "GCallback")); + func.add_parameter (new CCodeFormalParameter ("data", "gpointer")); + var block = new CCodeBlock (); + if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) { + generate_dbus_connect_wrapper (node, block); + } else if (dynamic_signal.dynamic_type.data_type != null + && dynamic_signal.dynamic_type.data_type.is_subtype_of (codegen.gobject_type)) { + generate_gobject_connect_wrapper (node, block); + } else { + Report.error (node.source_reference, "dynamic signals are not supported for `%s'".printf (dynamic_signal.dynamic_type.to_string ())); + } - // append to C source file - codegen.source_type_member_declaration.append (func.copy ()); + // append to C source file + codegen.source_type_member_declaration.append (func.copy ()); - func.block = block; - codegen.source_type_member_definition.append (func); - } + func.block = block; + codegen.source_type_member_definition.append (func); return connect_wrapper_name; } - public string get_disconnect_wrapper_name () { + public override string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) { var dynamic_signal = (DynamicSignal) node; - if (disconnect_wrapper_name == null) { - disconnect_wrapper_name = "_%sdisconnect".printf (get_dynamic_cname ()); - var func = new CCodeFunction (disconnect_wrapper_name, "void"); - func.add_parameter (new CCodeFormalParameter ("obj", "gpointer")); - func.add_parameter (new CCodeFormalParameter ("signal_name", "const char *")); - func.add_parameter (new CCodeFormalParameter ("handler", "GCallback")); - func.add_parameter (new CCodeFormalParameter ("data", "gpointer")); - var block = new CCodeBlock (); - if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) { - generate_dbus_disconnect_wrapper (block); - } else { - Report.error (node.source_reference, "dynamic signals are not supported for `%s'".printf (dynamic_signal.dynamic_type.to_string ())); - } + string disconnect_wrapper_name = "_%sdisconnect".printf (get_dynamic_signal_cname (node)); + var func = new CCodeFunction (disconnect_wrapper_name, "void"); + func.add_parameter (new CCodeFormalParameter ("obj", "gpointer")); + func.add_parameter (new CCodeFormalParameter ("signal_name", "const char *")); + func.add_parameter (new CCodeFormalParameter ("handler", "GCallback")); + func.add_parameter (new CCodeFormalParameter ("data", "gpointer")); + var block = new CCodeBlock (); + if (dynamic_signal.dynamic_type.data_type == codegen.dbus_object_type) { + generate_dbus_disconnect_wrapper (node, block); + } else { + Report.error (node.source_reference, "dynamic signals are not supported for `%s'".printf (dynamic_signal.dynamic_type.to_string ())); + } - // append to C source file - codegen.source_type_member_declaration.append (func.copy ()); + // append to C source file + codegen.source_type_member_declaration.append (func.copy ()); - func.block = block; - codegen.source_type_member_definition.append (func); - } + func.block = block; + codegen.source_type_member_definition.append (func); return disconnect_wrapper_name; } - void generate_gobject_connect_wrapper (CCodeBlock block) { + void generate_gobject_connect_wrapper (DynamicSignal node, CCodeBlock block) { var dynamic_signal = (DynamicSignal) node; var m = (Method) dynamic_signal.handler.symbol_reference; @@ -130,7 +115,7 @@ public class Vala.CCodeDynamicSignalBinding : CCodeBinding { block.add_statement (new CCodeExpressionStatement (call)); } - void generate_dbus_connect_wrapper (CCodeBlock block) { + void generate_dbus_connect_wrapper (DynamicSignal node, CCodeBlock block) { var dynamic_signal = (DynamicSignal) node; var m = (Method) dynamic_signal.handler.symbol_reference; @@ -197,7 +182,7 @@ public class Vala.CCodeDynamicSignalBinding : CCodeBinding { block.add_statement (new CCodeExpressionStatement (call)); } - void generate_dbus_disconnect_wrapper (CCodeBlock block) { + void generate_dbus_disconnect_wrapper (DynamicSignal node, CCodeBlock block) { var dynamic_signal = (DynamicSignal) node; var call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_proxy_disconnect_signal")); diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index b1d50317e..c09cbcc0a 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -3973,7 +3973,7 @@ public class Vala.CCodeGenerator : CodeGenerator { var sig = d.parent_symbol as Signal; var dynamic_sig = sig as DynamicSignal; if (dynamic_sig != null) { - delegate_name = dynamic_signal_binding (dynamic_sig).get_dynamic_cname (); + delegate_name = head.get_dynamic_signal_cname (dynamic_sig); } else if (sig != null) { delegate_name = sig.parent_symbol.get_lower_case_cprefix () + sig.get_cname (); } else { @@ -4367,16 +4367,4 @@ public class Vala.CCodeGenerator : CodeGenerator { } return node.ccodenode; } - - public override CodeBinding? create_dynamic_signal_binding (DynamicSignal node) { - return new CCodeDynamicSignalBinding (this, node); - } - - public CCodeBinding? code_binding (CodeNode node) { - return (CCodeBinding) node.get_code_binding (this); - } - - public CCodeDynamicSignalBinding dynamic_signal_binding (DynamicSignal node) { - return (CCodeDynamicSignalBinding) node.get_code_binding (this); - } } diff --git a/gobject/valaccodemodule.vala b/gobject/valaccodemodule.vala index 2a33c978b..0f8875b3b 100644 --- a/gobject/valaccodemodule.vala +++ b/gobject/valaccodemodule.vala @@ -131,4 +131,16 @@ public abstract class Vala.CCodeModule { public virtual string get_dynamic_property_setter_cname (DynamicProperty node) { return next.get_dynamic_property_setter_cname (node); } + + public virtual string get_dynamic_signal_cname (DynamicSignal node) { + return next.get_dynamic_signal_cname (node); + } + + public virtual string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) { + return next.get_dynamic_signal_connect_wrapper_name (node); + } + + public virtual string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) { + return next.get_dynamic_signal_disconnect_wrapper_name (node); + } } diff --git a/vala/Makefile.am b/vala/Makefile.am index ef4657ed2..53340d762 100644 --- a/vala/Makefile.am +++ b/vala/Makefile.am @@ -35,7 +35,6 @@ libvalacore_la_VALASOURCES = \ valacharacterliteral.vala \ valaclass.vala \ valaclasstype.vala \ - valacodebinding.vala \ valacodecontext.vala \ valacodegenerator.vala \ valacodenode.vala \ diff --git a/vala/valacodebinding.vala b/vala/valacodebinding.vala deleted file mode 100644 index a64a2feeb..000000000 --- a/vala/valacodebinding.vala +++ /dev/null @@ -1,29 +0,0 @@ -/* valacodebinding.vala - * - * Copyright (C) 2007-2008 Jürg Billeter - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Author: - * Jürg Billeter <j@bitron.ch> - */ - -using GLib; - -/** - * The link between a source code node and generated code. - */ -public abstract class Vala.CodeBinding { -} diff --git a/vala/valacodegenerator.vala b/vala/valacodegenerator.vala index d587e6f54..43ce9011f 100644 --- a/vala/valacodegenerator.vala +++ b/vala/valacodegenerator.vala @@ -33,8 +33,4 @@ public class Vala.CodeGenerator : CodeVisitor { */ public virtual void emit (CodeContext context) { } - - public virtual CodeBinding? create_dynamic_signal_binding (DynamicSignal node) { - return null; - } } diff --git a/vala/valacodenode.vala b/vala/valacodenode.vala index bef68624c..9379ac59d 100644 --- a/vala/valacodenode.vala +++ b/vala/valacodenode.vala @@ -153,7 +153,6 @@ public abstract class Vala.CodeNode { return null; } - private CodeBinding? code_binding; private CCodeNode? _ccodenode; /** @@ -172,23 +171,4 @@ public abstract class Vala.CodeNode { return str.append (" */").str; } - - /** - * Returns the binding to the generated code. - * - * @return code binding - */ - public CodeBinding? get_code_binding (CodeGenerator codegen) { - if (code_binding == null) { - code_binding = create_code_binding (codegen); - } - return code_binding; - } - - /** - * Creates the binding to the generated code. - */ - public virtual CodeBinding? create_code_binding (CodeGenerator codegen) { - return null; - } } diff --git a/vala/valadynamicsignal.vala b/vala/valadynamicsignal.vala index a8d65f669..96e4216aa 100644 --- a/vala/valadynamicsignal.vala +++ b/vala/valadynamicsignal.vala @@ -37,8 +37,4 @@ public class Vala.DynamicSignal : Signal { this.return_type = return_type; this.source_reference = source_reference; } - - public override CodeBinding? create_code_binding (CodeGenerator codegen) { - return codegen.create_dynamic_signal_binding (this); - } } |