]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support reading and writing nullable GLib.Value values
authorJürg Billeter <j@bitron.ch>
Sat, 13 Dec 2008 19:37:29 +0000 (19:37 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 13 Dec 2008 19:37:29 +0000 (19:37 +0000)
2008-12-13  Jürg Billeter  <j@bitron.ch>

* gobject/valadbusmodule.vala:

Support reading and writing nullable GLib.Value values

svn path=/trunk/; revision=2142

ChangeLog
gobject/valadbusmodule.vala

index 6afa5a0d40fd30e56d044cd1b8bd49486eebaf20..c137f2250c41bb3f3c9c80e30da8f3ad804e80d3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-13  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valadbusmodule.vala:
+
+       Support reading and writing nullable GLib.Value values
+
 2008-12-13  Jürg Billeter  <j@bitron.ch>
 
        * vapi/gsl.vapi:
index 1e96ddb091528568dd9f640ec2020b642d28fef4..8cc930b1c277e1373212c98252f65659e455470d 100644 (file)
@@ -361,6 +361,14 @@ public class Vala.DBusModule : GAsyncModule {
                } else if (type.data_type is Struct) {
                        if (type.data_type.get_full_name () == "GLib.Value") {
                                result = read_value (fragment, iter_expr);
+                               if (type.nullable) {
+                                       var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
+                                       csizeof.add_argument (new CCodeIdentifier ("GValue"));
+                                       var cdup = new CCodeFunctionCall (new CCodeIdentifier ("g_memdup"));
+                                       cdup.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, result));
+                                       cdup.add_argument (csizeof);
+                                       result = cdup;
+                               }
                        } else {
                                result = read_struct (fragment, (Struct) type.data_type, iter_expr);
                        }
@@ -600,7 +608,11 @@ public class Vala.DBusModule : GAsyncModule {
                        write_array (fragment, (ArrayType) type, iter_expr, expr);
                } else if (type.data_type is Struct) {
                        if (type.data_type.get_full_name () == "GLib.Value") {
-                               write_value (fragment, iter_expr, expr);
+                               if (type.nullable) {
+                                       write_value (fragment, iter_expr, new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, expr));
+                               } else {
+                                       write_value (fragment, iter_expr, expr);
+                               }
                        } else {
                                write_struct (fragment, (Struct) type.data_type, iter_expr, expr);
                        }