vala r2142 - in trunk: . gobject



Author: juergbi
Date: Sat Dec 13 19:37:29 2008
New Revision: 2142
URL: http://svn.gnome.org/viewvc/vala?rev=2142&view=rev

Log:
2008-12-13  JÃrg Billeter  <j bitron ch>

	* gobject/valadbusmodule.vala:

	Support reading and writing nullable GLib.Value values


Modified:
   trunk/ChangeLog
   trunk/gobject/valadbusmodule.vala

Modified: trunk/gobject/valadbusmodule.vala
==============================================================================
--- trunk/gobject/valadbusmodule.vala	(original)
+++ trunk/gobject/valadbusmodule.vala	Sat Dec 13 19:37:29 2008
@@ -361,6 +361,14 @@
 		} 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 @@
 			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);
 			}



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