vala r2115 - in trunk: . vala



Author: juergbi
Date: Tue Dec  2 21:31:49 2008
New Revision: 2115
URL: http://svn.gnome.org/viewvc/vala?rev=2115&view=rev

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

	* vala/valaassignment.vala:
	* vala/valasignal.vala:

	Resolve generic types when connecting signals


Modified:
   trunk/ChangeLog
   trunk/vala/valaassignment.vala
   trunk/vala/valasignal.vala

Modified: trunk/vala/valaassignment.vala
==============================================================================
--- trunk/vala/valaassignment.vala	(original)
+++ trunk/vala/valaassignment.vala	Tue Dec  2 21:31:49 2008
@@ -137,7 +137,7 @@
 				// target_type not available for dynamic signals
 			} else if (ma.symbol_reference is Signal) {
 				var sig = (Signal) ma.symbol_reference;
-				right.target_type = new DelegateType (sig.get_delegate (ma.inner.value_type));
+				right.target_type = new DelegateType (sig.get_delegate (ma.inner.value_type, this));
 			} else {
 				right.target_type = ma.value_type;
 			}
@@ -147,7 +147,7 @@
 			if (ea.container is MemberAccess && ea.container.symbol_reference is Signal) {
 				var ma = (MemberAccess) ea.container;
 				var sig = (Signal) ea.container.symbol_reference;
-				right.target_type = new DelegateType (sig.get_delegate (ma.inner.value_type));
+				right.target_type = new DelegateType (sig.get_delegate (ma.inner.value_type, this));
 			} else {
 				right.target_type = left.value_type;
 			}
@@ -231,7 +231,7 @@
 						dynamic_sig.add_parameter (param.copy ());
 					}
 				}
-				right.target_type = new DelegateType (sig.get_delegate (new ObjectType ((ObjectTypeSymbol) sig.parent_symbol)));
+				right.target_type = new DelegateType (sig.get_delegate (new ObjectType ((ObjectTypeSymbol) sig.parent_symbol), this));
 			} else if (!right.value_type.compatible (right.target_type)) {
 				var delegate_type = (DelegateType) right.target_type;
 

Modified: trunk/vala/valasignal.vala
==============================================================================
--- trunk/vala/valasignal.vala	(original)
+++ trunk/vala/valasignal.vala	Tue Dec  2 21:31:49 2008
@@ -94,8 +94,10 @@
 	 *
 	 * @return delegate
 	 */
-	public Delegate get_delegate (DataType sender_type) {
-		var generated_delegate = new Delegate (null, return_type);
+	public Delegate get_delegate (DataType sender_type, CodeNode node_reference) {
+		var actual_return_type = return_type.get_actual_type (sender_type, node_reference);
+
+		var generated_delegate = new Delegate (null, actual_return_type);
 		generated_delegate.has_target = true;
 
 		// sender parameter is never null and doesn't own its value
@@ -107,7 +109,9 @@
 		generated_delegate.add_parameter (sender_param);
 
 		foreach (FormalParameter param in parameters) {
-			generated_delegate.add_parameter (param.copy ());
+			var actual_param = param.copy ();
+			actual_param.parameter_type = actual_param.parameter_type.get_actual_type (sender_type, node_reference);
+			generated_delegate.add_parameter (actual_param);
 		}
 
 		scope.add (null, generated_delegate);



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