[vala/emit: 4/6] Add CCodeFile.add_function_declaration and CCodeFunction.is_declaration



commit e90d80c0adfe9094353b67393df32e264618dcf4
Author: Jürg Billeter <j bitron ch>
Date:   Sat Aug 14 13:04:55 2010 +0200

    Add CCodeFile.add_function_declaration and CCodeFunction.is_declaration

 ccode/valaccodefile.vala              |    6 ++++
 ccode/valaccodefunction.vala          |    8 ++++-
 codegen/valaccodearraymodule.vala     |   16 ++++++------
 codegen/valaccodebasemodule.vala      |   34 +++++++++++++-------------
 codegen/valaccodedelegatemodule.vala  |    2 +-
 codegen/valaccodemethodmodule.vala    |    8 +++---
 codegen/valaccodestructmodule.vala    |    8 +++---
 codegen/valadbusclientmodule.vala     |   40 +++++++++++++++---------------
 codegen/valadbusmodule.vala           |    8 +++---
 codegen/valadbusservermodule.vala     |   20 ++++++++--------
 codegen/valadovabasemodule.vala       |    4 +-
 codegen/valadovadelegatemodule.vala   |    8 +++---
 codegen/valadovaobjectmodule.vala     |   42 ++++++++++++++++----------------
 codegen/valadovavaluemodule.vala      |    6 ++--
 codegen/valagasyncmodule.vala         |    8 +++---
 codegen/valagdbusclientmodule.vala    |   20 ++++++++--------
 codegen/valagdbusservermodule.vala    |   20 ++++++++--------
 codegen/valagerrormodule.vala         |    2 +-
 codegen/valagobjectmodule.vala        |   14 +++++-----
 codegen/valagsignalmodule.vala        |    2 +-
 codegen/valagtypemodule.vala          |   22 ++++++++--------
 codegen/valagvariantmodule.vala       |    4 +-
 codegen/valatyperegisterfunction.vala |    4 +++
 23 files changed, 160 insertions(+), 146 deletions(-)
---
diff --git a/ccode/valaccodefile.vala b/ccode/valaccodefile.vala
index 8bb8ecf..014f0fe 100644
--- a/ccode/valaccodefile.vala
+++ b/ccode/valaccodefile.vala
@@ -73,6 +73,12 @@ public class Vala.CCodeFile {
 		type_member_definition.append (node);
 	}
 
+	public void add_function_declaration (CCodeFunction func) {
+		var decl = func.copy ();
+		decl.is_declaration = true;
+		type_member_declaration.append (decl);
+	}
+
 	public void add_function (CCodeFunction func) {
 		type_member_definition.append (func);
 	}
