[vala/wip/attributes: 87/121] Fixing last bits



commit 962fb70e486919041663276e3e96c193a3ec47f7
Author: Luca Bruno <lucabru src gnome org>
Date:   Thu Jun 30 13:05:27 2011 +0200

    Fixing last bits

 codegen/valaccodebasemodule.vala           |  151 +++++++++++++++------------
 codegen/valaccodestructmodule.vala         |   10 +--
 codegen/valaclassregisterfunction.vala     |    4 +-
 codegen/valactype.vala                     |    4 -
 codegen/valadovabasemodule.vala            |   60 ++++++++----
 codegen/valadovadelegatemodule.vala        |   16 ++--
 codegen/valadovaerrormodule.vala           |    8 +-
 codegen/valadovamemberaccessmodule.vala    |    8 +-
 codegen/valadovamethodcallmodule.vala      |    4 +-
 codegen/valadovaobjectmodule.vala          |  138 +++++++++++++-------------
 codegen/valadovavaluemodule.vala           |   66 ++++++------
 codegen/valagasyncmodule.vala              |    2 +-
 codegen/valagdbusmodule.vala               |    2 +-
 codegen/valagirwriter.vala                 |   70 +++++++-------
 codegen/valagsignalmodule.vala             |    2 +-
 codegen/valagtypemodule.vala               |   16 ++--
 codegen/valainterfaceregisterfunction.vala |    4 +-
 vala/valaattribute.vala                    |    8 ++-
 vala/valadelegate.vala                     |    7 +-
 vala/valaerrordomain.vala                  |    3 -
 vala/valagenieparser.vala                  |    4 +-
 vala/valagirparser.vala                    |   11 +--
 vala/valalambdaexpression.vala             |    2 +-
 vala/valamethod.vala                       |   10 +-
 vala/valaparser.vala                       |    3 +-
 vala/valastruct.vala                       |    8 +-
 vapigen/valagidlparser.vala                |   13 +--
 27 files changed, 328 insertions(+), 306 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index bb3e1ca..7864374 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -307,8 +307,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 	public static int ccode_attribute_hash = CodeNode.get_attribute_hash ();
 
-	public static int dynamic_method_id;
-
 	public CCodeBaseModule () {
 		predefined_marshal_set = new HashSet<string> (str_hash, str_equal);
 		predefined_marshal_set.add ("VOID:VOID");
@@ -893,7 +891,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			decl_space.add_type_member_declaration (flock);
 		}
 
