vala r1716 - in trunk: . gobject tests



Author: jaredm
Date: Tue Jul 22 01:10:17 2008
New Revision: 1716
URL: http://svn.gnome.org/viewvc/vala?rev=1716&view=rev

Log:
2008-07-22  Jared Moore  <jaredm svn gnome org>

	* gobject/valaccodeclassbinding.vala:
	* goblect/valaccodemethodbinding.vala:

	Generate *_instance_init function for compact classes to initialize
	fields, fixes bug 529679.

	* tests/classes-fields.vala: add test case




Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodeclassbinding.vala
   trunk/gobject/valaccodemethodbinding.vala
   trunk/tests/classes-fields.exp
   trunk/tests/classes-fields.vala

Modified: trunk/gobject/valaccodeclassbinding.vala
==============================================================================
--- trunk/gobject/valaccodeclassbinding.vala	(original)
+++ trunk/gobject/valaccodeclassbinding.vala	Tue Jul 22 01:10:17 2008
@@ -252,6 +252,8 @@
 				codegen.source_type_member_definition.append (unref_fun);
 			}
 		} else if (!cl.is_static) {
+			add_instance_init_function (cl);
+
 			var function = new CCodeFunction (cl.get_lower_case_cprefix () + "free", "void");
 			if (cl.access == SymbolAccessibility.PRIVATE) {
 				function.modifiers = CCodeModifiers.STATIC;
@@ -560,10 +562,16 @@
 		instance_init.add_parameter (new CCodeFormalParameter ("self", "%s *".printf (cl.get_cname ())));
 		instance_init.modifiers = CCodeModifiers.STATIC;
 		
+		if (cl.is_compact) {
+			// Add declaration, since the instance_init function is explicitly called
+			// by the creation methods
+			codegen.source_type_member_declaration.append (instance_init.copy ());
+		}
+
 		var init_block = new CCodeBlock ();
 		instance_init.block = init_block;
 		
-		if (cl.has_private_fields || cl.get_type_parameters ().size > 0) {
+		if (!cl.is_compact && (cl.has_private_fields || cl.get_type_parameters ().size > 0)) {
 			var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_PRIVATE".printf (cl.get_upper_case_cname (null))));
 			ccall.add_argument (new CCodeIdentifier ("self"));
 			init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv"), ccall)));

Modified: trunk/gobject/valaccodemethodbinding.vala
==============================================================================
--- trunk/gobject/valaccodemethodbinding.vala	(original)
+++ trunk/gobject/valaccodemethodbinding.vala	Tue Jul 22 01:10:17 2008
@@ -367,6 +367,10 @@
 						ccall.add_argument (new CCodeIdentifier (cl.get_cname ()));
 						cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("self", ccall));
 						cinit.append (cdecl);
+
+						var cinitcall = new CCodeFunctionCall (new CCodeIdentifier ("%s_instance_init".printf (cl.get_lower_case_cname (null))));
+						cinitcall.add_argument (new CCodeIdentifier ("self"));
+						cinit.append (new CCodeExpressionStatement (cinitcall));
 					} else {
 						var st = (Struct) m.parent_symbol;
 

Modified: trunk/tests/classes-fields.exp
==============================================================================
--- trunk/tests/classes-fields.exp	(original)
+++ trunk/tests/classes-fields.exp	Tue Jul 22 01:10:17 2008
@@ -1 +1 @@
-Field Test: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+Field Test: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Modified: trunk/tests/classes-fields.vala
==============================================================================
--- trunk/tests/classes-fields.vala	(original)
+++ trunk/tests/classes-fields.vala	Tue Jul 22 01:10:17 2008
@@ -1,5 +1,10 @@
 using GLib;
 
+[Compact]
+class CompactTest {
+	public int initialized_field = 24;
+}
+
 class Maman.Foo : Object {
 	public int public_base_field = 2;
 	public class int public_class_field = 23;
@@ -55,8 +60,12 @@
 
 		var foo = new Foo ();
 		stdout.printf (" %d", foo.public_class_field);
-		stdout.printf (" 24\n");
 		
+		var compact = new CompactTest ();
+		stdout.printf (" %d", compact.initialized_field);
+
+		stdout.printf (" 25\n");
+
 		return 0;
 	}
 }



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