[vala] D-Bus: Move DataType.get_type_signature to D-Bus modules



commit bf5ac7da776bf73ab0f3768ff2516bad493b5625
Author: Jürg Billeter <j bitron ch>
Date:   Mon Feb 8 08:07:26 2010 +0100

    D-Bus: Move DataType.get_type_signature to D-Bus modules
    
    Fixes bug 607558.

 codegen/valadbusclientmodule.vala |    4 +-
 codegen/valadbusmodule.vala       |   60 ++++++++++++++++++++++++++++++++++--
 vala/valaarraytype.vala           |   10 ------
 vala/valaclass.vala               |    8 -----
 vala/valadatatype.vala            |   26 ----------------
 vala/valaenum.vala                |    8 -----
 vala/valastruct.vala              |   19 -----------
 vala/valatypesymbol.vala          |    7 ----
 8 files changed, 58 insertions(+), 84 deletions(-)
---
diff --git a/codegen/valadbusclientmodule.vala b/codegen/valadbusclientmodule.vala
index 0f8e765..f869206 100644
--- a/codegen/valadbusclientmodule.vala
+++ b/codegen/valadbusclientmodule.vala
@@ -1,6 +1,6 @@
 /* valadbusclientmodule.vala
  *
- * Copyright (C) 2007-2009  Jürg Billeter
+ * Copyright (C) 2007-2010  Jürg Billeter
 *  Copyright (C) 2008  Philip Van Hoof
  *
  * This library is free software; you can redistribute it and/or
@@ -2276,7 +2276,7 @@ internal class Vala.DBusClientModule : DBusModule {
 		iter_call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_message_iter_open_container"));
 		iter_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_iter")));
 		iter_call.add_argument (new CCodeIdentifier ("DBUS_TYPE_VARIANT"));
-		iter_call.add_argument (new CCodeConstant ("\"%s\"".printf (prop.property_type.get_type_signature ())));
+		iter_call.add_argument (new CCodeConstant ("\"%s\"".printf (get_type_signature (prop.property_type))));
 		iter_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_subiter")));
 		prefragment.append (new CCodeExpressionStatement (iter_call));
 
diff --git a/codegen/valadbusmodule.vala b/codegen/valadbusmodule.vala
index 2ceca5f..8325aa6 100644
--- a/codegen/valadbusmodule.vala
+++ b/codegen/valadbusmodule.vala
@@ -1,6 +1,6 @@
 /* valadbusmodule.vala
  *
- * Copyright (C) 2008-2009  Jürg Billeter
+ * Copyright (C) 2008-2010  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -98,11 +98,63 @@ internal class Vala.DBusModule : GAsyncModule {
 		return false;
 	}
 
-	public static string get_type_signature (DataType datatype) {
-		if (is_string_marshalled_enum (datatype.data_type)) {
+	public static string? get_type_signature (DataType datatype) {
+		var array_type = datatype as ArrayType;
+
+		if (array_type != null) {
+			string element_type_signature = get_type_signature (array_type.element_type);
+
+			if (element_type_signature == null) {
+				return null;
+			}
+
+			return string.nfill (array_type.rank, 'a') + element_type_signature;
+		} else if (is_string_marshalled_enum (datatype.data_type)) {
 			return "s";
+		} else if (datatype.data_type != null) {
+			string sig = null;
+
+			var ccode = datatype.data_type.get_attribute ("CCode");
+			if (ccode != null) {
+				sig = ccode.get_string ("type_signature");
+			}
+
+			var st = datatype.data_type as Struct;
+			var en = datatype.data_type as Enum;
+			if (sig == null && st != null) {
+				var str = new StringBuilder ();
+				str.append_c ('(');
+				foreach (Field f in st.get_fields ()) {
+					if (f.binding == MemberBinding.INSTANCE) {
+						str.append (get_type_signature (f.field_type));
+					}
+				}
+				str.append_c (')');
+				sig = str.str;
+			} else if (sig == null && en != null) {
+				if (en.is_flags) {
+					return "u";
+				} else {
+					return "i";
+				}
+			}
+
+			var type_args = datatype.get_type_arguments ();
+			if (sig != null && sig.str ("%s") != null && type_args.size > 0) {
+				string element_sig = "";
+				foreach (DataType type_arg in type_args) {
+					var s = get_type_signature (type_arg);
+					if (s != null) {
+						element_sig += s;
+					}
+				}
+
+				sig = sig.printf (element_sig);
+			}
+
+			return sig;
 		} else {
-			return datatype.get_type_signature ();
+			return null;
 		}
 	}
 
diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index da81400..2ed20f2 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -207,16 +207,6 @@ public class Vala.ArrayType : ReferenceType {
 		return true;
 	}
 
-	public override string? get_type_signature () {
-		string element_type_signature = element_type.get_type_signature ();
-
-		if (element_type_signature == null) {
-			return null;
-		}
-
-		return string.nfill (rank, 'a') + element_type_signature;
-	}
-
 	public override void accept_children (CodeVisitor visitor) {
 		element_type.accept (visitor);
 	}
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index aee7743..18564b3 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -123,7 +123,6 @@ public class Vala.Class : ObjectTypeSymbol {
 	private string marshaller_type_name;
 	private string get_value_function;
 	private string set_value_function;
-	private string? type_signature;
 	private bool _is_compact;
 	private bool _is_immutable;
 
@@ -596,10 +595,6 @@ public class Vala.Class : ObjectTypeSymbol {
 		return get_lower_case_cname (infix).up ();
 	}
 
-	public override string? get_type_signature () {
-		return type_signature;
-	}
-
 	public override bool is_reference_type () {
 		return true;
 	}
@@ -654,9 +649,6 @@ public class Vala.Class : ObjectTypeSymbol {
 				add_cheader_filename (filename);
 			}
 		}
-		if (a.has_argument ("type_signature")) {
-			type_signature = a.get_string ("type_signature");
-		}
 		if (a.has_argument ("type_check_function")) {
 			type_check_function = a.get_string ("type_check_function");
 		}
diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala
index 7e6cb64..bba7462 100644
--- a/vala/valadatatype.vala
+++ b/vala/valadatatype.vala
@@ -474,32 +474,6 @@ public abstract class Vala.DataType : CodeNode {
 	}
 
 	/**
-	 * Returns type signature as used for GVariant and D-Bus.
-	 */
-	public virtual string? get_type_signature () {
-		if (data_type != null) {
-			string sig = data_type.get_type_signature ();
-
-			var type_args = get_type_arguments ();
-			if (sig != null && sig.str ("%s") != null && type_args.size > 0) {
-				string element_sig = "";
-				foreach (DataType type_arg in type_args) {
-					var s = type_arg.get_type_signature ();
-					if (s != null) {
-						element_sig += s;
-					}
-				}
-
-				sig = sig.printf (element_sig);
-			}
-
-			return sig;
-		} else {
-			return null;
-		}
-	}
-
-	/**
 	 * Returns whether the value needs to be disposed, i.e. whether
 	 * allocated memory or other resources need to be released when
 	 * the value is no longer needed.
diff --git a/vala/valaenum.vala b/vala/valaenum.vala
index 471a183..7c6391c 100644
--- a/vala/valaenum.vala
+++ b/vala/valaenum.vala
@@ -283,14 +283,6 @@ public class Vala.Enum : TypeSymbol {
 		return "0";
 	}
 
-	public override string? get_type_signature () {
-		if (is_flags) {
-			return "u";
-		} else {
-			return "i";
-		}
-	}
-
 	public override bool check (SemanticAnalyzer analyzer) {
 		if (checked) {
 			return !error;
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index 63b8b85..6ce33cc 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -46,7 +46,6 @@ public class Vala.Struct : TypeSymbol {
 	private string get_value_function;
 	private string set_value_function;
 	private string default_value = null;
-	private string? type_signature;
 	private string copy_function;
 	private string destroy_function;
 
@@ -334,21 +333,6 @@ public class Vala.Struct : TypeSymbol {
 		return get_lower_case_cname (infix).up ();
 	}
 
-	public override string? get_type_signature () {
-		if (type_signature == null) {
-			var str = new StringBuilder ();
-			str.append_c ('(');
-			foreach (Field f in fields) {
-				if (f.binding == MemberBinding.INSTANCE) {
-					str.append (f.field_type.get_type_signature ());
-				}
-			}
-			str.append_c (')');
-			return str.str;
-		}
-		return type_signature;
-	}
-
 	/**
 	 * Returns whether this is a boolean type.
 	 *
@@ -443,9 +427,6 @@ public class Vala.Struct : TypeSymbol {
 		if (a.has_argument ("default_value")) {
 			set_default_value (a.get_string ("default_value"));
 		}
-		if (a.has_argument ("type_signature")) {
-			type_signature = a.get_string ("type_signature");
-		}
 		if (a.has_argument ("copy_function")) {
 			set_copy_function (a.get_string ("copy_function"));
 		}
diff --git a/vala/valatypesymbol.vala b/vala/valatypesymbol.vala
index b3fd075..2614f8a 100644
--- a/vala/valatypesymbol.vala
+++ b/vala/valatypesymbol.vala
@@ -262,11 +262,4 @@ public abstract class Vala.TypeSymbol : Symbol {
 	public virtual int get_type_parameter_index (string name) {
 		return -1;
 	}
-
-	/**
-	 * Returns type signature as used for GVariant and D-Bus
-	 */
-	public virtual string? get_type_signature () {
-		return null;
-	}
 }



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