-		if (f.variable_type is ArrayType && !get_ccode_no_array_length (get_ccode) (f)) {
+		if (f.variable_type is ArrayType && !get_ccode_no_array_length (f)) {
 			var array_type = (ArrayType) f.variable_type;
 
 			if (!array_type.fixed_length) {
@@ -969,7 +967,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 				ccode.add_assignment (lhs, rhs);
 
-				if (f.variable_type is ArrayType && !get_ccode_no_array_length (get_ccode) (f) &&
+				if (f.variable_type is ArrayType && !get_ccode_no_array_length (f) &&
 				    f.initializer is ArrayCreationExpression) {
 					var array_type = (ArrayType) f.variable_type;
 					var field_value = get_field_cvalue (f, load_this_parameter ((TypeSymbol) f.parent_symbol));
@@ -1074,7 +1072,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 			cfile.add_type_member_declaration (var_def);
 
 			/* add array length fields where necessary */
-			if (f.variable_type is ArrayType && !get_ccode_no_array_length (get_ccode) (f)) {
+			if (f.variable_type is ArrayType && !get_ccode_no_array_length (f)) {
 				var array_type = (ArrayType) f.variable_type;
 
 				if (!array_type.fixed_length) {
@@ -2244,12 +2242,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 				}
 			} else if (cl != null && cl.is_immutable) {
 				// allow duplicates of immutable instances as for example strings
-				dup_function = get_ccode_dup_function (type.data_type) ();
+				dup_function = get_ccode_dup_function (type.data_type);
 			} else if (cl != null && get_ccode_is_gboxed (cl)) {
 				// allow duplicates of gboxed instances
 				dup_function = generate_dup_func_wrapper (type);
 			} else if (type is ValueType) {
-				dup_function = get_ccode_dup_function (type.data_type) ();
+				dup_function = get_ccode_dup_function (type.data_type);
 				if (dup_function == "" && type.nullable) {
 					dup_function = generate_struct_dup_wrapper ((ValueType) type);
 				}
@@ -3204,7 +3202,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		}
 
 		// return array length if appropriate
-		if (((current_method != null && !get_ccode_no_array_length (current_method) || current_property_accessor != null) && current_return_type is ArrayType) {
+		if (((current_method != null && !get_ccode_no_array_length (current_method)) || current_property_accessor != null) && current_return_type is ArrayType) {
 			var return_expr_decl = get_temp_variable (stmt.return_expression.value_type, true, stmt, false);
 
 			ccode.add_assignment (get_variable_cexpression (return_expr_decl.name), get_cvalue (stmt.return_expression));
@@ -4953,16 +4951,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	}
 
 	public override void visit_lambda_expression (LambdaExpression lambda) {
-		// use instance position from delegate
-		var dt = (DelegateType) lambda.target_type;
-		foreach (var attr in lambda.attributes) {
-			var copy = new Attribute (attr.name, attr.source_reference);
-			foreach (var arg in attr.args) {
-				copy.add_argument (arg, attr.args[arg]);
-			}
-			lambda.method.attributes.append (copy);
-		}
-
 		lambda.accept_children (this);
 
 		bool expr_owned = lambda.value_type.value_owned;
@@ -5601,7 +5589,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
 	public static string get_ccode_upper_case_name (Symbol sym, string? infix = null) {
 		if (sym is Property) {
-			return "%s_%s".printf (sym.parent_symbol.get_lower_case_cname (null), Symbol.camel_case_to_lower_case (sym.name)).up ();
+			return "%s_%s".printf (get_ccode_lower_case_name (sym.parent_symbol), Symbol.camel_case_to_lower_case (sym.name)).up ();
 		} else {
 			return get_ccode_lower_case_name (sym, infix).up ();
 		}
@@ -5682,7 +5670,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	}
 
 	public static string get_ccode_marshaller_type_name (CodeNode node) {
-		return get_ccode_attribute(sym).marshaller_type_name;
+		return get_ccode_attribute(node).marshaller_type_name;
 	}
 
 	public static string get_ccode_get_value_function (CodeNode sym) {
@@ -5707,9 +5695,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 		if (cl != null && a != null) {
 			return a;
 		} else if ((cl != null && cl.is_compact) || sym is Struct || sym is Enum || sym is Delegate) {
-			return null;
+			return "";
 		} else {
-			return get_ccode_upper_case_cname (sym, "IS_");
+			return get_ccode_upper_case_name (sym, "IS_");
 		}
 	}
 
@@ -5746,11 +5734,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	}
 
 	public static bool get_ccode_no_array_length (CodeNode node) {
-		return get_ccode_attribute(sym).no_array_length;
+		return get_ccode_attribute(node).no_array_length;
 	}
 
 	public static string? get_ccode_array_length_type (CodeNode node) {
-		return get_ccode_attribute(sym).array_length_type;
+		return get_ccode_attribute(node).array_length_type;
 	}
 
 	public static double get_ccode_array_length_pos (CodeNode node) {
@@ -5801,7 +5789,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	}
 
 	public static bool get_ccode_simple_generics (Method m) {
-		return node.get_attribute_bool ("CCode", "simple_generics");
+		return m.get_attribute_bool ("CCode", "simple_generics");
 	}
 
 	public static string get_ccode_real_name (Method m) {
@@ -5829,7 +5817,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 	}
 
 	public static bool get_ccode_has_type_id (TypeSymbol sym) {
-		var a = st.get_attribute ("CCode");
+		var a = sym.get_attribute ("CCode");
 		if (a != null && a.has_argument ("has_type_id")) {
 			return a.get_bool ("has_type_id");
 		}
@@ -6233,7 +6221,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 	public string type_name {
 		get {
 			if (_type_name == null) {
-				_type_name = "%sIface".printf (((Interface) node).name);
+				_type_name = "%sIface".printf (CCodeBaseModule.get_ccode_name (sym));
 			}
 			return _type_name;
 		}
@@ -6420,11 +6408,13 @@ public class Vala.CCodeAttribute : AttributeCache {
 				var param = (Parameter) node;
 				var sym = param.parent_symbol;
 				if (sym is Method) {
-					_pos = ((Method) sym).get_parameters().index_of (param) + 1;
+					_pos = ((Method) sym).get_parameters().index_of (param) + 1.0;
 				} else if (sym is Delegate) {
-					_pos = ((Delegate) sym).get_parameters().index_of (param) + 1;
+					_pos = ((Delegate) sym).get_parameters().index_of (param) + 1.0;
 				} else if (sym is Signal) {
-					_pos = ((Signal) sym).get_parameters().index_of (param) + 1;
+					_pos = ((Signal) sym).get_parameters().index_of (param) + 1.0;
+				} else {
+					_pos = 0.0;
 				}
 			}
 			return _pos;
@@ -6505,6 +6495,9 @@ public class Vala.CCodeAttribute : AttributeCache {
 	private string _finish_name;
 	private string _finish_vfunc_name;
 	private string _finish_real_name;
+	private string _real_name;
+
+	private static int dynamic_method_id;
 
 	public CCodeAttribute (CodeNode node) {
 		this.node = node;
@@ -6561,6 +6554,19 @@ public class Vala.CCodeAttribute : AttributeCache {
 			Report.deprecated (node.source_reference, "NoArrayLength attribute is deprecated, use [CCode (array_length = false)] instead.");
 			no_array_length = true;
 		}
+		if (_name == null && sym != null && !sym.external && sym is Struct) {
+			var st = (Struct) sym;
+			if (st.is_boolean_type ()) {
+				// typedef for boolean types
+				_name = "bool";
+			} else if (st.is_integer_type ()) {
+				// typedef for integral types
+				_name = "%sint%d_t".printf (st.signed ? "" : "u", st.width);
+			} else if (st.is_floating_type ()) {
+				// typedef for floating types
+				_name = st.width == 64 ? "double" : "float";
+			}
+		}
 	}
 
 	private string get_default_name () {
@@ -6592,7 +6598,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			} else if (sym is Method) {
 				var m = (Method) sym;
 				if (m.is_async_callback) {
-					return "%s_co".printf (get_ccode_real_name (m.parent_symbol));
+					return "%s_co".printf (CCodeBaseModule.get_ccode_real_name ((Method) m.parent_symbol));
 				}
 				if (sym.name == "main" && sym.parent_symbol.name == null) {
 					// avoid conflict with generated main function
@@ -6690,6 +6696,8 @@ public class Vala.CCodeAttribute : AttributeCache {
 			} else {
 				return cname;
 			}
+		} else if (node is CType) {
+			return ((CType) node).ctype_name;
 		} else {
 			Report.error (node.source_reference, "Unresolved type reference");
 			return "";
@@ -6715,7 +6723,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 		if (sym is ObjectTypeSymbol) {
 			return name;
 		} else if (sym is Enum || sym is ErrorDomain) {
-			return "%s_".printf (get_ccode_upper_case_name (sym));
+			return "%s_".printf (CCodeBaseModule.get_ccode_upper_case_name (sym));
 		} else if (sym is Namespace) {
 			if (sym.name != null) {
 				var parent_prefix = "";
@@ -6739,6 +6747,9 @@ public class Vala.CCodeAttribute : AttributeCache {
 			} else {
 				return "%s%s_".printf (CCodeBaseModule.get_ccode_lower_case_prefix (sym.parent_symbol), Symbol.camel_case_to_lower_case (sym.name));
 			}
+		} else if (sym is Method) {
+			// for lambda expressions
+			return "";
 		} else {
 			return "%s_".printf (CCodeBaseModule.get_ccode_lower_case_name (sym));
 		}
@@ -6758,9 +6769,10 @@ public class Vala.CCodeAttribute : AttributeCache {
 				csuffix = csuffix.substring (0, csuffix.length - "_class".length) + "class";
 			}
 			return csuffix;
-		} else {
+		} else if (sym.name != null) {
 			return Symbol.camel_case_to_lower_case (sym.name);
 		}
+		return "";
 	}
 
 	private string get_default_ref_function () {
@@ -6833,28 +6845,33 @@ public class Vala.CCodeAttribute : AttributeCache {
 	private string get_default_type_id () {
 		if (sym != null) {
 			if (sym is Class && !((Class) sym).is_compact || sym is Interface) {
-				return get_ccode_upper_case_name (sym, "TYPE_");
+				return CCodeBaseModule.get_ccode_upper_case_name (sym, "TYPE_");
 			} else if (sym is ErrorType && sym.source_reference != null && sym.source_reference.file.context.require_glib_version (2, 26)) {
 				return "G_TYPE_ERROR";
 			} else if (sym is Struct) {
 				var st = (Struct) sym;
-				if (!get_ccode_has_type_id (st)) {
+				if (!CCodeBaseModule.get_ccode_has_type_id (st)) {
 					var base_struct = st.base_struct;
 					if (base_struct != null) {
 						return CCodeBaseModule.get_ccode_type_id (base_struct);
 					}
 					if (!st.is_simple_type ()) {
 						return "G_TYPE_POINTER";
+					}
+				} else {
+					return CCodeBaseModule.get_ccode_upper_case_name (st, "TYPE_");
 				}
+			} else if (sym is Enum) {
+				var en = (Enum) sym;
+				if (CCodeBaseModule.get_ccode_has_type_id (en)) {
+					return CCodeBaseModule.get_ccode_upper_case_name (en, "TYPE_");
 				} else {
-					return get_ccode_upper_case_name (st, "TYPE_");
+					return en.is_flags ? "G_TYPE_UINT" : "G_TYPE_INT";
 				}
-			} else if (sym is VoidType) {
-				return "G_TYPE_NONE";
 			} else {
 				return "G_TYPE_POINTER";
 			}
-		} else if (node is ArrayType && ((ArrayType) node).element_type.data_type == string_type.data_type) {
+		} else if (node is ArrayType && ((ArrayType) node).element_type.data_type.get_full_name () == "string") {
 			return "G_TYPE_STRV";
 		} else if (node is PointerType || node is DelegateType) {
 			return "G_TYPE_POINTER";
@@ -6880,9 +6897,9 @@ public class Vala.CCodeAttribute : AttributeCache {
 			if (sym is Class) {
 				var cl = (Class) sym;
 				if (cl.base_class != null) {
-					return CCodeBaseModule.get_ccode_marshaller_type_name ();
+					return CCodeBaseModule.get_ccode_marshaller_type_name (cl.base_class);
 				} else if (!cl.is_compact) {
-					return cl.get_uppwer_case_cname ();
+					return CCodeBaseModule.get_ccode_upper_case_name (cl);
 				} else if (type_id == "G_TYPE_POINTER") {
 					return "POINTER";
 				} else {
@@ -6890,7 +6907,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 				}
 			} else if (sym is Enum) {
 				var en = (Enum) sym;
-				if (get_ccode_has_type_id (en)) {
+				if (CCodeBaseModule.get_ccode_has_type_id (en)) {
 					if (en.is_flags) {
 						return "FLAGS";
 					} else {
@@ -6919,7 +6936,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 				}
 				if (st.is_simple_type ()) {
 					Report.error (st.source_reference, "The type `%s` doesn't declare a marshaller type name".printf (st.get_full_name ()));
-				} else if (get_ccode_has_type_id (st)) {
+				} else if (CCodeBaseModule.get_ccode_has_type_id (st)) {
 					return "BOXED";
 				} else {
 					return "POINTER";
@@ -6939,7 +6956,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 		} else if (node is ErrorType) {
 			return "POINTER";
 		} else if (node is ArrayType) {
-			if (((ArrayType) t).element_type.data_type == string_type.data_type) {
+			if (((ArrayType) node).element_type.data_type.get_full_name () == "string") {
 				return "BOXED,INT";
 			} else {
 				return "POINTER,INT";
@@ -6947,8 +6964,9 @@ public class Vala.CCodeAttribute : AttributeCache {
 		} else if (node is VoidType) {
 			return "VOID";
 		} else {
-			return CCodeBaseModule.get_ccode_marshaller_type_name (((DataType) node).dat_type);
+			return CCodeBaseModule.get_ccode_marshaller_type_name (((DataType) node).data_type);
 		}
+		return "";
 	}
 
 	private string get_default_get_value_function () {
@@ -6965,7 +6983,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 		} else if (sym is Enum) {
 			var en = (Enum) sym;
-			if (get_ccode_has_type_id (en)) {
+			if (CCodeBaseModule.get_ccode_has_type_id (en)) {
 				if (en.is_flags) {
 					return "g_value_get_flags";
 				} else {
@@ -6994,7 +7012,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue get function".printf (st.get_full_name ()));
-			} else if (get_ccode_has_type_id (st)) {
+			} else if (CCodeBaseModule.get_ccode_has_type_id (st)) {
 				return "g_value_get_boxed";
 			} else {
 				return "g_value_get_pointer";
@@ -7009,7 +7027,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 		if (sym is Class) {
 			var cl = (Class) sym;
 			if (cl.is_fundamental ()) {
-				return CCodeBaseModule.get_ccode_lower_case_cname (cl, "value_set_");
+				return CCodeBaseModule.get_ccode_lower_case_name (cl, "value_set_");
 			} else if (cl.base_class != null) {
 				return CCodeBaseModule.get_ccode_set_value_function (cl.base_class);
 			} else if (type_id == "G_TYPE_POINTER") {
@@ -7019,7 +7037,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 		} else if (sym is Enum) {
 			var en = (Enum) sym;
-			if (get_ccode_has_type_id (en)) {
+			if (CCodeBaseModule.get_ccode_has_type_id (en)) {
 				if (en.is_flags) {
 					return "g_value_set_flags";
 				} else {
@@ -7048,7 +7066,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue set function".printf (st.get_full_name ()));
-			} else if (get_ccode_has_type_id (st)) {
+			} else if (CCodeBaseModule.get_ccode_has_type_id (st)) {
 				return "g_value_set_boxed";
 			} else {
 				return "g_value_set_pointer";
@@ -7063,7 +7081,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 		if (sym is Class) {
 			var cl = (Class) sym;
 			if (cl.is_fundamental ()) {
-				return CCodeBaseModule.get_ccode_lower_case_cname (cl, "value_take_");
+				return CCodeBaseModule.get_ccode_lower_case_name (cl, "value_take_");
 			} else if (cl.base_class != null) {
 				return CCodeBaseModule.get_ccode_take_value_function (cl.base_class);
 			} else if (type_id == "G_TYPE_POINTER") {
@@ -7073,7 +7091,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 		} else if (sym is Enum) {
 			var en = (Enum) sym;
-			if (get_ccode_has_type_id (en)) {
+			if (CCodeBaseModule.get_ccode_has_type_id (en)) {
 				if (en.is_flags) {
 					return "g_value_take_flags";
 				} else {
@@ -7102,7 +7120,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 			}
 			if (st.is_simple_type ()) {
 				Report.error (st.source_reference, "The type `%s` doesn't declare a GValue take function".printf (st.get_full_name ()));
-			} else if (get_ccode_has_type_id (st)) {
+			} else if (CCodeBaseModule.get_ccode_has_type_id (st)) {
 				return "g_value_take_boxed";
 			} else {
 				return "g_value_set_pointer";
@@ -7117,7 +7135,7 @@ public class Vala.CCodeAttribute : AttributeCache {
 		if (sym is Class) {
 			var cl = (Class) sym;
 			if (cl.is_fundamental ()) {
-				return CCodeBaseModule.get_ccode_lower_case_cname (cl, "value_take_");
+				return CCodeBaseModule.get_ccode_lower_case_name (cl, "value_take_");
 			} else if (cl.base_class != null) {
 				return CCodeBaseModule.get_ccode_param_spec_function (cl.base_class);
 			} else if (type_id == "G_TYPE_POINTER") {
@@ -7140,23 +7158,22 @@ public class Vala.CCodeAttribute : AttributeCache {
 	private string get_default_default_value () {
 		if (sym is Enum) {
 			return "0";
-		}
-
-		var st = (Struct) sym;
-		var base_st = st.base_struct;
+		} else if (sym is Struct) {
+			var st = (Struct) sym;
+			var base_st = st.base_struct;
 
-		if (base_st != null) {
-			return CCodeBaseModule.get_ccode_default_value (base_st);
-		}
+			if (base_st != null) {
+				return CCodeBaseModule.get_ccode_default_value (base_st);
+			}
 
-		if (CodeContext.get ().profile == Profile.DOVA) {
-			if (st.is_boolean_type ()) {
-				return "false";
-			} else if (st.is_integer_type () || st.is_floating_type ()) {
-				return "0";
+			if (CodeContext.get ().profile == Profile.DOVA) {
+				if (st.is_boolean_type ()) {
+					return "false";
+				} else if (st.is_integer_type () || st.is_floating_type ()) {
+					return "0";
+				}
 			}
 		}
-
 		return "";
 	}
 
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index f141739..0c115bd 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -33,16 +33,10 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 		if (st.is_boolean_type ()) {
 			// typedef for boolean types
 			decl_space.add_include ("stdbool.h");
-			st.set_cname ("bool");
 			return;
 		} else if (st.is_integer_type ()) {
 			// typedef for integral types
 			decl_space.add_include ("stdint.h");
-			st.set_cname ("%sint%d_t".printf (st.signed ? "" : "u", st.width));
-			return;
-		} else if (st.is_floating_type ()) {
-			// typedef for floating types
-			st.set_cname (st.width == 64 ? "double" : "float");
 			return;
 		}
 
@@ -113,7 +107,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 			decl_space.add_type_declaration (new CCodeTypeDefinition (get_ccode_name (st.base_struct), new CCodeVariableDeclarator (get_ccode_name (st))));
 		}
 
-		var function = new CCodeFunction (get_ccode_dup_function (st) (), get_ccode_name (st) + "*");
+		var function = new CCodeFunction (get_ccode_dup_function (st), get_ccode_name (st) + "*");
 		if (st.is_private_symbol ()) {
 			function.modifiers = CCodeModifiers.STATIC;
 		}
@@ -184,7 +178,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
 	}
 
 	void add_struct_dup_function (Struct st) {
-		var function = new CCodeFunction (get_ccode_dup_function (st) (), get_ccode_name (st) + "*");
+		var function = new CCodeFunction (get_ccode_dup_function (st), get_ccode_name (st) + "*");
 		if (st.access == SymbolAccessibility.PRIVATE) {
 			function.modifiers = CCodeModifiers.STATIC;
 		}
diff --git a/codegen/valaclassregisterfunction.vala b/codegen/valaclassregisterfunction.vala
index 684b1ef..cc9b95e 100644
--- a/codegen/valaclassregisterfunction.vala
+++ b/codegen/valaclassregisterfunction.vala
@@ -183,14 +183,14 @@ public class Vala.ClassRegisterFunction : TypeRegisterFunction {
 			if (!plugin) {
 				var reg_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_add_interface_static"));
 				reg_call.add_argument (new CCodeIdentifier ("%s_type_id".printf (CCodeBaseModule.get_ccode_lower_case_name (class_reference, null))));
-				reg_call.add_argument (new CCodeIdentifier (get_ccode_type_id (iface)));
+				reg_call.add_argument (new CCodeIdentifier (CCodeBaseModule.get_ccode_type_id (iface)));
 				reg_call.add_argument (new CCodeIdentifier ("&%s".printf (iface_info_name)));
 				block.add_statement (new CCodeExpressionStatement (reg_call));
 			} else {
 				var reg_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_module_add_interface"));
 				reg_call.add_argument (new CCodeIdentifier ("module"));
 				reg_call.add_argument (new CCodeIdentifier ("%s_type_id".printf (CCodeBaseModule.get_ccode_lower_case_name (class_reference, null))));
-				reg_call.add_argument (new CCodeIdentifier (get_ccode_type_id (iface)));
+				reg_call.add_argument (new CCodeIdentifier (CCodeBaseModule.get_ccode_type_id (iface)));
 				reg_call.add_argument (new CCodeIdentifier ("&%s".printf (iface_info_name)));
 				block.add_statement (new CCodeExpressionStatement (reg_call));
 			}
diff --git a/codegen/valactype.vala b/codegen/valactype.vala
index c29438c..1190299 100644
--- a/codegen/valactype.vala
+++ b/codegen/valactype.vala
@@ -36,8 +36,4 @@ public class Vala.CType : DataType {
 	public override DataType copy () {
 		return new CType (ctype_name);
 	}
-
-	public override string? get_cname () {
-		return ctype_name;
-	}
 }
diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala
index aa6c30c..5048f50 100644
--- a/codegen/valadovabasemodule.vala
+++ b/codegen/valadovabasemodule.vala
@@ -959,13 +959,13 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 	public CCodeExpression get_type_private_from_type (ObjectTypeSymbol type_symbol, CCodeExpression type_expression) {
 		if (type_symbol is Class) {
 			// class
-			return new CCodeCastExpression (new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeCastExpression (type_expression, "char *"), new CCodeIdentifier ("_%s_type_offset".printf (((Class) type_symbol).get_lower_case_cname ()))), "%sTypePrivate *".printf (get_ccode_name (type_symbol)));
+			return new CCodeCastExpression (new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeCastExpression (type_expression, "char *"), new CCodeIdentifier ("_%s_type_offset".printf (CCodeBaseModule.get_ccode_lower_case_name (type_symbol)))), "%sTypePrivate *".printf (get_ccode_name (type_symbol)));
 		} else {
 			// interface
 			var get_interface = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_get_interface"));
 			get_interface.add_argument (type_expression);
-			get_interface.add_argument (new CCodeIdentifier ("%s_type".printf (((Interface) type_symbol).get_lower_case_cname ())));
-			return new CCodeCastExpression (get_interface, "%sTypePrivate *".printf (get_ccode_name (type_symbol)));
+			get_interface.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (type_symbol))));
+			return new CCodeCastExpression (get_interface, "%sTypePrivate *".printf (CCodeBaseModule.get_ccode_name (type_symbol)));
 		}
 	}
 
@@ -978,7 +978,7 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 				return new CCodeIdentifier (var_name);
 			}
 		} else {
-			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (type.data_type.get_lower_case_cname ())));
+			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (CCodeBaseModule.get_ccode_lower_case_name (type.data_type))));
 			var object_type_symbol = type.data_type as ObjectTypeSymbol;
 			if (object_type_symbol != null) {
 				for (int i = 0; i < object_type_symbol.get_type_parameters ().size; i++) {
@@ -1022,7 +1022,7 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 			string unref_function;
 			if (type is ReferenceType) {
 				if (is_reference_counting (type.data_type)) {
-					unref_function = get_ccode_unref_function (type.data_type);
+					unref_function = get_ccode_unref_function ((ObjectTypeSymbol) type.data_type);
 				} else {
 					unref_function = get_ccode_free_function (type.data_type);
 				}
@@ -1593,7 +1593,7 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 				creation_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_name (m)));
 			}
 
-			if (struct_by_ref && !(m.cinstance_parameter_position < 0)) {
+			if (struct_by_ref && !(get_ccode_instance_pos (m) < 0)) {
 				creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
 			}
 
@@ -1644,7 +1644,7 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 				i++;
 			}
 
-			if (struct_by_ref && m.cinstance_parameter_position < 0) {
+			if (struct_by_ref && get_ccode_instance_pos (m) < 0) {
 				// instance parameter is at the end in a struct creation method
 				creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
 			}
@@ -1975,10 +1975,6 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 	}
 
 	public override void visit_lambda_expression (LambdaExpression l) {
-		// use instance position from delegate
-		var dt = (DelegateType) l.target_type;
-		l.method.cinstance_parameter_position = dt.delegate_symbol.cinstance_parameter_position;
-
 		l.accept_children (this);
 
 		set_cvalue (l, new CCodeIdentifier (get_ccode_name (l.method)));
@@ -2152,7 +2148,7 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 
 			cfile.add_function (wrapper);
 
-			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_new".printf (deleg_type.delegate_symbol.get_lower_case_cname ())));
+			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_new".printf (get_ccode_lower_case_name (deleg_type.delegate_symbol))));
 			ccall.add_argument (delegate_target);
 			ccall.add_argument (new CCodeIdentifier (wrapper_name));
 			return ccall;
@@ -2290,38 +2286,62 @@ public abstract class Vala.DovaBaseModule : CodeGenerator {
 		return CCodeBaseModule.get_ccode_const_name (node);
 	}
 
-	public string get_ccode_copy_function (CodeNode node) {
+	public string get_ccode_copy_function (TypeSymbol node) {
 		return CCodeBaseModule.get_ccode_copy_function (node);
 	}
 
-	public string get_ccode_dup_function (CodeNode node) {
+	public string get_ccode_dup_function (TypeSymbol node) {
 		return CCodeBaseModule.get_ccode_dup_function (node);
 	}
 
-	public string get_ccode_ref_function (CodeNode node) {
+	public string get_ccode_ref_function (TypeSymbol node) {
 		return CCodeBaseModule.get_ccode_ref_function (node);
 	}
 
-	public string get_ccode_unref_function (CodeNode node) {
+	public string get_ccode_unref_function (ObjectTypeSymbol node) {
 		return CCodeBaseModule.get_ccode_unref_function (node);
 	}
 
-	public bool is_reference_counting (CodeNode node) {
+	public string get_ccode_free_function (TypeSymbol node) {
+		return CCodeBaseModule.get_ccode_free_function (node);
+	}
+
+	public bool is_reference_counting (TypeSymbol node) {
 		return CCodeBaseModule.is_reference_counting (node);
 	}
 
-	public bool get_ccode_ref_function_void (CodeNode node) {
+	public bool get_ccode_ref_function_void (Class node) {
 		return CCodeBaseModule.get_ccode_ref_function_void (node);
 	}
 
-	public string get_ccode_default_value (CodeNode node) {
+	public string get_ccode_default_value (TypeSymbol node) {
 		return CCodeBaseModule.get_ccode_default_value (node);
 	}
 
-	public string get_ccode_real_name (CodeNode node) {
+	public string get_ccode_real_name (Method node) {
 		return CCodeBaseModule.get_ccode_real_name (node);
 	}
 
+	public string get_ccode_lower_case_name (CodeNode node, string? infix = null) {
+		return CCodeBaseModule.get_ccode_lower_case_name (node, infix);
+	}
+
+	public string get_ccode_upper_case_name (Symbol node, string? infix = null) {
+		return CCodeBaseModule.get_ccode_upper_case_name (node, infix);
+	}
+
+	public string get_ccode_lower_case_prefix (Symbol node) {
+		return CCodeBaseModule.get_ccode_lower_case_prefix (node);
+	}
+
+	public double get_ccode_instance_pos (CodeNode node) {
+		return CCodeBaseModule.get_ccode_instance_pos (node);
+	}
+
+	public string get_ccode_vfunc_name (Method node) {
+		return CCodeBaseModule.get_ccode_vfunc_name (node);
+	}
+
 	public DataType? get_this_type () {
 		if (current_method != null && current_method.binding == MemberBinding.INSTANCE) {
 			return current_method.this_parameter.variable_type;
diff --git a/codegen/valadovadelegatemodule.vala b/codegen/valadovadelegatemodule.vala
index f8d6106..5cb0439 100644
--- a/codegen/valadovadelegatemodule.vala
+++ b/codegen/valadovadelegatemodule.vala
@@ -36,13 +36,13 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 		generate_method_declaration ((Method) object_class.scope.lookup ("ref"), decl_space);
 		generate_method_declaration ((Method) object_class.scope.lookup ("unref"), decl_space);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (d.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (d)), "DovaType *");
 		if (d.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
 		decl_space.add_function_declaration (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (d.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (d)));
 		if (d.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -61,7 +61,7 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 	}
 
 	CCodeFunction generate_new_function (Delegate d, CCodeFile decl_space) {
-		var function = new CCodeFunction ("%s_new".printf (d.get_lower_case_cname ()), "%s*".printf (get_ccode_name (d)));
+		var function = new CCodeFunction ("%s_new".printf (get_ccode_lower_case_name (d)), "%s*".printf (get_ccode_name (d)));
 		if (d.is_internal_symbol ()) {
 			function.modifiers |= CCodeModifiers.STATIC;
 		}
@@ -72,7 +72,7 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 		function.block = new CCodeBlock ();
 
 		var alloc_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_alloc"));
-		alloc_call.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (d.get_lower_case_cname ()))));
+		alloc_call.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (d)))));
 
 		var cdecl = new CCodeDeclaration ("%s*".printf (get_ccode_name (d)));
 		cdecl.add_declarator (new CCodeVariableDeclarator ("this", alloc_call));
@@ -94,7 +94,7 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 	}
 
 	CCodeFunction generate_invoke_function (Delegate d, CCodeFile decl_space) {
-		var function = new CCodeFunction ("%s_invoke".printf (d.get_lower_case_cname ()));
+		var function = new CCodeFunction ("%s_invoke".printf (get_ccode_lower_case_name (d)));
 
 		if (d.is_internal_symbol ()) {
 			function.modifiers |= CCodeModifiers.STATIC;
@@ -202,16 +202,16 @@ public class Vala.DovaDelegateModule : DovaValueModule {
 		cfile.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (instance_priv_struct.name), new CCodeVariableDeclarator ("%sPrivate".printf (get_ccode_name (d)))));
 		cfile.add_type_definition (instance_priv_struct);
 
-		string macro = "((%sPrivate *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (d), d.get_lower_case_cname ());
+		string macro = "((%sPrivate *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (d), get_ccode_lower_case_name (d));
 		cfile.add_type_member_declaration (new CCodeMacroReplacement ("%s_GET_PRIVATE(o)".printf (get_ccode_upper_case_name (d, null)), macro));
 
 		var cdecl = new CCodeDeclaration ("intptr_t");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (d.get_lower_case_cname ()), new CCodeConstant ("0")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (get_ccode_lower_case_name (d)), new CCodeConstant ("0")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
 		cdecl = new CCodeDeclaration ("intptr_t");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_type_offset".printf (d.get_lower_case_cname ()), new CCodeConstant ("0")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_type_offset".printf (get_ccode_lower_case_name (d)), new CCodeConstant ("0")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
diff --git a/codegen/valadovaerrormodule.vala b/codegen/valadovaerrormodule.vala
index 19ecb8e..68f7a86 100644
--- a/codegen/valadovaerrormodule.vala
+++ b/codegen/valadovaerrormodule.vala
@@ -41,7 +41,7 @@ public class Vala.DovaErrorModule : DovaDelegateModule {
 
 		if (current_method is CreationMethod && current_method.parent_symbol is Class) {
 			var cl = current_method.parent_symbol as Class;
-			var unref_call = new CCodeFunctionCall (new CCodeIdentifier (cl.get_unref_function ()));
+			var unref_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_unref_function (cl)));
 			unref_call.add_argument (new CCodeIdentifier ("this"));
 			ccode.add_expression (unref_call);
 			ccode.add_return ();
@@ -125,7 +125,7 @@ public class Vala.DovaErrorModule : DovaDelegateModule {
 
 						var type_check = new CCodeFunctionCall (new CCodeIdentifier ("any_is_a"));
 						type_check.add_argument (new CCodeIdentifier ("dova_error"));
-						type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (catch_type.type_symbol.get_lower_case_cname ()))));
+						type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (catch_type.type_symbol)))));
 
 						ccode.open_if (type_check);
 
@@ -164,7 +164,7 @@ public class Vala.DovaErrorModule : DovaDelegateModule {
 				// Check the allowed error domains to propagate
 				var type_check = new CCodeFunctionCall (new CCodeIdentifier ("any_is_a"));
 				type_check.add_argument (new CCodeIdentifier ("dova_error"));
-				type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (error_class.get_lower_case_cname ()))));
+				type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (error_class)))));
 				if (ccond == null) {
 					ccond = type_check;
 				} else {
@@ -201,7 +201,7 @@ public class Vala.DovaErrorModule : DovaDelegateModule {
 		is_in_catch = true;
 
 		foreach (CatchClause clause in stmt.get_catch_clauses ()) {
-			clause.clabel_name = "__catch%d_%s".printf (this_try_id, clause.error_type.get_lower_case_cname ());
+			clause.clabel_name = "__catch%d_%s".printf (this_try_id, get_ccode_lower_case_name (clause.error_type));
 		}
 
 		is_in_catch = false;
diff --git a/codegen/valadovamemberaccessmodule.vala b/codegen/valadovamemberaccessmodule.vala
index 8315b3e..44760f9 100644
--- a/codegen/valadovamemberaccessmodule.vala
+++ b/codegen/valadovamemberaccessmodule.vala
@@ -54,12 +54,12 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
 				if (m.base_method != null) {
 					var base_class = (Class) m.base_method.parent_symbol;
 
-					set_cvalue (expr, new CCodeIdentifier ("%s_base_%s".printf (base_class.get_lower_case_cname (null), m.name)));
+					set_cvalue (expr, new CCodeIdentifier ("%s_base_%s".printf (get_ccode_lower_case_name (base_class, null), m.name)));
 					return;
 				} else if (m.base_interface_method != null) {
 					var base_iface = (Interface) m.base_interface_method.parent_symbol;
 
-					set_cvalue (expr, new CCodeIdentifier ("%s_base_%s".printf (base_iface.get_lower_case_cname (null), m.name)));
+					set_cvalue (expr, new CCodeIdentifier ("%s_base_%s".printf (get_ccode_lower_case_name (base_iface, null), m.name)));
 					return;
 				}
 			}
@@ -135,7 +135,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
 				if (prop.base_property != null) {
 					var base_class = (Class) prop.base_property.parent_symbol;
 					var vcast = new CCodeFunctionCall (new CCodeIdentifier ("%s_CLASS".printf (get_ccode_upper_case_name (base_class, null))));
-					vcast.add_argument (new CCodeIdentifier ("%s_parent_class".printf (current_class.get_lower_case_cname (null))));
+					vcast.add_argument (new CCodeIdentifier ("%s_parent_class".printf (get_ccode_lower_case_name (current_class, null))));
 
 					var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "get_%s".printf (prop.name)));
 					ccall.add_argument (get_cvalue (expr.inner));
@@ -143,7 +143,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
 					return;
 				} else if (prop.base_interface_property != null) {
 					var base_iface = (Interface) prop.base_interface_property.parent_symbol;
-					string parent_iface_var = "%s_%s_parent_iface".printf (current_class.get_lower_case_cname (null), base_iface.get_lower_case_cname (null));
+					string parent_iface_var = "%s_%s_parent_iface".printf (get_ccode_lower_case_name (current_class, null), get_ccode_lower_case_name (base_iface, null));
 
 					var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (new CCodeIdentifier (parent_iface_var), "get_%s".printf (prop.name)));
 					ccall.add_argument (get_cvalue (expr.inner));
diff --git a/codegen/valadovamethodcallmodule.vala b/codegen/valadovamethodcallmodule.vala
index e2a7b91..6d25397 100644
--- a/codegen/valadovamethodcallmodule.vala
+++ b/codegen/valadovamethodcallmodule.vala
@@ -45,7 +45,7 @@ public class Vala.DovaMethodCallModule : DovaAssignmentModule {
 			ccall = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_real_name (m)));
 		} else if (itype is DelegateType) {
 			deleg = ((DelegateType) itype).delegate_symbol;
-			ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_invoke".printf (deleg.get_lower_case_cname ())));
+			ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_invoke".printf (get_ccode_lower_case_name (deleg))));
 			ccall.add_argument (get_cvalue (expr.call));
 		}
 
@@ -90,7 +90,7 @@ public class Vala.DovaMethodCallModule : DovaAssignmentModule {
 				}
 
 				if (ma.inner is BaseAccess) {
-					ccall.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (((Class) current_class.base_class).get_lower_case_cname ()))));
+					ccall.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (current_class.base_class)))));
 				}
 				ccall.add_argument (instance);
 			}
diff --git a/codegen/valadovaobjectmodule.vala b/codegen/valadovaobjectmodule.vala
index 4b9334d..b0ec8de 100644
--- a/codegen/valadovaobjectmodule.vala
+++ b/codegen/valadovaobjectmodule.vala
@@ -75,7 +75,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		generate_method_declaration ((Method) object_class.scope.lookup ("ref"), decl_space);
 		generate_method_declaration ((Method) object_class.scope.lookup ("unref"), decl_space);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (cl.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (cl)), "DovaType *");
 		if (cl.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -84,7 +84,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 		decl_space.add_function_declaration (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (cl.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (cl)));
 		if (cl.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -257,7 +257,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 
 		var cdecl = new CCodeDeclaration ("intptr_t");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (cl.get_lower_case_cname ()), new CCodeConstant ("0")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (get_ccode_lower_case_name (cl)), new CCodeConstant ("0")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		decl_space.add_type_member_declaration (cdecl);
 
@@ -275,7 +275,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			macro = "((%sPrivate *) (((char *) o) + sizeof (anyPrivate) + sizeof (DovaObjectPrivate)))".printf (get_ccode_name (cl));
 			type_offset = new CCodeConstant ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate) + sizeof (anyTypePrivate) + sizeof (DovaObjectTypePrivate)");
 		} else {
-			macro = "((%sPrivate *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (cl), cl.get_lower_case_cname ());
+			macro = "((%sPrivate *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (cl), get_ccode_lower_case_name (cl));
 			type_offset = new CCodeConstant ("0");
 		}
 		if (!instance_priv_struct.is_empty) {
@@ -283,7 +283,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 
 		cdecl = new CCodeDeclaration ("intptr_t");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_type_offset".printf (cl.get_lower_case_cname ()), type_offset));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_type_offset".printf (get_ccode_lower_case_name (cl)), type_offset));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		decl_space.add_type_member_declaration (cdecl);
 	}
@@ -420,11 +420,11 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 
 		var cdecl = new CCodeDeclaration ("DovaType *");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (cl.get_lower_case_cname ()), new CCodeConstant ("NULL")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (get_ccode_lower_case_name (cl)), new CCodeConstant ("NULL")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (cl.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (cl)), "DovaType *");
 		if (cl.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -448,26 +448,26 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			calloc_call.add_argument (new CCodeConstant ("1"));
 			calloc_call.add_argument (new CCodeConstant ("sizeof (anyPrivate) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate) + sizeof (anyTypePrivate)"));
 
-			type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())), calloc_call)));
+			type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))), calloc_call)));
 
 			var set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_object_size"));
