[vala] D-Bus: Move DataType.get_type_signature to D-Bus modules
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] D-Bus: Move DataType.get_type_signature to D-Bus modules
- Date: Mon, 8 Feb 2010 07:09:05 +0000 (UTC)
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]