Fixes bug 589071.
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
}
} 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"));
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