diff --git a/ccode/valaccodefunction.vala b/ccode/valaccodefunction.vala
index d414fb2..bf7071f 100644
--- a/ccode/valaccodefunction.vala
+++ b/ccode/valaccodefunction.vala
@@ -43,16 +43,19 @@ public class Vala.CCodeFunction : CCodeNode {
 
 	public string attributes { get; set; }
 
+	public bool is_declaration { get; set; }
+
 	/**
 	 * The function body.
 	 */
 	public CCodeBlock block { get; set; }
 
 	private List<CCodeFormalParameter> parameters = new ArrayList<CCodeFormalParameter> ();
-	
+
 	public CCodeFunction (string name, string return_type = "void") {
 		this.name = name;
 		this.return_type = return_type;
+		this.block = new CCodeBlock ();
 	}
 	
 	/**
@@ -85,6 +88,7 @@ public class Vala.CCodeFunction : CCodeNode {
 			func.parameters.add (param);
 		}
 		
+		func.is_declaration = is_declaration;
 		func.block = block;
 		return func;
 	}
@@ -121,7 +125,7 @@ public class Vala.CCodeFunction : CCodeNode {
 			writer.write_string (" G_GNUC_DEPRECATED");
 		}
 
-		if (block == null) {
+		if (is_declaration) {
 			if (attributes != null) {
 				writer.write_string (" ");
 				writer.write_string (attributes);
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 2c7a345..452e29c 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -501,7 +501,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 		fun.modifiers = CCodeModifiers.STATIC;
 		fun.add_parameter (new CCodeFormalParameter ("array", "%s*".printf (st.get_cname ())));
 		fun.add_parameter (new CCodeFormalParameter ("array_length", "gint"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		var cdofree = new CCodeBlock ();
 
@@ -554,7 +554,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 		fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
 		fun.add_parameter (new CCodeFormalParameter ("array_length", "gint"));
 		fun.add_parameter (new CCodeFormalParameter ("destroy_func", "GDestroyNotify"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		var cdofree = new CCodeBlock ();
 
@@ -579,7 +579,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 		fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
 		fun.add_parameter (new CCodeFormalParameter ("array_length", "gint"));
 		fun.add_parameter (new CCodeFormalParameter ("destroy_func", "GDestroyNotify"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		// call _vala_array_destroy to free the array elements
 		var ccall = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_destroy"));
@@ -609,7 +609,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 		fun.add_parameter (new CCodeFormalParameter ("src", "gint"));
 		fun.add_parameter (new CCodeFormalParameter ("dest", "gint"));
 		fun.add_parameter (new CCodeFormalParameter ("length", "gint"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		var array = new CCodeCastExpression (new CCodeIdentifier ("array"), "char*");
 		var element_size = new CCodeIdentifier ("element_size");
@@ -651,7 +651,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 		var fun = new CCodeFunction ("_vala_array_length", "gint");
 		fun.modifiers = CCodeModifiers.STATIC;
 		fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		var block = new CCodeBlock ();
 
@@ -819,7 +819,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -883,7 +883,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -955,7 +955,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 37064cb..4bf29c4 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -551,7 +551,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 		fun.modifiers = CCodeModifiers.STATIC;
 		fun.add_parameter (new CCodeFormalParameter ("str1", "const char *"));
 		fun.add_parameter (new CCodeFormalParameter ("str2", "const char *"));
-		cfile.add_type_member_declaration (fun.copy ());
+		cfile.add_function_declaration (fun);
 
 		// (str1 != str2)
 		var cineq = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("str1"), new CCodeIdentifier ("str2"));
@@ -691,7 +691,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			regfun.attributes = "G_GNUC_UNUSED";
 		}
 
-		decl_space.add_type_member_declaration (regfun);
+		decl_space.add_function_declaration (regfun);
 
 		return true;
 	}
@@ -1306,7 +1306,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 		if (prop.is_private_symbol () || (!acc.readable && !acc.writable) || acc.access == SymbolAccessibility.PRIVATE) {
 			function.modifiers |= CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 	}
 
 	public override void visit_property_accessor (PropertyAccessor acc) {
@@ -1828,7 +1828,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			var ref_fun = new CCodeFunction ("block%d_data_ref".printf (block_id), struct_name + "*");
 			ref_fun.add_parameter (new CCodeFormalParameter ("_data%d_".printf (block_id), struct_name + "*"));
 			ref_fun.modifiers = CCodeModifiers.STATIC;
-			cfile.add_type_member_declaration (ref_fun.copy ());
+			cfile.add_function_declaration (ref_fun);
 			ref_fun.block = new CCodeBlock ();
 
 			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_atomic_int_inc"));
@@ -1840,7 +1840,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			var unref_fun = new CCodeFunction ("block%d_data_unref".printf (block_id), "void");
 			unref_fun.add_parameter (new CCodeFormalParameter ("_data%d_".printf (block_id), struct_name + "*"));
 			unref_fun.modifiers = CCodeModifiers.STATIC;
-			cfile.add_type_member_declaration (unref_fun.copy ());
+			cfile.add_function_declaration (unref_fun);
 			unref_fun.block = new CCodeBlock ();
 			
 			ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_atomic_int_dec_and_test"));
@@ -2496,7 +2496,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = cblock;
 		cfile.add_function (function);
@@ -2552,7 +2552,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = cblock;
 		cfile.add_function (function);
@@ -2623,7 +2623,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -2660,7 +2660,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -2702,7 +2702,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -2822,7 +2822,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			free_call.add_argument (new CCodeMemberAccess.pointer(new CCodeIdentifier("node"), "data"));
 			wrapper_block.add_statement (new CCodeExpressionStatement (free_call));
 			wrapper_block.add_statement (new CCodeReturnStatement (new CCodeConstant ("FALSE")));
-			cfile.add_type_member_declaration (function.copy ());
+			cfile.add_function_declaration (function);
 			wrapper.block = wrapper_block;
 			cfile.add_function (wrapper);
 
@@ -2854,7 +2854,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -4542,7 +4542,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 		block.add_statement (fragment);
 		block.add_statement (new CCodeReturnStatement (result));
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		cfunc.block = block;
 		cfile.add_function (cfunc);
@@ -4939,7 +4939,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		block.add_statement (cloop);
 		block.add_statement (new CCodeReturnStatement (new CCodeConstant ("FALSE")));
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -5161,7 +5161,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			block.add_statement (fragment);
 			block.add_statement (new CCodeReturnStatement (sink));
 
-			cfile.add_type_member_declaration (cfunc.copy ());
+			cfile.add_function_declaration (cfunc);
 
 			cfunc.block = block;
 			cfile.add_function (cfunc);
@@ -5582,7 +5582,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 			}
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = cblock;
 		cfile.add_function (function);
 	}
@@ -5650,7 +5650,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
 
 		pop_context ();
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = cblock;
 		cfile.add_function (function);
 	}
diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala
index 152ad5f..a176589 100644
--- a/codegen/valaccodedelegatemodule.vala
+++ b/codegen/valaccodedelegatemodule.vala
@@ -600,7 +600,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 
 		// append to file
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 31cc3f8..30a171e 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -188,7 +188,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
 		if (!(m is CreationMethod && cl != null && cl.is_abstract)) {
 			generate_cparameters (m, decl_space, cparam_map, function, null, carg_map, new CCodeFunctionCall (new CCodeIdentifier ("fake")));
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 		}
 
 		if (m is CreationMethod && cl != null) {
@@ -202,7 +202,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
 			cparam_map = new HashMap<int,CCodeFormalParameter> (direct_hash, direct_equal);
 			generate_cparameters (m, decl_space, cparam_map, function);
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 		}
 	}
 
@@ -351,7 +351,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
 				if (m.base_method != null || m.base_interface_method != null) {
 					// declare *_real_* function
 					function.modifiers |= CCodeModifiers.STATIC;
-					cfile.add_type_member_declaration (function.copy ());
+					cfile.add_function_declaration (function);
 				} else if (m.is_private_symbol ()) {
 					function.modifiers |= CCodeModifiers.STATIC;
 				}
@@ -371,7 +371,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
 					function.add_parameter (new CCodeFormalParameter ("data", Symbol.lower_case_to_camel_case (m.get_cname ()) + "Data*"));
 
 					function.modifiers |= CCodeModifiers.STATIC;
-					cfile.add_type_member_declaration (function.copy ());
+					cfile.add_function_declaration (function);
 				}
 			}
 		}
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index 5ca9d92..04b831c 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -112,14 +112,14 @@ public class Vala.CCodeStructModule : CCodeBaseModule {
 			function.modifiers = CCodeModifiers.STATIC;
 		}
 		function.add_parameter (new CCodeFormalParameter ("self", "const " + st.get_cname () + "*"));
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 
 		function = new CCodeFunction (st.get_free_function (), "void");
 		if (st.is_private_symbol ()) {
 			function.modifiers = CCodeModifiers.STATIC;
 		}
 		function.add_parameter (new CCodeFormalParameter ("self", st.get_cname () + "*"));
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 
 		if (st.is_disposable ()) {
 			function = new CCodeFunction (st.get_copy_function (), "void");
@@ -128,14 +128,14 @@ public class Vala.CCodeStructModule : CCodeBaseModule {
 			}
 			function.add_parameter (new CCodeFormalParameter ("self", "const " + st.get_cname () + "*"));
 			function.add_parameter (new CCodeFormalParameter ("dest", st.get_cname () + "*"));
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 
 			function = new CCodeFunction (st.get_destroy_function (), "void");
 			if (st.is_private_symbol ()) {
 				function.modifiers = CCodeModifiers.STATIC;
 			}
 			function.add_parameter (new CCodeFormalParameter ("self", st.get_cname () + "*"));
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 		}
 	}
 
diff --git a/codegen/valadbusclientmodule.vala b/codegen/valadbusclientmodule.vala
index 360d3c9..6d191e1 100644
--- a/codegen/valadbusclientmodule.vala
+++ b/codegen/valadbusclientmodule.vala
@@ -91,7 +91,7 @@ public class Vala.DBusClientModule : DBusModule {
 		}
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -648,7 +648,7 @@ public class Vala.DBusClientModule : DBusModule {
 		generate_dbus_property_getter_wrapper (prop, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -678,7 +678,7 @@ public class Vala.DBusClientModule : DBusModule {
 		generate_dbus_property_setter_wrapper (prop, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -819,7 +819,7 @@ public class Vala.DBusClientModule : DBusModule {
 		generate_dbus_connect_wrapper (sig, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -842,7 +842,7 @@ public class Vala.DBusClientModule : DBusModule {
 		generate_dbus_disconnect_wrapper (sig, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -975,7 +975,7 @@ public class Vala.DBusClientModule : DBusModule {
 		}
 
 		proxy_iface_init.modifiers = CCodeModifiers.STATIC;
-		cfile.add_type_member_declaration (proxy_iface_init.copy ());
+		cfile.add_function_declaration (proxy_iface_init);
 		proxy_iface_init.block = iface_block;
 		cfile.add_function (proxy_iface_init);
 	}
@@ -1049,7 +1049,7 @@ public class Vala.DBusClientModule : DBusModule {
 		proxy_new.add_parameter (new CCodeFormalParameter ("name", "const char*"));
 		proxy_new.add_parameter (new CCodeFormalParameter ("path", "const char*"));
 
-		decl_space.add_type_member_declaration (proxy_new);
+		decl_space.add_function_declaration (proxy_new);
 	}
 
 	public override void visit_interface (Interface iface) {
@@ -1080,7 +1080,7 @@ public class Vala.DBusClientModule : DBusModule {
 
 		var type_fun = new CCodeFunction(lower_cname + "_get_type", "GType");
 		type_fun.attributes = "G_GNUC_CONST";
-		cfile.add_type_member_declaration (type_fun);
+		cfile.add_function_declaration (type_fun);
 
 		var define_type = new CCodeFunctionCall (new CCodeIdentifier ("G_DEFINE_TYPE_EXTENDED"));
 		define_type.add_argument (new CCodeIdentifier (cname));
@@ -1283,7 +1283,7 @@ public class Vala.DBusClientModule : DBusModule {
 		get_prop.add_parameter (new CCodeFormalParameter ("property_id", "guint"));
 		get_prop.add_parameter (new CCodeFormalParameter ("value", "GValue *"));
 		get_prop.add_parameter (new CCodeFormalParameter ("pspec", "GParamSpec *"));
-		cfile.add_type_member_declaration (get_prop.copy ());
+		cfile.add_function_declaration (get_prop);
 		get_prop.block = new CCodeBlock ();
 		cfile.add_function (get_prop);
 
@@ -1293,7 +1293,7 @@ public class Vala.DBusClientModule : DBusModule {
 		set_prop.add_parameter (new CCodeFormalParameter ("property_id", "guint"));
 		set_prop.add_parameter (new CCodeFormalParameter ("value", "const GValue *"));
 		set_prop.add_parameter (new CCodeFormalParameter ("pspec", "GParamSpec *"));
-		cfile.add_type_member_declaration (set_prop.copy ());
+		cfile.add_function_declaration (set_prop);
 		set_prop.block = new CCodeBlock ();
 		cfile.add_function (set_prop);
 	}
@@ -1389,7 +1389,7 @@ public class Vala.DBusClientModule : DBusModule {
 
 		block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1486,7 +1486,7 @@ public class Vala.DBusClientModule : DBusModule {
 
 		filter_block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("DBUS_HANDLER_RESULT_NOT_YET_HANDLED")));
 
-		cfile.add_type_member_declaration (proxy_filter.copy ());
+		cfile.add_function_declaration (proxy_filter);
 		proxy_filter.block = filter_block;
 		cfile.add_function (proxy_filter);
 	}
@@ -1594,7 +1594,7 @@ public class Vala.DBusClientModule : DBusModule {
 		cdecl.add_declarator (new CCodeVariableDeclarator ("reply"));
 		block.add_statement (cdecl);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1911,7 +1911,7 @@ public class Vala.DBusClientModule : DBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2006,7 +2006,7 @@ public class Vala.DBusClientModule : DBusModule {
 
 		block.add_statement (postfragment);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2185,7 +2185,7 @@ public class Vala.DBusClientModule : DBusModule {
 		pending.add_argument (new CCodeConstant ("NULL"));
 		block.add_statement (new CCodeExpressionStatement (pending));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2248,7 +2248,7 @@ public class Vala.DBusClientModule : DBusModule {
 		pendingfree.add_argument (new CCodeIdentifier ("pending"));
 		block.add_statement (new CCodeExpressionStatement (pendingfree));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2370,7 +2370,7 @@ public class Vala.DBusClientModule : DBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2656,7 +2656,7 @@ public class Vala.DBusClientModule : DBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -2803,7 +2803,7 @@ public class Vala.DBusClientModule : DBusModule {
 		reply_unref.add_argument (new CCodeIdentifier ("_reply"));
 		block.add_statement (new CCodeExpressionStatement (reply_unref));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
diff --git a/codegen/valadbusmodule.vala b/codegen/valadbusmodule.vala
index 190267a..82fa878 100644
--- a/codegen/valadbusmodule.vala
+++ b/codegen/valadbusmodule.vala
@@ -170,8 +170,8 @@ public class Vala.DBusModule : GAsyncModule {
 	public override bool generate_enum_declaration (Enum en, CCodeFile decl_space) {
 		if (base.generate_enum_declaration (en, decl_space)) {
 			if (is_string_marshalled_enum (en)) {
-				decl_space.add_type_member_declaration (generate_enum_from_string_function_declaration (en));
-				decl_space.add_type_member_declaration (generate_enum_to_string_function_declaration (en));
+				decl_space.add_function_declaration (generate_enum_from_string_function_declaration (en));
+				decl_space.add_function_declaration (generate_enum_to_string_function_declaration (en));
 			}
 			return true;
 		}
@@ -1006,7 +1006,7 @@ public class Vala.DBusModule : GAsyncModule {
 		cfunc.add_parameter (new CCodeFormalParameter ("object", "void*"));
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -1049,7 +1049,7 @@ public class Vala.DBusModule : GAsyncModule {
 		cfunc.add_parameter (new CCodeFormalParameter ("object", "GObject*"));
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		block = new CCodeBlock ();
 		cfunc.block = block;
diff --git a/codegen/valadbusservermodule.vala b/codegen/valadbusservermodule.vala
index 5f2c3e4..e42eb28 100644
--- a/codegen/valadbusservermodule.vala
+++ b/codegen/valadbusservermodule.vala
@@ -406,13 +406,13 @@ public class Vala.DBusServerModule : DBusClientModule {
 			ready_block.add_statement (new CCodeExpressionStatement (free_call));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
 
 		if (m.coroutine) {
-			cfile.add_type_member_declaration (ready_function.copy ());
+			cfile.add_function_declaration (ready_function);
 
 			ready_function.block = ready_block;
 			cfile.add_function (ready_function);
@@ -552,7 +552,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 		message_unref.add_argument (new CCodeIdentifier ("_message"));
 		block.add_statement (new CCodeExpressionStatement (message_unref));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -576,7 +576,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 			cfunc.modifiers |= CCodeModifiers.STATIC;
 		}
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -638,7 +638,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 		cfunc.add_parameter (new CCodeFormalParameter ("connection", "DBusConnection*"));
 		cfunc.add_parameter (new CCodeFormalParameter ("_user_data_", "void*"));
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -865,7 +865,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 			handle_reply (block);
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1079,7 +1079,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 
 		handle_reply (block);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1253,7 +1253,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 			handle_reply (block);
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1464,7 +1464,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 
 		handle_reply (block);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -1509,7 +1509,7 @@ public class Vala.DBusServerModule : DBusClientModule {
 			cfunc.modifiers |= CCodeModifiers.STATIC;
 		}
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala
index 3304f7f..0666743 100644
--- a/codegen/valadovabasemodule.vala
+++ b/codegen/valadovabasemodule.vala
@@ -813,7 +813,7 @@ public class Vala.DovaBaseModule : CodeGenerator {
 			// create type_get/finalize functions
 			var type_get_fun = new CCodeFunction ("block%d_data_type_get".printf (block_id), "DovaType*");
 			type_get_fun.modifiers = CCodeModifiers.STATIC;
-			cfile.add_type_member_declaration (type_get_fun.copy ());
+			cfile.add_function_declaration (type_get_fun);
 			type_get_fun.block = new CCodeBlock ();
 
 			var cdecl = new CCodeDeclaration ("int");
@@ -851,7 +851,7 @@ public class Vala.DovaBaseModule : CodeGenerator {
 			var unref_fun = new CCodeFunction ("block%d_data_finalize".printf (block_id), "void");
 			unref_fun.add_parameter (new CCodeFormalParameter ("_data%d_".printf (block_id), struct_name + "*"));
 			unref_fun.modifiers = CCodeModifiers.STATIC;
-			cfile.add_type_member_declaration (unref_fun.copy ());
+			cfile.add_function_declaration (unref_fun);
 			unref_fun.block = free_block;
 
 			cfile.add_function (unref_fun);
diff --git a/codegen/valadovadelegatemodule.vala b/codegen/valadovadelegatemodule.vala
index d8b066e..d0439ba 100644
--- a/codegen/valadovadelegatemodule.vala
+++ b/codegen/valadovadelegatemodule.vala
@@ -40,24 +40,24 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 		if (d.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (type_fun);
+		decl_space.add_function_declaration (type_fun);
 
 		var type_init_fun = new CCodeFunction ("%s_type_init".printf (d.get_lower_case_cname ()));
 		if (d.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
 		type_init_fun.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
-		decl_space.add_type_member_declaration (type_init_fun);
+		decl_space.add_function_declaration (type_init_fun);
 
 		generate_type_declaration (d.return_type, decl_space);
 
 		var function = generate_new_function (d, decl_space);
 		function.block = null;
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 
 		function = generate_invoke_function (d, decl_space);
 		function.block = null;
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 	}
 
 	CCodeFunction generate_new_function (Delegate d, CCodeFile decl_space) {
diff --git a/codegen/valadovaobjectmodule.vala b/codegen/valadovaobjectmodule.vala
index d578b76..a4057b3 100644
--- a/codegen/valadovaobjectmodule.vala
+++ b/codegen/valadovaobjectmodule.vala
@@ -49,7 +49,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			value_copy_function.add_parameter (new CCodeFormalParameter ("src", "void *"));
 			value_copy_function.add_parameter (new CCodeFormalParameter ("src_index", "int32_t"));
 
-			cfile.add_type_member_declaration (value_copy_function);
+			cfile.add_function_declaration (value_copy_function);
 
 			var value_equals_function = new CCodeFunction ("dova_type_value_equals", "bool");
 			value_equals_function.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
@@ -58,14 +58,14 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			value_equals_function.add_parameter (new CCodeFormalParameter ("other", "void *"));
 			value_equals_function.add_parameter (new CCodeFormalParameter ("other_index", "int32_t"));
 
-			cfile.add_type_member_declaration (value_equals_function);
+			cfile.add_function_declaration (value_equals_function);
 
 			var value_hash_function = new CCodeFunction ("dova_type_value_hash", "uint32_t");
 			value_hash_function.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
 			value_hash_function.add_parameter (new CCodeFormalParameter ("value", "void *"));
 			value_hash_function.add_parameter (new CCodeFormalParameter ("value_index", "int32_t"));
 
-			cfile.add_type_member_declaration (value_hash_function);
+			cfile.add_function_declaration (value_hash_function);
 		}
 
 		if (cl.base_class != null) {
@@ -82,7 +82,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (var type_param in cl.get_type_parameters ()) {
 			type_fun.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType *"));
 		}
-		decl_space.add_type_member_declaration (type_fun);
+		decl_space.add_function_declaration (type_fun);
 
 		var type_init_fun = new CCodeFunction ("%s_type_init".printf (cl.get_lower_case_cname ()));
 		if (cl.is_internal_symbol ()) {
@@ -92,7 +92,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (var type_param in cl.get_type_parameters ()) {
 			type_init_fun.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType *"));
 		}
-		decl_space.add_type_member_declaration (type_init_fun);
+		decl_space.add_function_declaration (type_init_fun);
 	}
 
 	void generate_virtual_method_declaration (Method m, CCodeFile decl_space, CCodeStruct type_struct) {
@@ -309,7 +309,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (add_symbol_declaration (decl_space, type_class, "dova_type_set_value_copy")) {
 			return;
 		}
-		decl_space.add_type_member_declaration (create_set_value_copy_function (true));
+		decl_space.add_function_declaration (create_set_value_copy_function (true));
 	}
 
 	CCodeFunction create_set_value_equals_function (bool decl_only = false) {
@@ -333,7 +333,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (add_symbol_declaration (decl_space, type_class, "dova_type_set_value_equals")) {
 			return;
 		}
-		decl_space.add_type_member_declaration (create_set_value_equals_function (true));
+		decl_space.add_function_declaration (create_set_value_equals_function (true));
 	}
 
 	CCodeFunction create_set_value_hash_function (bool decl_only = false) {
@@ -357,7 +357,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (add_symbol_declaration (decl_space, type_class, "dova_type_set_value_hash")) {
 			return;
 		}
-		decl_space.add_type_member_declaration (create_set_value_hash_function (true));
+		decl_space.add_function_declaration (create_set_value_hash_function (true));
 	}
 
 	CCodeFunction create_set_value_to_any_function (bool decl_only = false) {
@@ -381,7 +381,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (add_symbol_declaration (decl_space, type_class, "dova_type_set_value_to_any")) {
 			return;
 		}
-		decl_space.add_type_member_declaration (create_set_value_to_any_function (true));
+		decl_space.add_function_declaration (create_set_value_to_any_function (true));
 	}
 
 	CCodeFunction create_set_value_from_any_function (bool decl_only = false) {
@@ -405,7 +405,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (add_symbol_declaration (decl_space, type_class, "dova_type_set_value_from_any")) {
 			return;
 		}
-		decl_space.add_type_member_declaration (create_set_value_from_any_function (true));
+		decl_space.add_function_declaration (create_set_value_from_any_function (true));
 	}
 
 	public CCodeBlock generate_type_get_function (TypeSymbol cl, Class? base_class) {
@@ -758,7 +758,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 		function.add_parameter (new CCodeFormalParameter ("this", cl.get_cname () + "*"));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 
 		var cblock = new CCodeBlock ();
@@ -1116,7 +1116,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		if (prop.is_internal_symbol () || acc.is_internal_symbol ()) {
 			function.modifiers |= CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 
 		if (prop.is_abstract || prop.is_virtual) {
 			string param_list = "(%s *this".printf (((ObjectTypeSymbol) prop.parent_symbol).get_cname ());
@@ -1130,7 +1130,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			override_func.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeFormalParameter ("(*function) %s".printf (param_list), acc.readable ? acc.value_type.get_cname () : "void"));
 
-			decl_space.add_type_member_declaration (override_func);
+			decl_space.add_function_declaration (override_func);
 		}
 	}
 
@@ -1281,7 +1281,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (var type_param in iface.get_type_parameters ()) {
 			type_fun.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType *"));
 		}
-		decl_space.add_type_member_declaration (type_fun);
+		decl_space.add_function_declaration (type_fun);
 
 		var type_init_fun = new CCodeFunction ("%s_type_init".printf (iface.get_lower_case_cname ()));
 		if (iface.is_internal_symbol ()) {
@@ -1291,7 +1291,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (var type_param in iface.get_type_parameters ()) {
 			type_init_fun.add_parameter (new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "DovaType *"));
 		}
-		decl_space.add_type_member_declaration (type_init_fun);
+		decl_space.add_function_declaration (type_init_fun);
 	}
 
 
@@ -1326,13 +1326,13 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 		generate_cparameters (m, decl_space, function, null, new CCodeFunctionCall (new CCodeIdentifier ("fake")));
 
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 
 		if (m.is_abstract || m.is_virtual) {
 			var base_func = function.copy ();
 			base_func.name = "%sbase_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name);
 			base_func.insert_parameter (0, new CCodeFormalParameter ("base_type", "DovaType *"));
-			decl_space.add_type_member_declaration (base_func);
+			decl_space.add_function_declaration (base_func);
 
 			string param_list = "(%s *this".printf (((ObjectTypeSymbol) m.parent_symbol).get_cname ());
 			foreach (var param in m.get_parameters ()) {
@@ -1347,7 +1347,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			var override_func = new CCodeFunction ("%soverride_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name));
 			override_func.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeFormalParameter ("(*function) %s".printf (param_list), (m.return_type is GenericType) ? "void" : m.return_type.get_cname ()));
-			decl_space.add_type_member_declaration (override_func);
+			decl_space.add_function_declaration (override_func);
 		}
 
 		if (m is CreationMethod && m.parent_symbol is Class) {
@@ -1362,7 +1362,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			generate_cparameters (m, decl_space, function);
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 		}
 	}
 
@@ -1412,7 +1412,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			if (m.base_method != null || m.base_interface_method != null) {
 				// declare *_real_* function
 				function.modifiers |= CCodeModifiers.STATIC;
-				cfile.add_type_member_declaration (function.copy ());
+				cfile.add_function_declaration (function);
 			} else if (m.is_internal_symbol ()) {
 				function.modifiers |= CCodeModifiers.STATIC;
 			}
@@ -1781,7 +1781,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 				vfunc.modifiers |= CCodeModifiers.STATIC;
 			}
 
-			cfile.add_type_member_declaration (vfunc.copy ());
+			cfile.add_function_declaration (vfunc);
 
 			vfunc.block = vblock;
 
diff --git a/codegen/valadovavaluemodule.vala b/codegen/valadovavaluemodule.vala
index 1f12d61..e876869 100644
--- a/codegen/valadovavaluemodule.vala
+++ b/codegen/valadovavaluemodule.vala
@@ -45,14 +45,14 @@ public class Vala.DovaValueModule : DovaObjectModule {
 		if (st.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (type_fun);
+		decl_space.add_function_declaration (type_fun);
 
 		var type_init_fun = new CCodeFunction ("%s_type_init".printf (st.get_lower_case_cname ()));
 		type_init_fun.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
 		if (st.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (type_init_fun);
+		decl_space.add_function_declaration (type_init_fun);
 
 		var function = new CCodeFunction (st.get_copy_function (), "void");
 		if (st.is_internal_symbol ()) {
@@ -64,7 +64,7 @@ public class Vala.DovaValueModule : DovaObjectModule {
 		function.add_parameter (new CCodeFormalParameter ("src", st.get_cname () + "*"));
 		function.add_parameter (new CCodeFormalParameter ("src_index", "int32_t"));
 
-		decl_space.add_type_member_declaration (function);
+		decl_space.add_function_declaration (function);
 	}
 
 	public override void visit_struct (Struct st) {
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index e8c93b9..a62167d 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -275,7 +275,7 @@ public class Vala.GAsyncModule : GSignalModule {
 		if (m.base_method != null || m.base_interface_method != null) {
 			// declare *_real_* function
 			asyncfunc.modifiers |= CCodeModifiers.STATIC;
-			cfile.add_type_member_declaration (asyncfunc.copy ());
+			cfile.add_function_declaration (asyncfunc);
 		} else if (m.is_private_symbol ()) {
 			asyncfunc.modifiers |= CCodeModifiers.STATIC;
 		}
@@ -296,7 +296,7 @@ public class Vala.GAsyncModule : GSignalModule {
 		var block = function.block;
 		function.block = null;
  
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -319,7 +319,7 @@ public class Vala.GAsyncModule : GSignalModule {
 				asyncfunc.modifiers |= CCodeModifiers.STATIC;
 			}
 
-			decl_space.add_type_member_declaration (asyncfunc);
+			decl_space.add_function_declaration (asyncfunc);
 
 			var finishfunc = new CCodeFunction (m.get_finish_cname ());
 			cparam_map = new HashMap<int,CCodeFormalParameter> (direct_hash, direct_equal);
@@ -331,7 +331,7 @@ public class Vala.GAsyncModule : GSignalModule {
 				finishfunc.modifiers |= CCodeModifiers.STATIC;
 			}
 
-			decl_space.add_type_member_declaration (finishfunc);
+			decl_space.add_function_declaration (finishfunc);
 		} else {
 			base.generate_method_declaration (m, decl_space);
 		}
diff --git a/codegen/valagdbusclientmodule.vala b/codegen/valagdbusclientmodule.vala
index 6a5e0ce..22d35c5 100644
--- a/codegen/valagdbusclientmodule.vala
+++ b/codegen/valagdbusclientmodule.vala
@@ -53,7 +53,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 		}
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -140,7 +140,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 		}
 
 		proxy_iface_init.modifiers = CCodeModifiers.STATIC;
-		cfile.add_type_member_declaration (proxy_iface_init.copy ());
+		cfile.add_function_declaration (proxy_iface_init);
 		proxy_iface_init.block = iface_block;
 		cfile.add_function (proxy_iface_init);
 	}
@@ -183,7 +183,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 		// declare proxy_get_type function
 		var proxy_get_type = new CCodeFunction (get_type_name, "GType");
 		proxy_get_type.attributes = "G_GNUC_CONST";
-		decl_space.add_type_member_declaration (proxy_get_type);
+		decl_space.add_function_declaration (proxy_get_type);
 	}
 
 	public override void visit_interface (Interface iface) {
@@ -354,7 +354,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 
 		block.add_statement (postfragment);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -371,7 +371,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -558,7 +558,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -605,7 +605,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 		ccall.add_argument (new CCodeIdentifier ("_user_data_"));
 		block.add_statement (new CCodeExpressionStatement (ccall));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -661,7 +661,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -802,7 +802,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 			block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_result")));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -902,7 +902,7 @@ public class Vala.GDBusClientModule : GDBusModule {
 		unref_reply.add_argument (new CCodeIdentifier ("_reply"));
 		block.add_statement (new CCodeExpressionStatement (unref_reply));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index 6fc6683..2ae0dab 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -334,13 +334,13 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 			ready_block.add_statement (new CCodeExpressionStatement (unref_call));
 		}
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
 
 		if (m.coroutine) {
-			cfile.add_type_member_declaration (ready_function.copy ());
+			cfile.add_function_declaration (ready_function);
 
 			ready_function.block = ready_block;
 			cfile.add_function (ready_function);
@@ -424,7 +424,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 		ccall.add_argument (new CCodeConstant ("NULL"));
 		block.add_statement (new CCodeExpressionStatement (ccall));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		function.block = block;
 		cfile.add_function (function);
 
@@ -502,7 +502,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 
 		block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("_reply")));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -573,7 +573,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 
 		block.add_statement (postfragment);
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 		function.block = block;
 		cfile.add_function (function);
@@ -617,7 +617,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -679,7 +679,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -745,7 +745,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 
 		cfunc.modifiers |= CCodeModifiers.STATIC;
 
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		var block = new CCodeBlock ();
 		cfunc.block = block;
@@ -1089,7 +1089,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 		if (sym.is_private_symbol ()) {
 			cfunc.modifiers |= CCodeModifiers.STATIC;
 		}
-		decl_space.add_type_member_declaration (cfunc);
+		decl_space.add_function_declaration (cfunc);
 	}
 
 	void visit_object_type_symbol (ObjectTypeSymbol sym) {
@@ -1167,7 +1167,7 @@ public class Vala.GDBusServerModule : GDBusClientModule {
 		cfunc = new CCodeFunction ("_" + sym.get_lower_case_cprefix () + "unregister_object");
 		cfunc.add_parameter (new CCodeFormalParameter ("user_data", "gpointer"));
 		cfunc.modifiers |= CCodeModifiers.STATIC;
-		cfile.add_type_member_declaration (cfunc.copy ());
+		cfile.add_function_declaration (cfunc);
 
 		block = new CCodeBlock ();
 		cfunc.block = block;
diff --git a/codegen/valagerrormodule.vala b/codegen/valagerrormodule.vala
index 7512247..19db146 100644
--- a/codegen/valagerrormodule.vala
+++ b/codegen/valagerrormodule.vala
@@ -53,7 +53,7 @@ public class Vala.GErrorModule : CCodeDelegateModule {
 
 		var cquark_fun = new CCodeFunction (quark_fun_name, gquark_type.data_type.get_cname ());
 
-		decl_space.add_type_member_declaration (cquark_fun);
+		decl_space.add_function_declaration (cquark_fun);
 	}
 
 	public override void visit_error_domain (ErrorDomain edomain) {
diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala
index 73fba74..61bf9c6 100644
--- a/codegen/valagobjectmodule.vala
+++ b/codegen/valagobjectmodule.vala
@@ -274,7 +274,7 @@ public class Vala.GObjectModule : GTypeModule {
 
 		block.add_statement (cswitch);
 
-		cfile.add_type_member_declaration (get_prop.copy ());
+		cfile.add_function_declaration (get_prop);
 
 		get_prop.block = block;
 		
@@ -395,7 +395,7 @@ public class Vala.GObjectModule : GTypeModule {
 			cswitch.add_statement (new CCodeBreakStatement ());
 		}
 
-		cfile.add_type_member_declaration (set_prop.copy ());
+		cfile.add_function_declaration (set_prop);
 
 		set_prop.block = block;
 		
@@ -475,7 +475,7 @@ public class Vala.GObjectModule : GTypeModule {
 			function.add_parameter (new CCodeFormalParameter ("n_construct_properties", "guint"));
 			function.add_parameter (new CCodeFormalParameter ("construct_properties", "GObjectConstructParam *"));
 		
-			cfile.add_type_member_declaration (function.copy ());
+			cfile.add_function_declaration (function);
 
 
 			var cblock = new CCodeBlock ();
@@ -586,7 +586,7 @@ public class Vala.GObjectModule : GTypeModule {
 		generate_gobject_property_getter_wrapper (prop, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -612,7 +612,7 @@ public class Vala.GObjectModule : GTypeModule {
 		generate_gobject_property_setter_wrapper (prop, block);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -666,7 +666,7 @@ public class Vala.GObjectModule : GTypeModule {
 		generate_gobject_connect_wrapper (sig, block, false);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
@@ -690,7 +690,7 @@ public class Vala.GObjectModule : GTypeModule {
 		generate_gobject_connect_wrapper (sig, block, true);
 
 		// append to C source file
-		cfile.add_type_member_declaration (func.copy ());
+		cfile.add_function_declaration (func);
 
 		func.block = block;
 		cfile.add_function (func);
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index 0e0b94d..cd1ec2c 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -198,7 +198,7 @@ public class Vala.GSignalModule : GObjectModule {
 		signal_marshaller.add_parameter (new CCodeFormalParameter ("invocation_hint", "gpointer"));
 		signal_marshaller.add_parameter (new CCodeFormalParameter ("marshal_data", "gpointer"));
 		
-		cfile.add_type_member_declaration (signal_marshaller.copy ());
+		cfile.add_function_declaration (signal_marshaller);
 		
 		var marshaller_body = new CCodeBlock ();
 		
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 07c02bb..a4839ea 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -99,8 +99,8 @@ public class Vala.GTypeModule : GErrorModule {
 			ref_fun.add_parameter (new CCodeFormalParameter ("instance", "gpointer"));
 			unref_fun.add_parameter (new CCodeFormalParameter ("instance", "gpointer"));
 
-			decl_space.add_type_member_declaration (ref_fun.copy ());
-			decl_space.add_type_member_declaration (unref_fun.copy ());
+			decl_space.add_function_declaration (ref_fun);
+			decl_space.add_function_declaration (unref_fun);
 
 			// GParamSpec and GValue functions
 			string function_name = cl.get_lower_case_cname ("param_spec_");
@@ -118,7 +118,7 @@ public class Vala.GTypeModule : GErrorModule {
 				function.attributes = "G_GNUC_UNUSED";
 			}
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 
 			function = new CCodeFunction (cl.get_set_value_function (), "void");
 			function.add_parameter (new CCodeFormalParameter ("value", "GValue*"));
@@ -130,7 +130,7 @@ public class Vala.GTypeModule : GErrorModule {
 				function.attributes = "G_GNUC_UNUSED";
 			}
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 
 			function = new CCodeFunction (cl.get_take_value_function (), "void");
 			function.add_parameter (new CCodeFormalParameter ("value", "GValue*"));
@@ -142,7 +142,7 @@ public class Vala.GTypeModule : GErrorModule {
 				function.attributes = "G_GNUC_UNUSED";
 			}
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 
 			function = new CCodeFunction (cl.get_get_value_function (), "gpointer");
 			function.add_parameter (new CCodeFormalParameter ("value", "const GValue*"));
@@ -153,7 +153,7 @@ public class Vala.GTypeModule : GErrorModule {
 				function.attributes = "G_GNUC_UNUSED";
 			}
 
-			decl_space.add_type_member_declaration (function);
+			decl_space.add_function_declaration (function);
 		} else if (!is_gtypeinstance) {
 			if (cl.base_class == null) {
 				var function = new CCodeFunction (cl.get_lower_case_cprefix () + "free", "void");
@@ -163,7 +163,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 				function.add_parameter (new CCodeFormalParameter ("self", cl.get_cname () + "*"));
 
-				decl_space.add_type_member_declaration (function);
+				decl_space.add_function_declaration (function);
 			}
 		}
 
@@ -1528,7 +1528,7 @@ public class Vala.GTypeModule : GErrorModule {
 		if (cl.is_compact) {
 			// Add declaration, since the instance_init function is explicitly called
 			// by the creation methods
-			cfile.add_type_member_declaration (instance_init.copy ());
+			cfile.add_function_declaration (instance_init);
 		}
 
 		var init_block = new CCodeBlock ();
@@ -1550,7 +1550,7 @@ public class Vala.GTypeModule : GErrorModule {
 		function.modifiers = CCodeModifiers.STATIC;
 
 		function.add_parameter (new CCodeFormalParameter ("klass", cl.get_cname () + "Class *"));
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		
 		var cblock = new CCodeBlock ();
 
@@ -1569,7 +1569,7 @@ public class Vala.GTypeModule : GErrorModule {
 		function.modifiers = CCodeModifiers.STATIC;
 
 		function.add_parameter (new CCodeFormalParameter ("klass", cl.get_cname () + "Class *"));
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 		
 		var cblock = new CCodeBlock ();
 
@@ -1594,7 +1594,7 @@ public class Vala.GTypeModule : GErrorModule {
 
 		function.add_parameter (new CCodeFormalParameter ("obj", fundamental_class.get_cname () + "*"));
 
-		cfile.add_type_member_declaration (function.copy ());
+		cfile.add_function_declaration (function);
 
 
 		var cblock = new CCodeBlock ();
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index 8ca54ab..91a9c00 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -165,8 +165,8 @@ public class Vala.GVariantModule : GAsyncModule {
 	public override bool generate_enum_declaration (Enum en, CCodeFile decl_space) {
 		if (base.generate_enum_declaration (en, decl_space)) {
 			if (is_string_marshalled_enum (en)) {
-				decl_space.add_type_member_declaration (generate_enum_from_string_function_declaration (en));
-				decl_space.add_type_member_declaration (generate_enum_to_string_function_declaration (en));
+				decl_space.add_function_declaration (generate_enum_from_string_function_declaration (en));
+				decl_space.add_function_declaration (generate_enum_to_string_function_declaration (en));
 			}
 			return true;
 		}
diff --git a/codegen/valatyperegisterfunction.vala b/codegen/valatyperegisterfunction.vala
index 5d541e0..0490b1a 100644
--- a/codegen/valatyperegisterfunction.vala
+++ b/codegen/valatyperegisterfunction.vala
@@ -83,7 +83,9 @@ public abstract class Vala.TypeRegisterFunction {
 			var get_fun = new CCodeFunction ("%s_get_type".printf (get_type_declaration ().get_lower_case_cname (null)), "GType");
 			get_fun.attributes = "G_GNUC_CONST";
 
+			get_fun.is_declaration = true;
 			declaration_fragment.append (get_fun.copy ());
+			get_fun.is_declaration = false;
 
 			get_fun.block = new CCodeBlock ();
 			get_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier (type_id_name)));
@@ -258,7 +260,9 @@ public abstract class Vala.TypeRegisterFunction {
 			type_block.add_statement (new CCodeReturnStatement (new CCodeIdentifier (type_id_name)));
 		}
 
+		fun.is_declaration = true;
 		declaration_fragment.append (fun.copy ());
+		fun.is_declaration = false;
 
 		fun.block = type_block;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]