vala r1322 - in trunk: . gobject vala



Author: juergbi
Date: Sat Apr 26 14:11:16 2008
New Revision: 1322
URL: http://svn.gnome.org/viewvc/vala?rev=1322&view=rev

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

	* vala/valaarraytype.vala:
	* vala/valaclassinstancetype.vala:
	* vala/valaclasstype.vala:
	* vala/valadatatype.vala:
	* vala/valadelegatetype.vala:
	* vala/valaerrortype.vala:
	* vala/valainterfaceinstancetype.vala:
	* vala/valainterfacetype.vala:
	* vala/valamethodtype.vala:
	* vala/valanulltype.vala:
	* vala/valapointertype.vala:
	* vala/valasemanticanalyzer.vala:
	* vala/valasymbolresolver.vala:
	* vala/valatypeparametertype.vala:
	* vala/valavaluetype.vala:
	* vala/valavoidtype.vala:
	* gobject/valaccodegenerator.vala:

	Fix handling of const types, fixes bug 529851


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/vala/valaarraytype.vala
   trunk/vala/valaclassinstancetype.vala
   trunk/vala/valaclasstype.vala
   trunk/vala/valadatatype.vala
   trunk/vala/valadelegatetype.vala
   trunk/vala/valaerrortype.vala
   trunk/vala/valainterfaceinstancetype.vala
   trunk/vala/valainterfacetype.vala
   trunk/vala/valamethodtype.vala
   trunk/vala/valanulltype.vala
   trunk/vala/valapointertype.vala
   trunk/vala/valasemanticanalyzer.vala
   trunk/vala/valasymbolresolver.vala
   trunk/vala/valatypeparametertype.vala
   trunk/vala/valavaluetype.vala
   trunk/vala/valavoidtype.vala

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Sat Apr 26 14:11:16 2008
@@ -715,7 +715,7 @@
 		p.accept_children (this);
 
 		if (!p.ellipsis) {
-			string ctypename = p.type_reference.get_cname (false, !p.type_reference.transfers_ownership);
+			string ctypename = p.type_reference.get_cname ();
 			string cname = p.name;
 
 			// pass non-simple structs always by reference
@@ -778,7 +778,6 @@
 			this_type = new InterfaceInstanceType ((Interface) t);
 		}
 		var cselfparam = new CCodeFormalParameter ("self", this_type.get_cname ());
-		var cvalueparam = new CCodeFormalParameter ("value", prop.type_reference.get_cname (false, true));
 
 		if (prop.is_abstract || prop.is_virtual) {
 			if (acc.readable) {
@@ -788,6 +787,7 @@
 			}
 			function.add_parameter (cselfparam);
 			if (acc.writable || acc.construction) {
+				var cvalueparam = new CCodeFormalParameter ("value", acc.value_parameter.type_reference.get_cname ());
 				function.add_parameter (cvalueparam);
 			}
 			
@@ -877,11 +877,12 @@
 			function.add_parameter (cselfparam);
 			if (returns_real_struct) {
 				// return non simple structs as out parameter
-				var coutparamname = "%s*".printf (prop.type_reference.get_cname (false, true));
+				var coutparamname = "%s*".printf (prop.type_reference.get_cname ());
 				var coutparam = new CCodeFormalParameter ("value", coutparamname);
 				function.add_parameter (coutparam);
 			} else {
 				if (acc.writable || acc.construction) {
+					var cvalueparam = new CCodeFormalParameter ("value", acc.value_parameter.type_reference.get_cname ());
 					function.add_parameter (cvalueparam);
 				}
 			}
@@ -1186,7 +1187,7 @@
 		var cvar = new CCodeVariableDeclarator.with_initializer (get_variable_cname (local.name), rhs);
 
 		var cfrag = new CCodeFragment ();
-		var cdecl = new CCodeDeclaration (local.variable_type.get_cname (false, !local.variable_type.takes_ownership));
+		var cdecl = new CCodeDeclaration (local.variable_type.get_cname ());
 		cdecl.add_declarator (cvar);
 		cfrag.append (cdecl);
 
@@ -1426,7 +1427,7 @@
 	
 	private void append_temp_decl (CCodeFragment cfrag, Collection<LocalVariable> temp_vars) {
 		foreach (LocalVariable local in temp_vars) {
-			var cdecl = new CCodeDeclaration (local.variable_type.get_cname (true, !local.variable_type.takes_ownership));
+			var cdecl = new CCodeDeclaration (local.variable_type.get_cname ());
 		
 			var vardecl = new CCodeVariableDeclarator (local.name);
 			// sets #line

Modified: trunk/vala/valaarraytype.vala
==============================================================================
--- trunk/vala/valaarraytype.vala	(original)
+++ trunk/vala/valaarraytype.vala	Sat Apr 26 14:11:16 2008
@@ -129,7 +129,8 @@
 		return result;
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
+	public override string? get_cname () {
+		// FIXME add support for [Immutable] or [Const] attribute to support arrays to const data
 		return element_type.get_cname () + "*";
 	}
 

Modified: trunk/vala/valaclassinstancetype.vala
==============================================================================
--- trunk/vala/valaclassinstancetype.vala	(original)
+++ trunk/vala/valaclassinstancetype.vala	Sat Apr 26 14:11:16 2008
@@ -51,4 +51,8 @@
 		
 		return result;
 	}
+
+	public override string? get_cname () {
+		return "%s*".printf (class_symbol.get_cname (!takes_ownership && !transfers_ownership));
+	}
 }

Modified: trunk/vala/valaclasstype.vala
==============================================================================
--- trunk/vala/valaclasstype.vala	(original)
+++ trunk/vala/valaclasstype.vala	Sat Apr 26 14:11:16 2008
@@ -51,7 +51,7 @@
 		return result;
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
+	public override string? get_cname () {
 		return "%sClass*".printf (class_symbol.get_cname ());
 	}
 }

