From: Jürg Billeter Date: Mon, 14 Sep 2009 18:29:41 +0000 (+0200) Subject: Do not support use of generics in static methods of generic types X-Git-Tag: 0.7.6~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db1b554d4e85afcef86232e368d3381aee4cc96e;p=thirdparty%2Fvala.git Do not support use of generics in static methods of generic types Fixes bug 589071. --- diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala index ddde56d21..1d1e87b57 100644 --- a/codegen/valaccodemethodcallmodule.vala +++ b/codegen/valaccodemethodcallmodule.vala @@ -112,18 +112,9 @@ internal class Vala.CCodeMethodCallModule : CCodeAssignmentModule { break; } } - } else if (m != null) { - if (m.binding != MemberBinding.INSTANCE && m.parent_symbol is ObjectTypeSymbol) { - // support static methods in generic types - var type_symbol = (ObjectTypeSymbol) m.parent_symbol; - if (type_symbol.get_type_parameters ().size > 0 && ma.inner is MemberAccess) { - var type_ma = (MemberAccess) ma.inner; - add_generic_type_arguments (ccall, type_ma.get_type_arguments (), expr); - } - } - if (m.get_type_parameters ().size > 0) { - add_generic_type_arguments (ccall, ma.get_type_arguments (), expr); - } + } else if (m != null && m.get_type_parameters ().size > 0) { + // generic method + add_generic_type_arguments (ccall, ma.get_type_arguments (), expr); } // the complete call expression, might include casts, comma expressions, and/or assignments diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala index 281c44acf..8d625d79a 100644 --- a/codegen/valaccodemethodmodule.vala +++ b/codegen/valaccodemethodmodule.vala @@ -768,21 +768,6 @@ internal class Vala.CCodeMethodModule : CCodeStructModule { } } else { int type_param_index = 0; - if (m.binding != MemberBinding.INSTANCE && m.parent_symbol is ObjectTypeSymbol) { - // support static methods in generic types - var type_symbol = (ObjectTypeSymbol) m.parent_symbol; - foreach (var type_param in type_symbol.get_type_parameters ()) { - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "GType")); - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeFormalParameter ("%s_dup_func".printf (type_param.name.down ()), "GBoxedCopyFunc")); - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.03), new CCodeFormalParameter ("%s_destroy_func".printf (type_param.name.down ()), "GDestroyNotify")); - if (carg_map != null) { - carg_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeIdentifier ("%s_type".printf (type_param.name.down ()))); - carg_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeIdentifier ("%s_dup_func".printf (type_param.name.down ()))); - carg_map.set (get_param_pos (0.1 * type_param_index + 0.03), new CCodeIdentifier ("%s_destroy_func".printf (type_param.name.down ()))); - } - type_param_index++; - } - } foreach (var type_param in m.get_type_parameters ()) { cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeFormalParameter ("%s_type".printf (type_param.name.down ()), "GType")); cparam_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeFormalParameter ("%s_dup_func".printf (type_param.name.down ()), "GBoxedCopyFunc")); diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 032cc4b5b..ff54fbcd1 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -641,21 +641,6 @@ public class Vala.SemanticAnalyzer : CodeVisitor { if (param_index < instance_type.get_type_arguments ().size) { actual_type = (DataType) instance_type.get_type_arguments ().get (param_index); } - } else if (method_access != null && method_access.inner is MemberAccess) { - // static method in generic type - var type_symbol = (ObjectTypeSymbol) generic_type.type_parameter.parent_symbol; - - int param_index = type_symbol.get_type_parameter_index (generic_type.type_parameter.name); - if (param_index == -1) { - Report.error (node_reference.source_reference, "internal error: unknown type parameter %s".printf (generic_type.type_parameter.name)); - node_reference.error = true; - return null; - } - - var type_ma = (MemberAccess) method_access.inner; - if (param_index < type_ma.get_type_arguments ().size) { - actual_type = (DataType) type_ma.get_type_arguments ().get (param_index); - } } } else { // generic method