[vala] Fix generic type resolution with nested generic types in base types



commit 48db33faa9cb0cbf9f4604130f793122548cc8e7
Author: Jürg Billeter <j bitron ch>
Date:   Sun Oct 11 22:52:48 2009 +0200

    Fix generic type resolution with nested generic types in base types

 vala/valasemanticanalyzer.vala |   17 ++---------------
 1 files changed, 2 insertions(+), 15 deletions(-)
---
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index 103344b..1b746dc 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -533,21 +533,8 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 			instance_base_type = new ObjectType ((Interface) base_type.data_type);
 		}
 		foreach (DataType type_arg in base_type.get_type_arguments ()) {
-			if (type_arg.type_parameter != null) {
-				// link to type argument of derived type
-				int param_index = instance_type.data_type.get_type_parameter_index (type_arg.type_parameter.name);
-				if (param_index == -1) {
-					Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (type_arg.type_parameter.name));
-					node_reference.error = true;
-					return null;
-				}
-				if (instance_type.get_type_arguments ().size <= param_index) {
-					Report.error (node_reference.source_reference, "internal error: missing type argument for type parameter `%s' in `%s'".printf (type_arg.type_parameter.get_full_name (), instance_type.to_string ()));
-					node_reference.error = true;
-					return null;
-				}
-				type_arg = instance_type.get_type_arguments ().get (param_index);
-			}
+			// resolve type argument specified in base type (possibly recursively for nested generic types)
+			type_arg = type_arg.get_actual_type (instance_type, null, node_reference);
 			instance_base_type.add_type_argument (type_arg);
 		}
 		return instance_base_type;



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