-			set_size.add_argument (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())));
+			set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))));
 			set_size.add_argument (sizeof_call);
 			type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
 			type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("_any_type_offset"), new CCodeConstant ("sizeof (any) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate)"))));
 
 			set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_type_size"));
-			set_size.add_argument (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())));
+			set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))));
 			set_size.add_argument (new CCodeConstant ("sizeof (any) + sizeof (DovaObjectPrivate) + sizeof (DovaTypePrivate) + sizeof (anyTypePrivate)"));
 			type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
-			type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())), "type"), new CCodeFunctionCall (new CCodeIdentifier ("dova_type_type_get")))));
+			type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))), "type"), new CCodeFunctionCall (new CCodeIdentifier ("dova_type_type_get")))));
 		} else {
 			generate_method_declaration ((Method) object_class.scope.lookup ("alloc"), cfile);
 			generate_method_declaration ((Method) type_class.scope.lookup ("alloc"), cfile);
 
-			var base_type = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (base_class.get_lower_case_cname ())));
+			var base_type = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (base_class))));
 			for (int i = 0; i < base_class.get_type_parameters ().size; i++) {
 				base_type.add_argument (new CCodeConstant ("NULL"));
 			}
@@ -484,15 +484,15 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			} else {
 				alloc_call.add_argument (new CCodeConstant ("0"));
 			}
