From: Jürg Billeter Date: Mon, 8 Feb 2010 07:07:26 +0000 (+0100) Subject: D-Bus: Move DataType.get_type_signature to D-Bus modules X-Git-Tag: 0.8.0~297 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bf5ac7da776bf73ab0f3768ff2516bad493b5625;p=thirdparty%2Fvala.git D-Bus: Move DataType.get_type_signature to D-Bus modules Fixes bug 607558. --- diff --git a/codegen/valadbusclientmodule.vala b/codegen/valadbusclientmodule.vala index 0f8e76509..f86920634 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 2ceca5fbc..8325aa698 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 da81400b7..2ed20f227 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 aee77433d..18564b319 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 7e6cb64c4..bba74622f 100644 --- a/vala/valadatatype.vala +++ b/vala/valadatatype.vala @@ -473,32 +473,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 diff --git a/vala/valaenum.vala b/vala/valaenum.vala index 471a1832d..7c6391c54 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 63b8b8542..6ce33ccc1 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 b3fd075d9..2614f8af9 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; - } }