vala r1158 - in trunk: . gobject



Author: juergbi
Date: Mon Mar 24 20:14:14 2008
New Revision: 1158
URL: http://svn.gnome.org/viewvc/vala?rev=1158&view=rev

Log:
2008-03-24  Juerg Billeter  <j bitron ch>

	* gobject/valaccodegenerator.vala,
	  gobject/valaccodegeneratormethod.vala: fix generated code for
	  methods returning structs


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/gobject/valaccodegeneratormethod.vala

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Mon Mar 24 20:14:14 2008
@@ -518,7 +518,7 @@
 				header_type_member_declaration.append (cdecl);
 
 				var var_decl = new CCodeVariableDeclarator (f.get_cname ());
-				var_decl.initializer = default_value_for_type (f.type_reference);
+				var_decl.initializer = default_value_for_type (f.type_reference, true);
 
 				if (f.initializer != null) {
 					var init = (CCodeExpression) f.initializer.ccodenode;
@@ -1055,7 +1055,7 @@
 
 			/* try to initialize uninitialized variables */
 			if (decl.initializer == null) {
-				((CCodeVariableDeclarator) decl.ccodenode).initializer = default_value_for_type (decl.type_reference);
+				((CCodeVariableDeclarator) decl.ccodenode).initializer = default_value_for_type (decl.type_reference, true);
 			}
 		}
 		
@@ -1460,7 +1460,7 @@
 			if (current_return_type is VoidType) {
 				cerror_block.add_statement (new CCodeReturnStatement ());
 			} else {
-				cerror_block.add_statement (new CCodeReturnStatement (default_value_for_type (current_return_type)));
+				cerror_block.add_statement (new CCodeReturnStatement (default_value_for_type (current_return_type, false)));
 			}
 
 			var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("inner_error"), new CCodeConstant ("NULL"));

Modified: trunk/gobject/valaccodegeneratormethod.vala
==============================================================================
--- trunk/gobject/valaccodegeneratormethod.vala	(original)
+++ trunk/gobject/valaccodegeneratormethod.vala	Mon Mar 24 20:14:14 2008
@@ -676,7 +676,7 @@
 		} else {
 			ccheck.call = new CCodeIdentifier ("g_return_val_if_fail");
 
-			var cdefault = default_value_for_type (ret_type);
+			var cdefault = default_value_for_type (ret_type, false);
 			if (cdefault != null) {
 				ccheck.add_argument (cdefault);
 			} else {
@@ -699,7 +699,7 @@
 		} else {
 			ccheck.call = new CCodeIdentifier ("g_return_val_if_fail");
 
-			var cdefault = default_value_for_type (ret_type);
+			var cdefault = default_value_for_type (ret_type, false);
 			if (cdefault != null) {
 				ccheck.add_argument (cdefault);
 			} else {
@@ -719,13 +719,14 @@
 		return new CCodeExpressionStatement (cassert);
 	}
 
-	private CCodeExpression default_value_for_type (DataType! type) {
+	private CCodeExpression default_value_for_type (DataType! type, bool initializer_expression) {
 		if ((type.data_type != null && type.data_type.is_reference_type ()) || type is PointerType || type is ArrayType) {
 			return new CCodeConstant ("NULL");
 		} else if (type.data_type != null && type.data_type.get_default_value () != null) {
 			return new CCodeConstant (type.data_type.get_default_value ());
-		} else if (type.data_type is Struct) {
+		} else if (type.data_type is Struct && initializer_expression) {
 			// 0-initialize struct with struct initializer { 0 }
+			// only allowed as initializer expression in C
 			var clist = new CCodeInitializerList ();
 			clist.append (new CCodeConstant ("0"));
 			return clist;



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