]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support GHashTable in D-Bus clients, patch by Marc-André Lureau
authorJürg Billeter <j@bitron.ch>
Sun, 2 Nov 2008 17:11:39 +0000 (17:11 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 2 Nov 2008 17:11:39 +0000 (17:11 +0000)
2008-11-02  Jürg Billeter  <j@bitron.ch>

* gobject/valadbusclientmodule.vala:

Support GHashTable in D-Bus clients, patch by Marc-André Lureau

svn path=/trunk/; revision=1954

ChangeLog
gobject/valadbusclientmodule.vala

index e74ae93d0f9c441cbea5d356f22f7ca7de47a67e..4767489bcc76df3138ca839396c6f85b710a6850 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-02  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valadbusclientmodule.vala:
+
+       Support GHashTable in D-Bus clients, patch by Marc-André Lureau
+
 2008-11-02  Jürg Billeter  <j@bitron.ch>
 
        * vala/valadatatype.vala:
index e3dace0100f60e21f36a4c79d00e46e5607e8e01..51ebfccc38ad2a7c8daff26d19cbbd56686b477b 100644 (file)
@@ -129,7 +129,11 @@ public class Vala.DBusClientModule : CCodeModule {
                        int i = 0;
                        foreach (FormalParameter param in reply_method.get_parameters ()) {
                                if ((++i) == param_count) {
-                                       // error parameter
+                                       if (!(param.parameter_type is ErrorType)) {
+                                               Report.error (null, "DBus reply callbacks must end with GLib.Error argument");
+                                               return;
+                                       }
+
                                        break;
                                }
                                if (param.parameter_type is ArrayType && ((ArrayType) param.parameter_type).element_type.data_type != codegen.string_type.data_type) {
@@ -154,7 +158,7 @@ public class Vala.DBusClientModule : CCodeModule {
                                                // special case string array
                                                cend_call.add_argument (new CCodeIdentifier ("G_TYPE_STRV"));
                                        } else {
-                                               cend_call.add_argument (new CCodeIdentifier (param.parameter_type.data_type.get_type_id ()));
+                                               cend_call.add_argument (get_dbus_g_type (param.parameter_type));
                                        }
                                        cend_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (param.name)));
                                        creply_call.add_argument (new CCodeIdentifier (param.name));
@@ -301,7 +305,7 @@ public class Vala.DBusClientModule : CCodeModule {
                                ccall.add_argument (type_call);
                                ccall.add_argument (new CCodeIdentifier ("dbus_%s".printf (param.name)));
                        } else {
-                               ccall.add_argument (new CCodeIdentifier (param.parameter_type.data_type.get_type_id ()));
+                               ccall.add_argument (get_dbus_g_type (param.parameter_type));
                                ccall.add_argument (new CCodeIdentifier (param.name));
                        }
                }
@@ -396,13 +400,7 @@ public class Vala.DBusClientModule : CCodeModule {
                        } else {
                                // string arrays or other datatypes
 
-                               if (method.return_type is ArrayType) {
-                                       // string arrays
-                                       ccall.add_argument (new CCodeIdentifier ("G_TYPE_STRV"));
-                               } else {
-                                       // other types
-                                       ccall.add_argument (new CCodeIdentifier (method.return_type.data_type.get_type_id ()));
-                               }
+                               ccall.add_argument (get_dbus_g_type (method.return_type));
 
                                var cdecl = new CCodeDeclaration (method.return_type.get_cname ());
                                cdecl.add_declarator (new CCodeVariableDeclarator ("result"));
@@ -448,8 +446,8 @@ public class Vala.DBusClientModule : CCodeModule {
        }
 
        CCodeExpression get_dbus_g_type (DataType data_type) {
-               var array_type = data_type as ArrayType;
-               if (array_type != null) {
+               if (data_type is ArrayType) {
+                       var array_type = data_type as ArrayType;
                        if (array_type.element_type.data_type == codegen.string_type.data_type) {
                                return new CCodeIdentifier ("G_TYPE_STRV");
                        }
@@ -462,6 +460,18 @@ public class Vala.DBusClientModule : CCodeModule {
                        }
                        carray_type.add_argument (get_dbus_g_type (array_type.element_type));
                        return carray_type;
+               } else if (data_type.data_type == null) {
+                       critical ("Internal error during DBus type generation with: %s", data_type.to_string ());
+                       return new CCodeIdentifier ("G_TYPE_NONE");
+               } else if (data_type.data_type.get_full_name () == "GLib.HashTable") {
+                       var cmap_type = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_type_get_map"));
+                       var type_args = data_type.get_type_arguments ();
+
+                       cmap_type.add_argument (new CCodeConstant ("\"GHashTable\""));
+                       foreach (DataType type_arg in type_args)
+                               cmap_type.add_argument (get_dbus_g_type (type_arg));
+
+                       return cmap_type;
                } else {
                        return new CCodeIdentifier (data_type.data_type.get_type_id ());
                }