Modified: trunk/vala/valadatatype.vala
==============================================================================
--- trunk/vala/valadatatype.vala	(original)
+++ trunk/vala/valadatatype.vala	Sat Apr 26 14:11:16 2008
@@ -108,34 +108,10 @@
 	 *
 	 * @return the type string to be used in C code
 	 */
-	public virtual string? get_cname (bool var_type = false, bool const_type = false) {
-		if (data_type == null && type_parameter == null) {
-			if (var_type) {
-				return "gpointer";
-			} else {
-				return "void";
-			}
-		}
-		
-		string ptr;
-		if (type_parameter != null || !data_type.is_reference_type ()) {
-			ptr = "";
-		} else {
-			ptr = "*";
-		}
-		if (data_type != null) {
-			return data_type.get_cname (const_type) + ptr;
-		} else if (type_parameter != null) {
-			if (const_type) {
-				return "gconstpointer";
-			} else {
-				return "gpointer";
-			}
-		} else {
-			/* raise error */
-			Report.error (source_reference, "unresolved type reference");
-			return null;
-		}
+	public virtual string? get_cname () {
+		// raise error
+		Report.error (source_reference, "unresolved type reference");
+		return null;
 	}
 
 	/**

Modified: trunk/vala/valadelegatetype.vala
==============================================================================
--- trunk/vala/valadelegatetype.vala	(original)
+++ trunk/vala/valadelegatetype.vala	Sat Apr 26 14:11:16 2008
@@ -57,8 +57,8 @@
 		return new DelegateType (delegate_symbol);
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
-		return delegate_symbol.get_cname (const_type);
+	public override string? get_cname () {
+		return delegate_symbol.get_cname ();
 	}
 
 	public override Collection<Symbol> get_symbols () {

Modified: trunk/vala/valaerrortype.vala
==============================================================================
--- trunk/vala/valaerrortype.vala	(original)
+++ trunk/vala/valaerrortype.vala	Sat Apr 26 14:11:16 2008
@@ -72,7 +72,7 @@
 		return new ErrorType (error_domain, source_reference);
 	}
 
-	public override string? get_cname (bool var_type = false, bool const_type = false) {
+	public override string? get_cname () {
 		return "GError*";
 	}
 

Modified: trunk/vala/valainterfaceinstancetype.vala
==============================================================================
--- trunk/vala/valainterfaceinstancetype.vala	(original)
+++ trunk/vala/valainterfaceinstancetype.vala	Sat Apr 26 14:11:16 2008
@@ -51,4 +51,8 @@
 		
 		return result;
 	}
+
+	public override string? get_cname () {
+		return "%s*".printf (interface_symbol.get_cname (!takes_ownership && !transfers_ownership));
+	}
 }

Modified: trunk/vala/valainterfacetype.vala
==============================================================================
--- trunk/vala/valainterfacetype.vala	(original)
+++ trunk/vala/valainterfacetype.vala	Sat Apr 26 14:11:16 2008
@@ -51,7 +51,7 @@
 		return result;
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
+	public override string? get_cname () {
 		return "%sIface*".printf (interface_symbol.get_cname ());
 	}
 }

Modified: trunk/vala/valamethodtype.vala
==============================================================================
--- trunk/vala/valamethodtype.vala	(original)
+++ trunk/vala/valamethodtype.vala	Sat Apr 26 14:11:16 2008
@@ -63,7 +63,7 @@
 		return method_symbol.get_full_name ();
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
+	public override string? get_cname () {
 		return "gpointer";
 	}
 }

Modified: trunk/vala/valanulltype.vala
==============================================================================
--- trunk/vala/valanulltype.vala	(original)
+++ trunk/vala/valanulltype.vala	Sat Apr 26 14:11:16 2008
@@ -56,4 +56,8 @@
 	public override DataType copy () {
 		return new NullType (source_reference);
 	}
+
+	public override string? get_cname () {
+		return "gpointer";
+	}
 }

Modified: trunk/vala/valapointertype.vala
==============================================================================
--- trunk/vala/valapointertype.vala	(original)
+++ trunk/vala/valapointertype.vala	Sat Apr 26 14:11:16 2008
@@ -41,11 +41,11 @@
 		return base_type.to_string () + "*";
 	}
 
-	public override string? get_cname (bool var_type = false, bool const_type = false) {
+	public override string? get_cname () {
 		if (base_type.data_type != null && base_type.data_type.is_reference_type ()) {
-			return base_type.get_cname (var_type, const_type);
+			return base_type.get_cname ();
 		} else {
-			return base_type.get_cname (var_type, const_type) + "*";
+			return base_type.get_cname () + "*";
 		}
 	}
 

Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala	(original)
+++ trunk/vala/valasemanticanalyzer.vala	Sat Apr 26 14:11:16 2008
@@ -735,7 +735,9 @@
 			}
 
 			if (acc.body != null && (acc.writable || acc.construction)) {
-				acc.value_parameter = new FormalParameter ("value", acc.prop.type_reference, acc.source_reference);
+				var value_type = acc.prop.type_reference.copy ();
+				value_type.takes_ownership = value_type.transfers_ownership;
+				acc.value_parameter = new FormalParameter ("value", value_type, acc.source_reference);
 				acc.body.scope.add (acc.value_parameter.name, acc.value_parameter);
 			}
 		}

Modified: trunk/vala/valasymbolresolver.vala
==============================================================================
--- trunk/vala/valasymbolresolver.vala	(original)
+++ trunk/vala/valasymbolresolver.vala	Sat Apr 26 14:11:16 2008
@@ -295,6 +295,8 @@
 		/* check for array */
 		if (unresolved_type.array_rank > 0) {
 			var element_type = type;
+			// array contains strong references by default
+			element_type.takes_ownership = element_type.is_reference_type_or_type_parameter ();
 			element_type.transfers_ownership = false;
 			element_type.nullable = false;
 

Modified: trunk/vala/valatypeparametertype.vala
==============================================================================
--- trunk/vala/valatypeparametertype.vala	(original)
+++ trunk/vala/valatypeparametertype.vala	Sat Apr 26 14:11:16 2008
@@ -40,4 +40,12 @@
 
 		return result;
 	}
+
+	public override string? get_cname () {
+		if (takes_ownership || transfers_ownership) {
+			return "gpointer";
+		} else {
+			return "gconstpointer";
+		}
+	}
 }

Modified: trunk/vala/valavaluetype.vala
==============================================================================
--- trunk/vala/valavaluetype.vala	(original)
+++ trunk/vala/valavaluetype.vala	Sat Apr 26 14:11:16 2008
@@ -52,11 +52,11 @@
 		return result;
 	}
 
-	public override string? get_cname (bool var_type, bool const_type) {
+	public override string? get_cname () {
 		string ptr = "";
 		if (nullable) {
 			ptr = "*";
 		}
-		return type_symbol.get_cname (const_type) + ptr;
+		return type_symbol.get_cname () + ptr;
 	}
 }

Modified: trunk/vala/valavoidtype.vala
==============================================================================
--- trunk/vala/valavoidtype.vala	(original)
+++ trunk/vala/valavoidtype.vala	Sat Apr 26 14:11:16 2008
@@ -37,7 +37,7 @@
 		return "void";
 	}
 
-	public override string? get_cname (bool var_type = false, bool const_type = false) {
+	public override string? get_cname () {
 		return "void";
 	}
 



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