-			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ()))));
-			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_object_offset".printf (cl.get_lower_case_cname ()))));
-			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_type_offset".printf (cl.get_lower_case_cname ()))));
+			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl)))));
+			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_object_offset".printf (get_ccode_lower_case_name (cl)))));
+			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_type_offset".printf (get_ccode_lower_case_name (cl)))));
 
 			type_init_block.add_statement (new CCodeExpressionStatement (alloc_call));
 		}
 
-		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (cl.get_lower_case_cname ())));
-		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())));
+		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (cl))));
+		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))));
 
 		if (object_type_symbol != null) {
 			for (int i = 0; i < object_type_symbol.get_type_parameters ().size; i++) {
@@ -502,7 +502,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 		type_init_block.add_statement (new CCodeExpressionStatement (type_init_call));
 
-		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ()))), type_init_block));
+		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl)))), type_init_block));
 
 		if (object_type_symbol != null && object_type_symbol.get_type_parameters ().size > 0) {
 			// generics
@@ -512,7 +512,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			generate_method_declaration ((Method) type_class.scope.lookup ("insert_type"), cfile);
 
 			var first = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_get_next_type"));
-			first.add_argument (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())));
+			first.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))));
 
 			cdecl = new CCodeDeclaration ("DovaType *");
 			cdecl.add_declarator (new CCodeVariableDeclarator ("result", first));
@@ -531,7 +531,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			generate_method_declaration ((Method) type_class.scope.lookup ("alloc"), cfile);
 
-			var base_type = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (base_class.get_lower_case_cname ())));
+			var base_type = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (base_class))));
 			if (base_class_type != null) {
 				foreach (var type_arg in base_class_type.get_type_arguments ()) {
 					base_type.add_argument (get_type_id_expression (type_arg, true));
@@ -551,12 +551,12 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 				alloc_call.add_argument (new CCodeConstant ("0"));
 			}
 			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("result")));
-			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_object_offset".printf (cl.get_lower_case_cname ()))));
-			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_type_offset".printf (cl.get_lower_case_cname ()))));
+			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_object_offset".printf (get_ccode_lower_case_name (cl)))));
+			alloc_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_%s_type_offset".printf (get_ccode_lower_case_name (cl)))));
 
 			specialized_type_init_block.add_statement (new CCodeExpressionStatement (alloc_call));
 
-			type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (cl.get_lower_case_cname ())));
+			type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (cl))));
 			type_init_call.add_argument (new CCodeIdentifier ("result"));
 
 			foreach (var type_param in object_type_symbol.get_type_parameters ()) {
@@ -566,7 +566,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			specialized_type_init_block.add_statement (new CCodeExpressionStatement (type_init_call));
 
 			var insert_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_insert_type"));
-			insert_call.add_argument (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ())));
+			insert_call.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl))));
 			insert_call.add_argument (new CCodeIdentifier ("result"));
 			specialized_type_init_block.add_statement (new CCodeExpressionStatement (insert_call));
 
@@ -577,11 +577,11 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			type_fun.block.add_statement (new CCodeIfStatement (new CCodeIdentifier ("%s_type".printf (object_type_symbol.get_type_parameters ().get (0).name.down ())), specialized_type_get_block));
 		}
 
-		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (cl.get_lower_case_cname ()))));
+		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (cl)))));
 
 		cfile.add_function (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (cl.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (cl)));
 		if (cl.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -606,10 +606,10 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			var value_copy_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_copy"));
 			value_copy_call.add_argument (new CCodeIdentifier ("type"));
-			value_copy_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_copy".printf (cl.get_lower_case_cname ())), "void (*)(void *, intptr_t,  void *, intptr_t)"));
+			value_copy_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_copy".printf (get_ccode_lower_case_name (cl))), "void (*)(void *, intptr_t,  void *, intptr_t)"));
 			type_init_fun.block.add_statement (new CCodeExpressionStatement (value_copy_call));
 
-			var function = new CCodeFunction ("%s_copy".printf (cl.get_lower_case_cname ()), "void");
+			var function = new CCodeFunction ("%s_copy".printf (get_ccode_lower_case_name (cl)), "void");
 			function.modifiers = CCodeModifiers.STATIC;
 			function.add_parameter (new CCodeParameter ("dest", "any **"));
 			function.add_parameter (new CCodeParameter ("dest_index", "intptr_t"));
@@ -623,14 +623,14 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			var dest = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("dest"), new CCodeIdentifier ("dest_index"));
 			var src = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("src"), new CCodeIdentifier ("src_index"));
 
-			var unref_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_unref".printf (cl.get_lower_case_cname ())));
+			var unref_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_unref".printf (get_ccode_lower_case_name (cl))));
 			unref_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, dest));
 			var unref_block = new CCodeBlock ();
 			unref_block.add_statement (new CCodeExpressionStatement (unref_call));
 			unref_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, dest), new CCodeConstant ("NULL"))));
 			function.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, dest), unref_block));
 
-			var ref_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_ref".printf (cl.get_lower_case_cname ())));
+			var ref_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_ref".printf (get_ccode_lower_case_name (cl))));
 			ref_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, src));
 			var ref_block = new CCodeBlock ();
 			ref_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, dest), ref_call)));
@@ -639,7 +639,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			cfile.add_function (function);
 
 			{
-				var value_equals_fun = new CCodeFunction ("%s_value_equals".printf (cl.get_lower_case_cname ()), "bool");
+				var value_equals_fun = new CCodeFunction ("%s_value_equals".printf (get_ccode_lower_case_name (cl)), "bool");
 				value_equals_fun.modifiers = CCodeModifiers.STATIC;
 				value_equals_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (cl) + "**"));
 				value_equals_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
@@ -658,12 +658,12 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 				var value_equals_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_equals"));
 				value_equals_call.add_argument (new CCodeIdentifier ("type"));
-				value_equals_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_equals".printf (cl.get_lower_case_cname ())), "bool (*)(void *, intptr_t,  void *, intptr_t)"));
+				value_equals_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_equals".printf (get_ccode_lower_case_name (cl))), "bool (*)(void *, intptr_t,  void *, intptr_t)"));
 				type_init_fun.block.add_statement (new CCodeExpressionStatement (value_equals_call));
 			}
 
 			{
-				var value_hash_fun = new CCodeFunction ("%s_value_hash".printf (cl.get_lower_case_cname ()), "uintptr_t");
+				var value_hash_fun = new CCodeFunction ("%s_value_hash".printf (get_ccode_lower_case_name (cl)), "uintptr_t");
 				value_hash_fun.modifiers = CCodeModifiers.STATIC;
 				value_hash_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (cl) + "**"));
 				value_hash_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
@@ -678,18 +678,18 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 				var value_hash_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_hash"));
 				value_hash_call.add_argument (new CCodeIdentifier ("type"));
-				value_hash_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_hash".printf (cl.get_lower_case_cname ())), "uintptr_t (*)(void *, intptr_t)"));
+				value_hash_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_hash".printf (get_ccode_lower_case_name (cl))), "uintptr_t (*)(void *, intptr_t)"));
 				type_init_fun.block.add_statement (new CCodeExpressionStatement (value_hash_call));
 			}
 
 			// generate method to box value
-			var value_to_any_fun = new CCodeFunction ("%s_value_to_any".printf (cl.get_lower_case_cname ()), "any*");
+			var value_to_any_fun = new CCodeFunction ("%s_value_to_any".printf (get_ccode_lower_case_name (cl)), "any*");
 			value_to_any_fun.modifiers = CCodeModifiers.STATIC;
 			value_to_any_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (cl) + "**"));
 			value_to_any_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
 			value_to_any_fun.block = new CCodeBlock ();
 			var val = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("value"), new CCodeIdentifier ("value_index"));
-			string to_any_fun = "%s_ref".printf (cl.get_lower_case_cname ());
+			string to_any_fun = "%s_ref".printf (get_ccode_lower_case_name (cl));
 			if (cl == string_class) {
 				to_any_fun = "string_to_any";
 			}
@@ -702,17 +702,17 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			var value_to_any_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_to_any"));
 			value_to_any_call.add_argument (new CCodeIdentifier ("type"));
-			value_to_any_call.add_argument (new CCodeIdentifier ("%s_value_to_any".printf (cl.get_lower_case_cname ())));
+			value_to_any_call.add_argument (new CCodeIdentifier ("%s_value_to_any".printf (get_ccode_lower_case_name (cl))));
 			type_init_fun.block.add_statement (new CCodeExpressionStatement (value_to_any_call));
 
 			// generate method to unbox value
-			var value_from_any_fun = new CCodeFunction ("%s_value_from_any".printf (cl.get_lower_case_cname ()));
+			var value_from_any_fun = new CCodeFunction ("%s_value_from_any".printf (get_ccode_lower_case_name (cl)));
 			value_from_any_fun.modifiers = CCodeModifiers.STATIC;
 			value_from_any_fun.add_parameter (new CCodeParameter ("any_", "any *"));
 			value_from_any_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (cl) + "**"));
 			value_from_any_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
 			value_from_any_fun.block = new CCodeBlock ();
-			string from_any_fun = "%s_ref".printf (cl.get_lower_case_cname ());
+			string from_any_fun = "%s_ref".printf (get_ccode_lower_case_name (cl));
 			if (cl == string_class) {
 				from_any_fun = "string_from_any";
 			}
@@ -726,10 +726,10 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			var value_from_any_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_from_any"));
 			value_from_any_call.add_argument (new CCodeIdentifier ("type"));
-			value_from_any_call.add_argument (new CCodeIdentifier ("%s_value_from_any".printf (cl.get_lower_case_cname ())));
+			value_from_any_call.add_argument (new CCodeIdentifier ("%s_value_from_any".printf (get_ccode_lower_case_name (cl))));
 			type_init_fun.block.add_statement (new CCodeExpressionStatement (value_from_any_call));
 		} else {
-			type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (base_class.get_lower_case_cname ())));
+			type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (base_class))));
 			type_init_call.add_argument (new CCodeIdentifier ("type"));
 
 			if (base_class_type != null) {
@@ -753,7 +753,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 	}
 
 	void add_finalize_function (Class cl) {
-		var function = new CCodeFunction ("%sfinalize".printf (cl.get_lower_case_cprefix ()), "void");
+		var function = new CCodeFunction ("%sfinalize".printf (get_ccode_lower_case_prefix (cl)), "void");
 		function.modifiers = CCodeModifiers.STATIC;
 
 		function.add_parameter (new CCodeParameter ("this", get_ccode_name (cl) + "*"));
@@ -800,7 +800,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			var object_type = (ObjectType) base_type;
 			if (object_type.type_symbol is Class) {
 				var ccall = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_base_finalize"));
-				var type_get_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (object_type.type_symbol.get_lower_case_cname ())));
+				var type_get_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (object_type.type_symbol))));
 				foreach (var type_arg in base_type.get_type_arguments ()) {
 					type_get_call.add_argument (get_type_id_expression (type_arg, false));
 				}
