]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Do not support use of generics in static methods of generic types
authorJürg Billeter <j@bitron.ch>
Mon, 14 Sep 2009 18:29:41 +0000 (20:29 +0200)
committerJürg Billeter <j@bitron.ch>
Mon, 14 Sep 2009 18:32:26 +0000 (20:32 +0200)
Fixes bug 589071.

codegen/valaccodemethodcallmodule.vala
codegen/valaccodemethodmodule.vala
vala/valasemanticanalyzer.vala

index ddde56d21cd184376424fec6f3f31d0edfd5d32d..1d1e87b57661c8e6dd382e775563ee3d88443529 100644 (file)
@@ -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
index 281c44acf2044597d075f92be021403f860264f5..8d625d79ad9d954a95ce16badfed2a42987cce11 100644 (file)
@@ -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"));
index 032cc4b5b1e831958202d4d1cb482b88ba4bf4ec..ff54fbcd14c3321d73845b7a0f2c3839a93e6c6f 100644 (file)
@@ -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