summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--gobject/Makefile.am3
-rw-r--r--gobject/valaccodeassignmentmodule.vala4
-rw-r--r--gobject/valaccodebinding.vala47
-rw-r--r--gobject/valaccodedynamicsignalmodule.vala (renamed from gobject/valaccodedynamicsignalbinding.vala)109
-rw-r--r--gobject/valaccodegenerator.vala14
-rw-r--r--gobject/valaccodemodule.vala12
-rw-r--r--vala/Makefile.am1
-rw-r--r--vala/valacodebinding.vala29
-rw-r--r--vala/valacodegenerator.vala4
-rw-r--r--vala/valacodenode.vala20
-rw-r--r--vala/valadynamicsignal.vala4
12 files changed, 79 insertions, 184 deletions
diff --git a/ChangeLog b/ChangeLog
index a9779379e..cdbc059a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
- }
}