@@ -834,7 +834,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			if (object_type.type_symbol is Interface) {
 				generate_interface_declaration ((Interface) object_type.type_symbol, cfile);
 
-				var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (object_type.type_symbol.get_lower_case_cname ())));
+				var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (object_type.type_symbol))));
 				type_init_call.add_argument (new CCodeIdentifier ("type"));
 				foreach (var type_arg in base_type.get_type_arguments ()) {
 					type_init_call.add_argument (get_type_id_expression (type_arg, true));
@@ -851,18 +851,18 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 			var override_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_override_finalize"));
 			override_call.add_argument (new CCodeIdentifier ("type"));
-			override_call.add_argument (new CCodeIdentifier ("%sfinalize".printf (cl.get_lower_case_cprefix ())));
+			override_call.add_argument (new CCodeIdentifier ("%sfinalize".printf (get_ccode_lower_case_prefix (cl))));
 			type_init_block.add_statement (new CCodeExpressionStatement (override_call));
 		}
 
 		foreach (Method m in cl.get_methods ()) {
 			if (m.is_virtual || m.overrides) {
-				var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_%s".printf (m.base_method.parent_symbol.get_lower_case_cprefix (), m.name)));
+				var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_%s".printf (get_ccode_lower_case_prefix (m.base_method.parent_symbol), m.name)));
 				override_call.add_argument (new CCodeIdentifier ("type"));
 				override_call.add_argument (new CCodeIdentifier (get_ccode_real_name (m)));
 				type_init_block.add_statement (new CCodeExpressionStatement (override_call));
 			} else if (m.base_interface_method != null) {
-				var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_%s".printf (m.base_interface_method.parent_symbol.get_lower_case_cprefix (), m.name)));
+				var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_%s".printf (get_ccode_lower_case_prefix (m.base_interface_method.parent_symbol), m.name)));
 				override_call.add_argument (new CCodeIdentifier ("type"));
 				override_call.add_argument (new CCodeIdentifier (get_ccode_real_name (m)));
 				type_init_block.add_statement (new CCodeExpressionStatement (override_call));
@@ -872,13 +872,13 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (Property prop in cl.get_properties ()) {
 			if (prop.is_virtual || prop.overrides) {
 				if (prop.get_accessor != null) {
-					var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_get_%s".printf (prop.base_property.parent_symbol.get_lower_case_cprefix (), prop.name)));
+					var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_get_%s".printf (get_ccode_lower_case_prefix (prop.base_property.parent_symbol), prop.name)));
 					override_call.add_argument (new CCodeIdentifier ("type"));
 					override_call.add_argument (new CCodeIdentifier (get_ccode_name (prop.get_accessor)));
 					type_init_block.add_statement (new CCodeExpressionStatement (override_call));
 				}
 				if (prop.set_accessor != null) {
-					var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_set_%s".printf (prop.base_property.parent_symbol.get_lower_case_cprefix (), prop.name)));
+					var override_call = new CCodeFunctionCall (new CCodeIdentifier ("%soverride_set_%s".printf (get_ccode_lower_case_prefix (prop.base_property.parent_symbol), prop.name)));
 					override_call.add_argument (new CCodeIdentifier ("type"));
 					override_call.add_argument (new CCodeIdentifier (get_ccode_name (prop.set_accessor)));
 					type_init_block.add_statement (new CCodeExpressionStatement (override_call));
@@ -1017,11 +1017,11 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 
 		var cdecl = new CCodeDeclaration ("DovaType *");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (iface.get_lower_case_cname ()), new CCodeConstant ("NULL")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (get_ccode_lower_case_name (iface)), new CCodeConstant ("NULL")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (iface.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (iface)), "DovaType *");
 		if (iface.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -1041,27 +1041,27 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			calloc_call.add_argument (new CCodeConstant ("dova_type_get_type_size (dova_type_type_get ())"));
 		}
 
-		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (iface.get_lower_case_cname ())), calloc_call)));
+		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (iface))), calloc_call)));
 
 		// call any_type_init to set value_copy and similar functions
 		var any_type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("any_type_init"));
-		any_type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (iface.get_lower_case_cname ())));
+		any_type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (iface))));
 		type_init_block.add_statement (new CCodeExpressionStatement (any_type_init_call));
 
-		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (iface.get_lower_case_cname ())));
-		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (iface.get_lower_case_cname ())));
+		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (iface))));
+		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (iface))));
 		foreach (var type_param in iface.get_type_parameters ()) {
 			type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
 		}
 		type_init_block.add_statement (new CCodeExpressionStatement (type_init_call));
 
-		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (iface.get_lower_case_cname ()))), type_init_block));
+		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (iface)))), type_init_block));
 
-		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (iface.get_lower_case_cname ()))));
+		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (iface)))));
 
 		cfile.add_function (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (iface.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (iface)));
 		if (iface.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -1074,7 +1074,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		foreach (DataType base_type in iface.get_prerequisites ()) {
 			var object_type = (ObjectType) base_type;
 			if (object_type.type_symbol is Interface) {
-				type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (object_type.type_symbol.get_lower_case_cname ())));
+				type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (object_type.type_symbol))));
 				type_init_call.add_argument (new CCodeIdentifier ("type"));
 				type_init_fun.block.add_statement (new CCodeExpressionStatement (type_init_call));
 			}
@@ -1084,7 +1084,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		vtable_alloc.add_argument (new CCodeConstant ("1"));
 		vtable_alloc.add_argument (new CCodeConstant ("sizeof (%sTypePrivate)".printf (get_ccode_name (iface))));
 
-		var type_get_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (iface.get_lower_case_cname ())));
+		var type_get_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (iface))));
 		foreach (var type_param in iface.get_type_parameters ()) {
 			type_get_call.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
 		}
@@ -1155,7 +1155,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			}
 			param_list += ")";
 
-			var override_func = new CCodeFunction ("%soverride_%s_%s".printf (prop.parent_symbol.get_lower_case_cprefix (), acc.readable ? "get" : "set", prop.name));
+			var override_func = new CCodeFunction ("%soverride_%s_%s".printf (get_ccode_lower_case_prefix (prop.parent_symbol), acc.readable ? "get" : "set", prop.name));
 			override_func.add_parameter (new CCodeParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeParameter ("(*function) %s".printf (param_list), acc.readable ? get_ccode_name (acc.value_type) : "void"));
 
@@ -1237,7 +1237,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			}
 			param_list += ")";
 
-			var override_func = new CCodeFunction ("%soverride_%s_%s".printf (prop.parent_symbol.get_lower_case_cprefix (), acc.readable ? "get" : "set", prop.name));
+			var override_func = new CCodeFunction ("%soverride_%s_%s".printf (get_ccode_lower_case_prefix (prop.parent_symbol), acc.readable ? "get" : "set", prop.name));
 			override_func.add_parameter (new CCodeParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeParameter ("(*function) %s".printf (param_list), acc.readable ? get_ccode_name (acc.value_type) : "void"));
 
@@ -1301,7 +1301,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 		generate_class_declaration (type_class, decl_space);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (iface.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (iface)), "DovaType *");
 		if (iface.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -1310,7 +1310,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 		}
 		decl_space.add_function_declaration (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (iface.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (iface)));
 		if (iface.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
 		}
@@ -1357,7 +1357,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 
 		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.name = "%sbase_%s".printf (get_ccode_lower_case_prefix (m.parent_symbol), m.name);
 			base_func.insert_parameter (0, new CCodeParameter ("base_type", "DovaType *"));
 			decl_space.add_function_declaration (base_func);
 
@@ -1371,7 +1371,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			}
 			param_list += ")";
 
-			var override_func = new CCodeFunction ("%soverride_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name));
+			var override_func = new CCodeFunction ("%soverride_%s".printf (get_ccode_lower_case_prefix (m.parent_symbol), m.name));
 			override_func.add_parameter (new CCodeParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeParameter ("(*function) %s".printf (param_list), (m.return_type is GenericType) ? "void" : get_ccode_name (m.return_type)));
 			decl_space.add_function_declaration (override_func);
@@ -1578,7 +1578,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			cfile.add_function (vfunc);
 
 
-			vfunc = new CCodeFunction ("%sbase_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name), (m.return_type is GenericType) ? "void" : get_ccode_name (m.return_type));
+			vfunc = new CCodeFunction ("%sbase_%s".printf (get_ccode_lower_case_prefix (m.parent_symbol), m.name), (m.return_type is GenericType) ? "void" : get_ccode_name (m.return_type));
 			vfunc.block = new CCodeBlock ();
 
 			vfunc.add_parameter (new CCodeParameter ("base_type", "DovaType *"));
@@ -1632,7 +1632,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			}
 			param_list += ")";
 
-			var override_func = new CCodeFunction ("%soverride_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name));
+			var override_func = new CCodeFunction ("%soverride_%s".printf (get_ccode_lower_case_prefix (m.parent_symbol), m.name));
 			override_func.add_parameter (new CCodeParameter ("type", "DovaType *"));
 			override_func.add_parameter (new CCodeParameter ("(*function) %s".printf (param_list), (m.return_type is GenericType) ? "void" : get_ccode_name (m.return_type)));
 			override_func.block = new CCodeBlock ();
@@ -1756,7 +1756,7 @@ public class Vala.DovaObjectModule : DovaArrayModule {
 			cdecl.add_declarator (new CCodeVariableDeclarator ("this"));
 			vblock.add_statement (cdecl);
 
-			var type_get = new CCodeFunctionCall (new CCodeIdentifier (current_class.get_lower_case_cname () + "_type_get"));
+			var type_get = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_lower_case_name (current_class) + "_type_get"));
 			foreach (var type_param in current_class.get_type_parameters ()) {
 				type_get.add_argument (new CCodeIdentifier ("%s_type".printf (type_param.name.down ())));
 			}
diff --git a/codegen/valadovavaluemodule.vala b/codegen/valadovavaluemodule.vala
index f74e7f0..f7ddd04 100644
--- a/codegen/valadovavaluemodule.vala
+++ b/codegen/valadovavaluemodule.vala
@@ -41,13 +41,13 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 		generate_class_declaration (type_class, decl_space);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (st.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (st)), "DovaType *");
 		if (st.is_internal_symbol ()) {
 			type_fun.modifiers = CCodeModifiers.STATIC;
 		}
 		decl_space.add_function_declaration (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (st.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (st)));
 		type_init_fun.add_parameter (new CCodeParameter ("type", "DovaType *"));
 		if (st.is_internal_symbol ()) {
 			type_init_fun.modifiers = CCodeModifiers.STATIC;
@@ -71,20 +71,20 @@ public class Vala.DovaValueModule : DovaObjectModule {
 		base.visit_struct (st);
 
 		var cdecl = new CCodeDeclaration ("intptr_t");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (st.get_lower_case_cname ()), new CCodeConstant ("0")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("_%s_object_offset".printf (get_ccode_lower_case_name (st)), new CCodeConstant ("0")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
-		string macro = "((%s *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (st), st.get_lower_case_cname ());
+		string macro = "((%s *) (((char *) o) + _%s_object_offset))".printf (get_ccode_name (st), get_ccode_lower_case_name (st));
 		cfile.add_type_member_declaration (new CCodeMacroReplacement ("%s_GET_PRIVATE(o)".printf (get_ccode_upper_case_name (st, null)), macro));
 
 
 		cdecl = new CCodeDeclaration ("DovaType *");
-		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (st.get_lower_case_cname ()), new CCodeConstant ("NULL")));
+		cdecl.add_declarator (new CCodeVariableDeclarator ("%s_type".printf (get_ccode_lower_case_name (st)), new CCodeConstant ("NULL")));
 		cdecl.modifiers = CCodeModifiers.STATIC;
 		cfile.add_type_member_declaration (cdecl);
 
-		var type_fun = new CCodeFunction ("%s_type_get".printf (st.get_lower_case_cname ()), "DovaType *");
+		var type_fun = new CCodeFunction ("%s_type_get".printf (get_ccode_lower_case_name (st)), "DovaType *");
 		type_fun.block = new CCodeBlock ();
 
 		var type_init_block = new CCodeBlock ();
@@ -109,56 +109,56 @@ public class Vala.DovaValueModule : DovaObjectModule {
 		calloc_call.add_argument (new CCodeConstant ("1"));
 		calloc_call.add_argument (base_type_size);
 
-		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())), calloc_call)));
+		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))), calloc_call)));
 
 		generate_class_declaration ((Class) object_class, cfile);
 
-		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeCastExpression (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())), "DovaObject *"), "type"), new CCodeFunctionCall (new CCodeIdentifier ("dova_type_type_get")))));
+		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeCastExpression (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))), "DovaObject *"), "type"), new CCodeFunctionCall (new CCodeIdentifier ("dova_type_type_get")))));
 
 		var set_base_type = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_base_type"));
-		set_base_type.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		set_base_type.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		set_base_type.add_argument (base_type);
 		type_init_block.add_statement (new CCodeExpressionStatement (set_base_type));
 
 		var base_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_get_object_size"));
 		base_size.add_argument (base_type);
 
-		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("_%s_object_offset".printf (st.get_lower_case_cname ())), base_size)));
+		type_init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("_%s_object_offset".printf (get_ccode_lower_case_name (st))), base_size)));
 
 		var sizeof_call = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
 		sizeof_call.add_argument (new CCodeIdentifier (get_ccode_name (st)));
 		var set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_object_size"));
-		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		set_size.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, base_size, sizeof_call));
 		type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
 		set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_size"));
