From: Rico Tzschichholz Date: Wed, 30 Dec 2020 13:50:05 +0000 (+0100) Subject: codegen: Clean up handling of type parameters in generate_cparameters() X-Git-Tag: 0.51.1~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c962a1ac44c858819437cce520b12915ed17f52;p=thirdparty%2Fvala.git codegen: Clean up handling of type parameters in generate_cparameters() --- diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala index 297abb659..ef8f510b1 100644 --- a/codegen/valaccodemethodmodule.vala +++ b/codegen/valaccodemethodmodule.vala @@ -952,24 +952,16 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule { cparam_map.set (get_param_pos (get_ccode_instance_pos (m)), class_param); } + // memory management for generic types + List? type_parameters = null; if (is_gtypeinstance_creation_method (m)) { - // memory management for generic types - int type_param_index = 0; - var cl = (Class) m.parent_symbol; - foreach (TypeParameter type_param in cl.get_type_parameters ()) { - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeParameter ("%s_type".printf (type_param.name.ascii_down ()), "GType")); - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeParameter ("%s_dup_func".printf (type_param.name.ascii_down ()), "GBoxedCopyFunc")); - cparam_map.set (get_param_pos (0.1 * type_param_index + 0.03), new CCodeParameter ("%s_destroy_func".printf (type_param.name.ascii_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.ascii_down ()))); - carg_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeIdentifier ("%s_dup_func".printf (type_param.name.ascii_down ()))); - carg_map.set (get_param_pos (0.1 * type_param_index + 0.03), new CCodeIdentifier ("%s_destroy_func".printf (type_param.name.ascii_down ()))); - } - type_param_index++; - } + type_parameters = ((Class) m.parent_symbol).get_type_parameters (); } else if (!m.closure && (direction & 1) == 1) { + type_parameters = m.get_type_parameters (); + } + if (type_parameters != null) { int type_param_index = 0; - foreach (var type_param in m.get_type_parameters ()) { + foreach (var type_param in type_parameters) { cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new CCodeParameter ("%s_type".printf (type_param.name.ascii_down ()), "GType")); cparam_map.set (get_param_pos (0.1 * type_param_index + 0.02), new CCodeParameter ("%s_dup_func".printf (type_param.name.ascii_down ()), "GBoxedCopyFunc")); cparam_map.set (get_param_pos (0.1 * type_param_index + 0.03), new CCodeParameter ("%s_destroy_func".printf (type_param.name.ascii_down ()), "GDestroyNotify"));