vala r1255 - in trunk: . gobject vala



Author: juergbi
Date: Fri Apr 18 21:26:04 2008
New Revision: 1255
URL: http://svn.gnome.org/viewvc/vala?rev=1255&view=rev

Log:
2008-04-18  Juerg Billeter  <j bitron ch>

	* vala/valaclass.vala, gobject/valaccodegeneratorclass.vala: make
	  sure that ref_function and unref_function of classes deriving
	  from GTypeInstance are always initialized


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegeneratorclass.vala
   trunk/vala/valaclass.vala

Modified: trunk/gobject/valaccodegeneratorclass.vala
==============================================================================
--- trunk/gobject/valaccodegeneratorclass.vala	(original)
+++ trunk/gobject/valaccodegeneratorclass.vala	Fri Apr 18 21:26:04 2008
@@ -238,9 +238,6 @@
 
 				source_type_member_definition.append (ref_fun);
 				source_type_member_definition.append (unref_fun);
-
-				cl.set_ref_function (ref_fun.name);
-				cl.set_unref_function (unref_fun.name);
 			}
 		} else if (!cl.is_static) {
 			var function = new CCodeFunction (cl.get_lower_case_cprefix () + "free", "void");

Modified: trunk/vala/valaclass.vala
==============================================================================
--- trunk/vala/valaclass.vala	(original)
+++ trunk/vala/valaclass.vala	Fri Apr 18 21:26:04 2008
@@ -598,8 +598,21 @@
 	public override bool is_reference_counting () {
 		return get_ref_function () != null;
 	}
-	
+
+	bool is_fundamental () {
+		if (base_class != null
+		    && base_class.name == "TypeInstance"
+		    && base_class.parent_symbol.name == "GLib") {
+			return true;
+		}
+		return false;
+	}
+
 	public override string? get_ref_function () {
+		if (ref_function == null && is_fundamental ()) {
+			ref_function = get_lower_case_cprefix () + "ref";
+		}
+
 		if (ref_function == null && base_class != null) {
 			return base_class.get_ref_function ();
 		} else {
@@ -612,6 +625,10 @@
 	}
 
 	public override string? get_unref_function () {
+		if (unref_function == null && is_fundamental ()) {
+			unref_function = get_lower_case_cprefix () + "unref";
+		}
+
 		if (unref_function == null && base_class != null) {
 			return base_class.get_unref_function ();
 		} else {



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