-		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		set_size.add_argument (sizeof_call);
 		type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
 		set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_type_size"));
-		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		set_size.add_argument (base_type_size);
 		type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
-		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (st.get_lower_case_cname ())));
-		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		var type_init_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_type_init".printf (get_ccode_lower_case_name (st))));
+		type_init_call.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		type_init_block.add_statement (new CCodeExpressionStatement (type_init_call));
 
 		// workaround: set value_size again as it is currently overwritten by dova_object_type_init
 		set_size = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_size"));
-		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ())));
+		set_size.add_argument (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st))));
 		set_size.add_argument (sizeof_call);
 		type_init_block.add_statement (new CCodeExpressionStatement (set_size));
 
-		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ()))), type_init_block));
+		type_fun.block.add_statement (new CCodeIfStatement (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st)))), type_init_block));
 
-		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (st.get_lower_case_cname ()))));
+		type_fun.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("%s_type".printf (get_ccode_lower_case_name (st)))));
 
 		cfile.add_function (type_fun);
 
-		var type_init_fun = new CCodeFunction ("%s_type_init".printf (st.get_lower_case_cname ()));
+		var type_init_fun = new CCodeFunction ("%s_type_init".printf (get_ccode_lower_case_name (st)));
 		type_init_fun.add_parameter (new CCodeParameter ("type", "DovaType *"));
 		type_init_fun.block = new CCodeBlock ();
 
@@ -170,11 +170,11 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 		var value_copy_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_copy"));
 		value_copy_call.add_argument (new CCodeIdentifier ("type"));
-		value_copy_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_copy".printf (st.get_lower_case_cname ())), "void (*)(void *, intptr_t,  void *, intptr_t)"));
+		value_copy_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_copy".printf (get_ccode_lower_case_name (st))), "void (*)(void *, intptr_t,  void *, intptr_t)"));
 		type_init_fun.block.add_statement (new CCodeExpressionStatement (value_copy_call));
 
 		if (st.scope.lookup ("equals") is Method) {
-			var value_equals_fun = new CCodeFunction ("%s_value_equals".printf (st.get_lower_case_cname ()), "bool");
+			var value_equals_fun = new CCodeFunction ("%s_value_equals".printf (get_ccode_lower_case_name (st)), "bool");
 			value_equals_fun.modifiers = CCodeModifiers.STATIC;
 			value_equals_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (st) + "*"));
 			value_equals_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
@@ -183,7 +183,7 @@ public class Vala.DovaValueModule : DovaObjectModule {
 			value_equals_fun.block = new CCodeBlock ();
 			var val = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("value"), new CCodeIdentifier ("value_index"));
 			var other = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("other"), new CCodeIdentifier ("other_index"));
-			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_equals".printf (st.get_lower_case_cname ())));
+			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_equals".printf (get_ccode_lower_case_name (st))));
 			ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, val));
 			ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, other));
 			value_equals_fun.block.add_statement (new CCodeReturnStatement (ccall));
@@ -193,18 +193,18 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 			var value_equals_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_equals"));
 			value_equals_call.add_argument (new CCodeIdentifier ("type"));
-			value_equals_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_equals".printf (st.get_lower_case_cname ())), "bool (*)(void *, intptr_t,  void *, intptr_t)"));
+			value_equals_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_equals".printf (get_ccode_lower_case_name (st))), "bool (*)(void *, intptr_t,  void *, intptr_t)"));
 			type_init_fun.block.add_statement (new CCodeExpressionStatement (value_equals_call));
 		}
 
 		if (st.scope.lookup ("hash") is Method) {
-			var value_hash_fun = new CCodeFunction ("%s_value_hash".printf (st.get_lower_case_cname ()), "uintptr_t");
+			var value_hash_fun = new CCodeFunction ("%s_value_hash".printf (get_ccode_lower_case_name (st)), "uintptr_t");
 			value_hash_fun.modifiers = CCodeModifiers.STATIC;
 			value_hash_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (st) + "*"));
 			value_hash_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
 			value_hash_fun.block = new CCodeBlock ();
 			var val = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("value"), new CCodeIdentifier ("value_index"));
-			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_hash".printf (st.get_lower_case_cname ())));
+			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_hash".printf (get_ccode_lower_case_name (st))));
 			ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, val));
 			value_hash_fun.block.add_statement (new CCodeReturnStatement (ccall));
 			cfile.add_function (value_hash_fun);
@@ -213,24 +213,24 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 			var value_hash_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_hash"));
 			value_hash_call.add_argument (new CCodeIdentifier ("type"));
-			value_hash_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_hash".printf (st.get_lower_case_cname ())), "uintptr_t (*)(void *, intptr_t)"));
+			value_hash_call.add_argument (new CCodeCastExpression (new CCodeIdentifier ("%s_value_hash".printf (get_ccode_lower_case_name (st))), "uintptr_t (*)(void *, intptr_t)"));
 			type_init_fun.block.add_statement (new CCodeExpressionStatement (value_hash_call));
 		}
 
 		// generate method to box values
-		var value_to_any_fun = new CCodeFunction ("%s_value_to_any".printf (st.get_lower_case_cname ()), "DovaObject*");
+		var value_to_any_fun = new CCodeFunction ("%s_value_to_any".printf (get_ccode_lower_case_name (st)), "DovaObject*");
 		value_to_any_fun.modifiers = CCodeModifiers.STATIC;
 		value_to_any_fun.add_parameter (new CCodeParameter ("value", "void *"));
 		value_to_any_fun.add_parameter (new CCodeParameter ("value_index", "intptr_t"));
 		value_to_any_fun.block = new CCodeBlock ();
 		var alloc_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_alloc"));
-		alloc_call.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (st.get_lower_case_cname ()))));
+		alloc_call.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (get_ccode_lower_case_name (st)))));
 		cdecl = new CCodeDeclaration ("DovaObject *");
 		cdecl.add_declarator (new CCodeVariableDeclarator ("result", alloc_call));
 		value_to_any_fun.block.add_statement (cdecl);
 		var priv_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_PRIVATE".printf (get_ccode_upper_case_name (st, null))));
 		priv_call.add_argument (new CCodeIdentifier ("result"));
-		var copy_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_copy".printf (st.get_lower_case_cname ())));
+		var copy_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_copy".printf (get_ccode_lower_case_name (st))));
 		copy_call.add_argument (priv_call);
 		copy_call.add_argument (new CCodeConstant ("0"));
 		copy_call.add_argument (new CCodeIdentifier ("value"));
@@ -243,11 +243,11 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 		var value_to_any_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_to_any"));
 		value_to_any_call.add_argument (new CCodeIdentifier ("type"));
-		value_to_any_call.add_argument (new CCodeIdentifier ("%s_value_to_any".printf (st.get_lower_case_cname ())));
+		value_to_any_call.add_argument (new CCodeIdentifier ("%s_value_to_any".printf (get_ccode_lower_case_name (st))));
 		type_init_fun.block.add_statement (new CCodeExpressionStatement (value_to_any_call));
 
 		// generate method to unbox values
-		var value_from_any_fun = new CCodeFunction ("%s_value_from_any".printf (st.get_lower_case_cname ()));
+		var value_from_any_fun = new CCodeFunction ("%s_value_from_any".printf (get_ccode_lower_case_name (st)));
 		value_from_any_fun.modifiers = CCodeModifiers.STATIC;
 		value_from_any_fun.add_parameter (new CCodeParameter ("any_", "any *"));
 		value_from_any_fun.add_parameter (new CCodeParameter ("value", get_ccode_name (st) + "*"));
@@ -255,7 +255,7 @@ public class Vala.DovaValueModule : DovaObjectModule {
 		value_from_any_fun.block = new CCodeBlock ();
 		priv_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_PRIVATE".printf (get_ccode_upper_case_name (st, null))));
 		priv_call.add_argument (new CCodeIdentifier ("any_"));
-		copy_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_copy".printf (st.get_lower_case_cname ())));
+		copy_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_copy".printf (get_ccode_lower_case_name (st))));
 		copy_call.add_argument (new CCodeIdentifier ("value"));
 		copy_call.add_argument (new CCodeIdentifier ("value_index"));
 		copy_call.add_argument (priv_call);
@@ -267,7 +267,7 @@ public class Vala.DovaValueModule : DovaObjectModule {
 
 		var value_from_any_call = new CCodeFunctionCall (new CCodeIdentifier ("dova_type_set_value_from_any"));
 		value_from_any_call.add_argument (new CCodeIdentifier ("type"));
-		value_from_any_call.add_argument (new CCodeIdentifier ("%s_value_from_any".printf (st.get_lower_case_cname ())));
+		value_from_any_call.add_argument (new CCodeIdentifier ("%s_value_from_any".printf (get_ccode_lower_case_name (st))));
 		type_init_fun.block.add_statement (new CCodeExpressionStatement (value_from_any_call));
 
 		cfile.add_function (type_init_fun);
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index c725b8b..4823421 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -375,7 +375,7 @@ public class Vala.GAsyncModule : GSignalModule {
 
 		string dataname = Symbol.lower_case_to_camel_case (get_ccode_name (m)) + "Data";
 
-		var finishfunc = new CCodeFunction (get_ccode_finish_real_cname (m));
+		var finishfunc = new CCodeFunction (get_ccode_finish_real_name (m));
 
 		var cparam_map = new HashMap<int,CCodeParameter> (direct_hash, direct_equal);
 
diff --git a/codegen/valagdbusmodule.vala b/codegen/valagdbusmodule.vala
index 4189abf..5fe330b 100644
--- a/codegen/valagdbusmodule.vala
+++ b/codegen/valagdbusmodule.vala
@@ -27,7 +27,7 @@ public class Vala.GDBusModule : GVariantModule {
 
 	public static string get_dbus_name_for_member (Symbol symbol) {
 		var dbus_name = symbol.get_attribute_string ("DBus", "name");
-		if (dbus_name = null) {
+		if (dbus_name != null) {
 			return dbus_name;
 		}
 
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index 56c746d..c7d7524 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -244,7 +244,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf ("<field name=\"parent_instance\">\n");
 			indent++;
 			write_indent ();
-			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"/>\n", gi_type_name (cl.base_class), cl.base_class.get_cname ());
+			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"/>\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class));
 			indent--;
 			write_indent ();
 			buffer.append_printf("</field>\n");
@@ -253,7 +253,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf ("<field name=\"priv\">\n");
 			indent++;
 			write_indent ();
-			buffer.append_printf ("<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", cl.name, cl.get_cname ());
+			buffer.append_printf ("<type name=\"%sPrivate\" c:type=\"%sPrivate*\"/>\n", cl.name, CCodeBaseModule.get_ccode_name (cl));
 			indent--;
 			write_indent ();
 			buffer.append_printf("</field>\n");
@@ -277,7 +277,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf ("<field name=\"parent_class\">\n");
 			indent++;
 			write_indent ();
-			buffer.append_printf ("<type name=\"%sClass\" c:type=\"%sClass\"/>\n", gi_type_name (cl.base_class), cl.base_class.get_cname ());
+			buffer.append_printf ("<type name=\"%sClass\" c:type=\"%sClass\"/>\n", gi_type_name (cl.base_class), CCodeBaseModule.get_ccode_name (cl.base_class));
 			indent--;
 			write_indent ();
 			buffer.append_printf ("</field>\n");
@@ -295,7 +295,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", m.name);
 						indent++;
-						do_write_signature (m, "callback", true, m.name, m.get_cname (), m.get_async_begin_parameters (), new VoidType (), false);
+						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -303,7 +303,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", finish_name);
 						indent++;
-						do_write_signature (m, "callback", true, finish_name, m.get_finish_cname (), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+						do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -311,7 +311,7 @@ public class Vala.GIRWriter : CodeVisitor {
 						write_indent ();
 						buffer.append_printf("<field name=\"%s\">\n", m.name);
 						indent++;
-						do_write_signature (m, "callback", true, m.name, m.get_cname (), m.get_parameters (), m.return_type, m.tree_can_fail);write_signature(m, "callback", true);
+						do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);write_signature(m, "callback", true);
 						indent--;
 						write_indent ();
 						buffer.append_printf ("</field>\n");
@@ -336,7 +336,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf ("</record>\n");
 
 			write_indent ();
-			buffer.append_printf ("<record name=\"%sPrivate\" c:type=\"%sPrivate\" disguised=\"1\"/>\n", cl.name, cl.get_cname ());
+			buffer.append_printf ("<record name=\"%sPrivate\" c:type=\"%sPrivate\" disguised=\"1\"/>\n", cl.name, CCodeBaseModule.get_ccode_name (cl));
 		} else {
 			write_indent ();
 			buffer.append_printf ("<record name=\"%s\"", get_gir_name (cl));
@@ -461,7 +461,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", m.name);
 					indent++;
-					do_write_signature (m, "callback", true, m.name, m.get_cname (), m.get_async_begin_parameters (), new VoidType (), false);
+					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -469,7 +469,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", finish_name);
 					indent++;
-					do_write_signature (m, "callback", true, finish_name, m.get_finish_cname (), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+					do_write_signature (m, "callback", true, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -477,7 +477,7 @@ public class Vala.GIRWriter : CodeVisitor {
 					write_indent ();
 					buffer.append_printf("<field name=\"%s\">\n", m.name);
 					indent++;
-					do_write_signature (m, "callback", true, m.name, m.get_cname (), m.get_parameters (), m.return_type, m.tree_can_fail);
+					do_write_signature (m, "callback", true, m.name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);
 					indent--;
 					write_indent ();
 					buffer.append_printf ("</field>\n");
@@ -558,7 +558,7 @@ public class Vala.GIRWriter : CodeVisitor {
 	public override void visit_enum_value (EnumValue ev) {
 		write_indent ();
 		var en = (Enum) hierarchy[0];
-		buffer.append_printf ("<member name=\"%s\" c:identifier=\"%s\"", ev.name.down (), ev.get_cname ());
+		buffer.append_printf ("<member name=\"%s\" c:identifier=\"%s\"", ev.name.down (), CCodeBaseModule.get_ccode_name (ev));
 		if (ev.value != null) {
 			string value = literal_expression_to_value_string (ev.value);
 			buffer.append_printf (" value=\"%s\"", value);
@@ -584,7 +584,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		write_indent ();
 		buffer.append_printf ("<errordomain name=\"%s\"", edomain.name);
-		buffer.append_printf (" get-quark=\"%squark\"", edomain.get_lower_case_cprefix ());
+		buffer.append_printf (" get-quark=\"%squark\"", CCodeBaseModule.get_ccode_lower_case_prefix (edomain));
 		buffer.append_printf (" codes=\"%s\"", edomain.name);
 		write_symbol_attributes (edomain);
 		buffer.append_printf (">\n");
@@ -613,7 +613,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 	public override void visit_error_code (ErrorCode ecode) {
 		write_indent ();
-		buffer.append_printf ("<member name=\"%s\" c:identifier=\"%s\"", ecode.name.down (), ecode.get_cname ());
+		buffer.append_printf ("<member name=\"%s\" c:identifier=\"%s\"", ecode.name.down (), CCodeBaseModule.get_ccode_name (ecode));
 		if (ecode.value != null) {
 			string value = literal_expression_to_value_string (ecode.value);
 			buffer.append_printf (" value=\"%s\"", value);
@@ -638,7 +638,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		string value = literal_expression_to_value_string (initializer);
 
 		write_indent ();
-		buffer.append_printf ("<constant name=\"%s\" c:identifier=\"%s\"", c.name, c.get_cname ());
+		buffer.append_printf ("<constant name=\"%s\" c:identifier=\"%s\"", c.name, CCodeBaseModule.get_ccode_name (c));
 		buffer.append_printf (" value=\"%s\"", value);
 		write_symbol_attributes (c);
 		buffer.append_printf (">\n");
@@ -661,7 +661,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		}
 
 		write_indent ();
-		buffer.append_printf ("<field name=\"%s\"", f.get_cname ());
+		buffer.append_printf ("<field name=\"%s\"", CCodeBaseModule.get_ccode_name (f));
 		if (f.variable_type.nullable) {
 			buffer.append_printf (" allow-none=\"1\"");
 		}
@@ -706,9 +706,9 @@ public class Vala.GIRWriter : CodeVisitor {
 			}
 
 			foreach (Parameter param in params) {
-				write_param_or_return (param.variable_type, true, ref index, !param.no_array_length, param.name, param.direction);
+				write_param_or_return (param.variable_type, true, ref index, !CCodeBaseModule.get_ccode_no_array_length (param), param.name, param.direction);
 
-				write_implicit_params (param.variable_type, ref index, !param.no_array_length, param.name, param.direction);
+				write_implicit_params (param.variable_type, ref index, !CCodeBaseModule.get_ccode_no_array_length (param), param.name, param.direction);
 			}
 
 			if (ret_is_struct) {
@@ -754,7 +754,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		write_indent ();
 		buffer.append_printf ("<callback name=\"%s\"", cb.name);
-		buffer.append_printf (" c:type=\"%s\"", cb.get_cname ());
+		buffer.append_printf (" c:type=\"%s\"", CCodeBaseModule.get_ccode_name (cb));
 		if (cb.tree_can_fail) {
 			buffer.append_printf (" throws=\"1\"");
 		}
@@ -764,7 +764,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 		write_annotations (cb);
 
-		write_params_and_return (cb.get_parameters (), cb.return_type, !cb.no_array_length, false, null, cb.has_target);
+		write_params_and_return (cb.get_parameters (), cb.return_type, !CCodeBaseModule.get_ccode_no_array_length (cb), false, null, cb.has_target);
 
 		indent--;
 		write_indent ();
@@ -806,7 +806,7 @@ public class Vala.GIRWriter : CodeVisitor {
 
 	bool check_type (DataType type) {
 		// gobject-introspection does not currently support va_list parameters
-		if (type.get_cname () == "va_list") {
+		if (CCodeBaseModule.get_ccode_name (type) == "va_list") {
 			return false;
 		}
 
@@ -830,8 +830,8 @@ public class Vala.GIRWriter : CodeVisitor {
 		string name;
 		if (m.parent_symbol != parent) {
 			instance = false;
-			name = m.get_cname ();
-			var parent_prefix = parent.get_lower_case_cprefix ();
+			name = CCodeBaseModule.get_ccode_name (m);
+			var parent_prefix = CCodeBaseModule.get_ccode_lower_case_prefix (parent);
 			if (name.has_prefix (parent_prefix)) {
 				name = name.substring (parent_prefix.length);
 			}
@@ -845,10 +845,10 @@ public class Vala.GIRWriter : CodeVisitor {
 				finish_name = finish_name.substring (0, finish_name.length - "_async".length);
 			}
 			finish_name += "_finish";
-			do_write_signature (m, tag_name, instance, name, m.get_cname (), m.get_async_begin_parameters (), new VoidType (), false);
-			do_write_signature (m, tag_name, instance, finish_name, m.get_finish_cname (), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
+			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_async_begin_parameters (), new VoidType (), false);
+			do_write_signature (m, tag_name, instance, finish_name, CCodeBaseModule.get_ccode_finish_name (m), m.get_async_end_parameters (), m.return_type, m.tree_can_fail);
 		} else {
-			do_write_signature (m, tag_name, instance, name, m.get_cname (), m.get_parameters (), m.return_type, m.tree_can_fail);
+			do_write_signature (m, tag_name, instance, name, CCodeBaseModule.get_ccode_name (m), m.get_parameters (), m.return_type, m.tree_can_fail);
 		}
 	}
 
@@ -877,7 +877,7 @@ public class Vala.GIRWriter : CodeVisitor {
 			instance_type = CCodeBaseModule.get_data_type_for_symbol ((TypeSymbol) m.parent_symbol);
 		}
 
-		write_params_and_return (params, return_type, !m.no_array_length, false, instance_type);
+		write_params_and_return (params, return_type, !CCodeBaseModule.get_ccode_no_array_length (m), false, instance_type);
 
 		indent--;
 		write_indent ();
@@ -902,9 +902,9 @@ public class Vala.GIRWriter : CodeVisitor {
 		if (m.parent_symbol is Class && m == ((Class)m.parent_symbol).default_construction_method ||
 			m.parent_symbol is Struct && m == ((Struct)m.parent_symbol).default_construction_method) {
 			string m_name = is_struct ? "init" : "new";
-			buffer.append_printf ("<%s name=\"%s\" c:identifier=\"%s\"", tag_name, m_name, m.get_cname ());
+			buffer.append_printf ("<%s name=\"%s\" c:identifier=\"%s\"", tag_name, m_name, CCodeBaseModule.get_ccode_name (m));
 		} else {
-			buffer.append_printf ("<%s name=\"%s\" c:identifier=\"%s\"", tag_name, m.name, m.get_cname ());
+			buffer.append_printf ("<%s name=\"%s\" c:identifier=\"%s\"", tag_name, m.name, CCodeBaseModule.get_ccode_name (m));
 		}
 
 		if (m.tree_can_fail) {
@@ -963,7 +963,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		}
 		
 		write_indent ();
-		buffer.append_printf ("<glib:signal name=\"%s\"", sig.get_cname ());
+		buffer.append_printf ("<glib:signal name=\"%s\"", CCodeBaseModule.get_ccode_name (sig));
 		write_symbol_attributes (sig);
 		buffer.append_printf (">\n");
 		indent++;
@@ -1050,13 +1050,13 @@ public class Vala.GIRWriter : CodeVisitor {
 	}
 
 	private void write_ctype_attributes (TypeSymbol symbol, string suffix = "") {
-		buffer.append_printf (" c:type=\"%s%s\"", symbol.get_cname (), suffix);
+		buffer.append_printf (" c:type=\"%s%s\"", CCodeBaseModule.get_ccode_name (symbol), suffix);
 	}
 
 	private void write_gtype_attributes (TypeSymbol symbol) {
 		write_ctype_attributes(symbol);
-		buffer.append_printf (" glib:type-name=\"%s\"", symbol.get_cname ());
-		buffer.append_printf (" glib:get-type=\"%sget_type\"", symbol.get_lower_case_cprefix ());
+		buffer.append_printf (" glib:type-name=\"%s\"", CCodeBaseModule.get_ccode_name (symbol));
+		buffer.append_printf (" glib:get-type=\"%sget_type\"", CCodeBaseModule.get_ccode_lower_case_prefix (symbol));
 	}
 
 	private void write_type (DataType type, int index = -1) {
@@ -1083,10 +1083,10 @@ public class Vala.GIRWriter : CodeVisitor {
 			buffer.append_printf ("<type name=\"none\"/>\n");
 		} else if (type is PointerType) {
 			write_indent ();
-			buffer.append_printf ("<type name=\"gpointer\" c:type=\"%s\"/>\n", type.get_cname ());
+			buffer.append_printf ("<type name=\"gpointer\" c:type=\"%s\"/>\n", CCodeBaseModule.get_ccode_name (type));
 		} else if (type.data_type != null) {
 			write_indent ();
-			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"", gi_type_name (type.data_type), type.get_cname ());
+			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"", gi_type_name (type.data_type), CCodeBaseModule.get_ccode_name (type));
 
 			List<DataType> type_arguments = type.get_type_arguments ();
 			if (type_arguments.size == 0) {
@@ -1106,7 +1106,7 @@ public class Vala.GIRWriter : CodeVisitor {
 		} else if (type is DelegateType) {
 			var deleg_type = (DelegateType) type;
 			write_indent ();
-			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"/>\n", gi_type_name (deleg_type.delegate_symbol), type.get_cname ());
+			buffer.append_printf ("<type name=\"%s\" c:type=\"%s\"/>\n", gi_type_name (deleg_type.delegate_symbol), CCodeBaseModule.get_ccode_name (type));
 		} else if (type is GenericType) {
 			// generic type parameters not supported in GIR
 			write_indent ();
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index fba5c87..99b17bc 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -343,7 +343,7 @@ public class Vala.GSignalModule : GObjectModule {
 				struct_offset.add_argument (new CCodeIdentifier ("%sClass".printf (get_ccode_name (type))));
 			} else {
 				// interface
-				struct_offset.add_argument (new CCodeIdentifier (((Interface) type).get_type_cname ()));
+				struct_offset.add_argument (new CCodeIdentifier (get_ccode_type_name ((Interface) type)));
 			}
 			struct_offset.add_argument (new CCodeIdentifier (get_ccode_vfunc_name (sig.default_handler)));
 			csignew.add_argument (struct_offset);
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index dc041ca..039f768 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -1221,7 +1221,7 @@ public class Vala.GTypeModule : GErrorModule {
 				ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_real_name (m)));
 
 				if (m.coroutine) {
-					ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_finish_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_finish_real_cname (m)));
+					ccode.add_assignment (new CCodeMemberAccess.pointer (ccast, get_ccode_finish_vfunc_name (m.base_method)), new CCodeIdentifier (get_ccode_finish_real_name (m)));
 				}
 			}
 		}
@@ -1277,7 +1277,7 @@ public class Vala.GTypeModule : GErrorModule {
 	
 	private void add_interface_init_function (Class cl, Interface iface) {
 		var iface_init = new CCodeFunction ("%s_%s_interface_init".printf (get_ccode_lower_case_name (cl), get_ccode_lower_case_name (iface)), "void");
-		iface_init.add_parameter (new CCodeParameter ("iface", "%s *".printf (iface.get_type_cname ())));
+		iface_init.add_parameter (new CCodeParameter ("iface", "%s *".printf (get_ccode_type_name (iface))));
 		iface_init.modifiers = CCodeModifiers.STATIC;
 
 		push_function (iface_init);
@@ -1286,7 +1286,7 @@ public class Vala.GTypeModule : GErrorModule {
 		
 		/* save pointer to parent vtable */
 		string parent_iface_var = "%s_%s_parent_iface".printf (get_ccode_lower_case_name (cl), get_ccode_lower_case_name (iface));
-		var parent_decl = new CCodeDeclaration (iface.get_type_cname () + "*");
+		var parent_decl = new CCodeDeclaration (get_ccode_type_name (iface) + "*");
 		var parent_var_decl = new CCodeVariableDeclarator (parent_iface_var);
 		parent_var_decl.initializer = new CCodeConstant ("NULL");
 		parent_decl.add_declarator (parent_var_decl);
@@ -1320,7 +1320,7 @@ public class Vala.GTypeModule : GErrorModule {
 				if (m.is_abstract || m.is_virtual) {
 					cfunc = new CCodeIdentifier (get_ccode_finish_name (m));
 				} else {
-					cfunc = new CCodeIdentifier (get_ccode_finish_real_cname (m));
+					cfunc = new CCodeIdentifier (get_ccode_finish_real_name (m));
 				}
 				ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, get_ccode_finish_vfunc_name (m.base_interface_method)), cfunc);
 			}
@@ -1848,7 +1848,7 @@ public class Vala.GTypeModule : GErrorModule {
 			}
 		}
 
-		var type_struct = new CCodeStruct ("_%s".printf (iface.get_type_cname ()));
+		var type_struct = new CCodeStruct ("_%s".printf (get_ccode_type_name (iface)));
 		
 		decl_space.add_type_declaration (new CCodeNewline ());
 		var macro = "(%s_get_type ())".printf (get_ccode_lower_case_name (iface, null));
@@ -1860,12 +1860,12 @@ public class Vala.GTypeModule : GErrorModule {
 		macro = "(G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))".printf (get_ccode_type_id (iface));
 		decl_space.add_type_declaration (new CCodeMacroReplacement ("%s(obj)".printf (get_ccode_type_check_function (iface)), macro));
 
-		macro = "(G_TYPE_INSTANCE_GET_INTERFACE ((obj), %s, %s))".printf (get_ccode_type_id (iface), iface.get_type_cname ());
+		macro = "(G_TYPE_INSTANCE_GET_INTERFACE ((obj), %s, %s))".printf (get_ccode_type_id (iface), get_ccode_type_name (iface));
 		decl_space.add_type_declaration (new CCodeMacroReplacement ("%s_GET_INTERFACE(obj)".printf (get_ccode_upper_case_name (iface, null)), macro));
 		decl_space.add_type_declaration (new CCodeNewline ());
 
 		decl_space.add_type_declaration (new CCodeTypeDefinition ("struct _%s".printf (get_ccode_name (iface)), new CCodeVariableDeclarator (get_ccode_name (iface))));
-		decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_struct.name), new CCodeVariableDeclarator (iface.get_type_cname ())));
+		decl_space.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (type_struct.name), new CCodeVariableDeclarator (get_ccode_type_name (iface))));
 
 		type_struct.add_field ("GTypeInterface", "parent_iface");
 
@@ -2041,7 +2041,7 @@ public class Vala.GTypeModule : GErrorModule {
 				var cname = get_ccode_real_name (m);
 				ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, get_ccode_vfunc_name (m)), new CCodeIdentifier (cname));
 				if (m.coroutine) {
-					ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, get_ccode_finish_vfunc_name (m)), new CCodeIdentifier (get_ccode_finish_real_cname (m)));
+					ccode.add_assignment (new CCodeMemberAccess.pointer (ciface, get_ccode_finish_vfunc_name (m)), new CCodeIdentifier (get_ccode_finish_real_name (m)));
 				}
 			}
 		}
diff --git a/codegen/valainterfaceregisterfunction.vala b/codegen/valainterfaceregisterfunction.vala
index f2233be..0b900ea 100644
--- a/codegen/valainterfaceregisterfunction.vala
+++ b/codegen/valainterfaceregisterfunction.vala
@@ -43,7 +43,7 @@ public class Vala.InterfaceRegisterFunction : TypeRegisterFunction {
 	}
 	
 	public override string get_type_struct_name () {
-		return interface_reference.get_type_cname ();
+		return CCodeBaseModule.get_ccode_type_name (interface_reference);
 	}
 
 	public override string get_base_init_func_name () {
@@ -85,7 +85,7 @@ public class Vala.InterfaceRegisterFunction : TypeRegisterFunction {
 			
 			var func = new CCodeFunctionCall (new CCodeIdentifier ("g_type_interface_add_prerequisite"));
 			func.add_argument (new CCodeIdentifier ("%s_type_id".printf (CCodeBaseModule.get_ccode_lower_case_name (interface_reference))));
-			func.add_argument (new CCodeIdentifier (get_ccode_type_id (prereq)));
+			func.add_argument (new CCodeIdentifier (CCodeBaseModule.get_ccode_type_id (prereq)));
 			
 			block.add_statement (new CCodeExpressionStatement (func));
 		}
diff --git a/vala/valaattribute.vala b/vala/valaattribute.vala
index 68d7539..c4e72d6 100644
--- a/vala/valaattribute.vala
+++ b/vala/valaattribute.vala
@@ -125,6 +125,12 @@ public class Vala.Attribute : CodeNode {
 	 * @return     boolean value
 	 */
 	public bool get_bool (string name) {
-		return bool.parse (args.get (name));
+		string value = args.get (name);
+
+		if (value == null) {
+			return false;
+		}
+
+		return bool.parse (value);
 	}
 }
diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala
index c89a78e..b5022db 100644
--- a/vala/valadelegate.vala
+++ b/vala/valadelegate.vala
@@ -45,7 +45,12 @@ public class Vala.Delegate : TypeSymbol {
 	public bool has_target {
 		get {
 			if (_has_target == null) {
-				_has_target = get_attribute_bool ("CCode", "has_target");
+				var a = get_attribute ("CCode");
+				if (a != null && a.has_argument ("has_target")) {
+					_has_target = a.get_bool ("has_target");
+				} else {
+					_has_target = true;
+				}
 			}
 			return _has_target;
 		}
diff --git a/vala/valaerrordomain.vala b/vala/valaerrordomain.vala
index dac4508..fd503a3 100644
--- a/vala/valaerrordomain.vala
+++ b/vala/valaerrordomain.vala
@@ -28,9 +28,6 @@ using GLib;
 public class Vala.ErrorDomain : TypeSymbol {
 	private List<ErrorCode> codes = new ArrayList<ErrorCode> ();
 	private List<Method> methods = new ArrayList<Method> ();
-	private string cprefix;
-	private string lower_case_cprefix;
-	private string lower_case_csuffix;
 
 	/**
 	 * Creates a new error domain.
diff --git a/vala/valagenieparser.vala b/vala/valagenieparser.vala
index 0de741c..4f9c016 100644
--- a/vala/valagenieparser.vala
+++ b/vala/valagenieparser.vala
@@ -3683,8 +3683,8 @@ public class Vala.Genie.Parser : CodeVisitor {
 			d.access = get_access (sym.name);
 		}
 
-		if (!(ModifierFlags.STATIC in flags)) {
-			d.has_target = true;
+		if (ModifierFlags.STATIC in flags) {
+			d.has_target = false;
 		}
 		if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
 			d.external = true;
diff --git a/vala/valagirparser.vala b/vala/valagirparser.vala
index 7a444a6..30167b0 100644
--- a/vala/valagirparser.vala
+++ b/vala/valagirparser.vala
@@ -565,14 +565,9 @@ public class Vala.GirParser : CodeVisitor {
 			if (name == null) {
 				return "";
 			}
-			if (prefix == null) {
-				prefix = symbol.get_attribute_string ("CCode", "lower_case_cprefix");
-			}
+			var prefix = symbol.get_attribute_string ("CCode", "lower_case_cprefix");
 			if (prefix == null && (symbol is ObjectTypeSymbol || symbol is Struct)) {
-				prefix = metadata.get_string (ArgumentType.CPREFIX);
-				if (prefix == null) {
-					prefix = symbol.get_attribute_string ("CCode", "cprefix");
-				}
+				prefix = symbol.get_attribute_string ("CCode", "cprefix");
 			}
 			if (prefix == null) {
 				prefix = "%s%s_".printf (parent.get_lower_case_cprefix (), Symbol.camel_case_to_lower_case (name));
@@ -2182,7 +2177,7 @@ public class Vala.GirParser : CodeVisitor {
 				cl.set_attribute_string ("CCode", "cname", cname);
 			}
 			if (metadata.has_argument (ArgumentType.CPREFIX)) {
-				cl.set_lower_case_cprefix (metadata.get_string (ArgumentType.CPREFIX));
+				cl.set_attribute_string ("CCode", "cprefix", metadata.get_string (ArgumentType.CPREFIX));
 			}
 
 			if (parent != null) {
diff --git a/vala/valalambdaexpression.vala b/vala/valalambdaexpression.vala
index bebcbaf..c4105bd 100644
--- a/vala/valalambdaexpression.vala
+++ b/vala/valalambdaexpression.vala
@@ -135,7 +135,7 @@ public class Vala.LambdaExpression : Expression {
 		var cb = (Delegate) ((DelegateType) target_type).delegate_symbol;
 		var return_type = cb.return_type.get_actual_type (target_type, null, this);
 		method = new Method (get_lambda_name (context), return_type, source_reference);
-		method.attributes = attributes;
+		method.attributes = cb.attributes.copy ();
 		method.array_null_terminated = cb.array_null_terminated;
 		method.array_length_type = cb.array_length_type;
 		// track usage for flow analyzer
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 70a38b5..e53dd81 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -244,9 +244,7 @@ public class Vala.Method : Subroutine {
 		param.cdestroy_notify_parameter_position = param.cparameter_position + 0.1;
 
 		parameters.add (param);
-		if (!param.ellipsis) {
-			scope.add (param.name, param);
-		}
+		scope.add (param.name, param);
 	}
 	
 	public List<Parameter> get_parameters () {
@@ -976,8 +974,8 @@ public class Vala.Method : Subroutine {
 		var callback_param = new Parameter ("_callback_", callback_type);
 		callback_param.initializer = new NullLiteral (source_reference);
 		callback_param.initializer.target_type = callback_type.copy ();
-		callback_param.cparameter_position = -1;
-		callback_param.cdelegate_target_parameter_position = -0.9;
+		callback_param.set_attribute_double ("CCode", "pos", -1);
+		callback_param.set_attribute_double ("CCode", "delegate_target_pos", -0.9);
 
 		params.add (callback_param);
 
@@ -993,7 +991,7 @@ public class Vala.Method : Subroutine {
 		var result_type = new ObjectType ((ObjectTypeSymbol) glib_ns.scope.lookup ("AsyncResult"));
 
 		var result_param = new Parameter ("_res_", result_type);
-		result_param.cparameter_position = 0.1;
+		result_param.set_attribute_double ("CCode", "pos", 0.1);
 		params.add (result_param);
 
 		foreach (var param in parameters) {
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 60c7a60..6aedb92 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -3374,8 +3374,7 @@ public class Vala.Parser : CodeVisitor {
 				// TODO enable warning in future releases
 				Report.warning (get_last_src (), "deprecated syntax, use [CCode (has_target = false)]");
 			}
-		} else {
-			d.has_target = true;
+			d.has_target = false;
 		}
 		if (ModifierFlags.EXTERN in flags || scanner.source_file.file_type == SourceFileType.PACKAGE) {
 			d.external = true;
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index 5c77270..6b48328 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -350,10 +350,6 @@ public class Vala.Struct : TypeSymbol {
 		}
 	}
 
-	private void process_boolean_type_attribute (Attribute a) {
-		boolean_type = true;
-	}
-
 	private void process_integer_type_attribute (Attribute a) {
 		if (a.has_argument ("width")) {
 			width = a.get_integer ("width");
@@ -416,7 +412,7 @@ public class Vala.Struct : TypeSymbol {
 		}
 
 		if (simple_type == null) {
-			if (get_attribute ("SimpleType") != null || boolean_type || integer_type || floating_type) {
+			if (get_attribute ("SimpleType") != null || get_attribute ("BooleanType") != null || get_attribute ("IntegerType") != null || get_attribute ("FloatingType") != null) {
 				simple_type = true;
 			} else {
 				var st = base_struct;
@@ -456,7 +452,7 @@ public class Vala.Struct : TypeSymbol {
 	}
 
 	public bool is_disposable () {
-		if (get_attribute_string ("CCode", "destroy_function") != "") {
+		if (get_attribute_string ("CCode", "destroy_function") != null) {
 			return true;
 		}
 
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala
index d146a3d..6a12bb4 100644
--- a/vapigen/valagidlparser.vala
+++ b/vapigen/valagidlparser.vala
@@ -196,9 +196,9 @@ public class Vala.GIdlParser : CodeVisitor {
 	}
 
 	private string get_finish_cname (Method m) {
-		var finish_cname = sym.get_attribute_string ("CCode", "finish_name");
+		var finish_cname = m.get_attribute_string ("CCode", "finish_name");
 		if (finish_cname != null) {
-			returnf finish_cname;
+			return finish_cname;
 		}
 		var result = get_cname (m);
 		if (result.has_suffix ("_async")) {
@@ -260,7 +260,6 @@ public class Vala.GIdlParser : CodeVisitor {
 		}
 		return "";
 	}
-}
 
 	private string[] get_attributes_for_node (IdlNode node) {
 		string name;
@@ -921,7 +920,7 @@ public class Vala.GIdlParser : CodeVisitor {
 
 			if (ref_function != null) {
 				cl.set_attribute_string ("CCode", "ref_function", ref_function);
-				cl.set_attribute_string ("CCode", "ref_function_void", ref_function_void);
+				cl.set_attribute_bool ("CCode", "ref_function_void", ref_function_void);
 			}
 			if (copy_function != null) {
 				cl.set_attribute_string ("CCode", "copy_function", copy_function);
@@ -1059,7 +1058,7 @@ public class Vala.GIdlParser : CodeVisitor {
 
 			if (ref_function != null) {
 				cl.set_attribute_string ("CCode", "ref_function", ref_function);
-				cl.set_attribute_string ("CCode", "ref_function_void", ref_function_void);
+				cl.set_attribute_bool ("CCode", "ref_function_void", ref_function_void);
 			}
 			if (copy_function != null) {
 				cl.set_attribute_string ("CCode", "copy_function", copy_function);
@@ -1115,7 +1114,7 @@ public class Vala.GIdlParser : CodeVisitor {
 							}
 						} else if (nv[0] == "has_copy_function") {
 							if (eval (nv[1]) == "0") {
-								st.has_copy_function = false;
+								st.set_attribute_bool ("CCode", "has_copy_function", false);
 							}
 						} else if (nv[0] == "has_destroy_function") {
 							if (eval (nv[1]) == "0") {
@@ -1246,7 +1245,7 @@ public class Vala.GIdlParser : CodeVisitor {
 
 			if (ref_function != null) {
 				cl.set_attribute_string ("CCode", "ref_function", ref_function);
-				cl.set_attribute_string ("CCode", "ref_function_void", ref_function_void);
+				cl.set_attribute_bool ("CCode", "ref_function_void", ref_function_void);
 			}
 			if (copy_function != null) {
 				cl.set_attribute_string ("CCode", "copy_function", copy_function);



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