[vala/staging] codegen: Unify handling of GenericType arguments/parameters



commit ece2191048b92387d8ee21ef61ce2a1291055c48
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Apr 18 21:02:21 2021 +0200

    codegen: Unify handling of GenericType arguments/parameters

 codegen/valaccodearraymodule.vala      |  3 +-
 codegen/valaccodebasemodule.vala       | 53 ++++++++++++-----------------
 codegen/valaccodemethodcallmodule.vala | 20 +++++------
 codegen/valaccodemethodmodule.vala     | 61 +++++++++++++++-------------------
 codegen/valagasyncmodule.vala          | 12 +++----
 codegen/valagirwriter.vala             | 12 +++----
 codegen/valagobjectmodule.vala         | 26 +++++++--------
 codegen/valagtypemodule.vala           | 28 +++++-----------
 8 files changed, 92 insertions(+), 123 deletions(-)
---
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 100dca58e..cb1568d77 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -559,8 +559,7 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                function.add_parameter (new CCodeParameter ("length", get_ccode_name (ssize_t_type)));
                if (array_type.element_type is GenericType) {
                        // dup function array elements
-                       string func_name = "%s_dup_func".printf (((GenericType) 
array_type.element_type).type_parameter.name.ascii_down ());
-                       function.add_parameter (new CCodeParameter (func_name, "GBoxedCopyFunc"));
+                       function.add_parameter (new CCodeParameter (get_ccode_copy_function (((GenericType) 
array_type.element_type).type_parameter), "GBoxedCopyFunc"));
                }
 
                // definition
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 0dfaacf67..759a8499c 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -2180,16 +2180,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                if (current_method != null) {
                                        // allow capturing generic type parameters
                                        foreach (var type_param in current_method.get_type_parameters ()) {
-                                               string func_name;
-
-                                               func_name = "%s_type".printf (type_param.name.ascii_down ());
-                                               data.add_field ("GType", func_name);
-
-                                               func_name = "%s_dup_func".printf (type_param.name.ascii_down 
());
-                                               data.add_field ("GBoxedCopyFunc", func_name);
-
-                                               func_name = "%s_destroy_func".printf 
(type_param.name.ascii_down ());
-                                               data.add_field ("GDestroyNotify", func_name);
+                                               data.add_field ("GType", get_ccode_type_id (type_param));
+                                               data.add_field ("GBoxedCopyFunc", get_ccode_copy_function 
(type_param));
+                                               data.add_field ("GDestroyNotify", get_ccode_destroy_function 
(type_param));
                                        }
                                }
                        }
@@ -2256,12 +2249,14 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                                if (current_method != null) {
                                        // allow capturing generic type parameters
-                                       var suffices = new string[] {"type", "dup_func", "destroy_func"};
+                                       var data_var = get_variable_cexpression ("_data%d_".printf 
(block_id));
                                        foreach (var type_param in current_method.get_type_parameters ()) {
-                                               foreach (string suffix in suffices) {
-                                                       string func_name = "%s_%s".printf 
(type_param.name.ascii_down (), suffix);
-                                                       ccode.add_assignment (new CCodeMemberAccess.pointer 
(get_variable_cexpression ("_data%d_".printf (block_id)), func_name), get_variable_cexpression (func_name));
-                                               }
+                                               var type = get_ccode_type_id (type_param);
+                                               var dup_func = get_ccode_copy_function (type_param);
+                                               var destroy_func = get_ccode_destroy_function (type_param);
+                                               ccode.add_assignment (new CCodeMemberAccess.pointer 
(data_var, type), get_variable_cexpression (type));
+                                               ccode.add_assignment (new CCodeMemberAccess.pointer 
(data_var, dup_func), get_variable_cexpression (dup_func));
+                                               ccode.add_assignment (new CCodeMemberAccess.pointer 
(data_var, destroy_func), get_variable_cexpression (destroy_func));
                                        }
                                }
                        }
@@ -2355,19 +2350,15 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        if (current_method != null) {
                                // assign captured generic type parameters
                                foreach (var type_param in current_method.get_type_parameters ()) {
-                                       string func_name;
-
-                                       func_name = "%s_type".printf (type_param.name.ascii_down ());
-                                       ccode.add_declaration ("GType", new CCodeVariableDeclarator 
(func_name));
-                                       ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (outer_block, func_name));
-
-                                       func_name = "%s_dup_func".printf (type_param.name.ascii_down ());
-                                       ccode.add_declaration ("GBoxedCopyFunc", new CCodeVariableDeclarator 
(func_name));
-                                       ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (outer_block, func_name));
-
-                                       func_name = "%s_destroy_func".printf (type_param.name.ascii_down ());
-                                       ccode.add_declaration ("GDestroyNotify", new CCodeVariableDeclarator 
(func_name));
-                                       ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (outer_block, func_name));
+                                       var type = get_ccode_type_id (type_param);
+                                       var dup_func = get_ccode_copy_function (type_param);
+                                       var destroy_func = get_ccode_destroy_function (type_param);
+                                       ccode.add_declaration ("GType", new CCodeVariableDeclarator (type));
+                                       ccode.add_declaration ("GBoxedCopyFunc", new CCodeVariableDeclarator 
(dup_func));
+                                       ccode.add_declaration ("GDestroyNotify", new CCodeVariableDeclarator 
(destroy_func));
+                                       ccode.add_assignment (new CCodeIdentifier (type), new 
CCodeMemberAccess.pointer (outer_block, type));
+                                       ccode.add_assignment (new CCodeIdentifier (dup_func), new 
CCodeMemberAccess.pointer (outer_block, dup_func));
+                                       ccode.add_assignment (new CCodeIdentifier (destroy_func), new 
CCodeMemberAccess.pointer (outer_block, destroy_func));
                                }
                        }
 
@@ -2928,7 +2919,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
        public CCodeExpression get_type_id_expression (DataType type, bool is_chainup = false) {
                if (type is GenericType) {
                        var type_parameter = ((GenericType) type).type_parameter;
-                       string identifier = "%s_type".printf (type_parameter.name.ascii_down ());
+                       string identifier = get_ccode_type_id (type_parameter);
                        return get_generic_type_expression (identifier, (GenericType) type, is_chainup);
                } else {
                        string type_id = get_ccode_type_id (type);
@@ -2946,7 +2937,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        return new CCodeIdentifier ("g_error_copy");
                } else if (type is GenericType) {
                        var type_parameter = ((GenericType) type).type_parameter;
-                       string identifier = "%s_dup_func".printf (type_parameter.name.ascii_down ());
+                       string identifier = get_ccode_copy_function (type_parameter);
                        return get_generic_type_expression (identifier, (GenericType) type, is_chainup);
                } else if (type.type_symbol != null) {
                        string dup_function;
@@ -3463,7 +3454,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        return new CCodeIdentifier ("g_error_free");
                } else if (type is GenericType) {
                        var type_parameter = ((GenericType) type).type_parameter;
-                       string identifier = "%s_destroy_func".printf (type_parameter.name.ascii_down ());
+                       string identifier = get_ccode_destroy_function (type_parameter);
                        return get_generic_type_expression (identifier, (GenericType) type, is_chainup);
                } else if (type.type_symbol != null) {
                        string unref_function;
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 4d6a9ff5a..c400dc2e9 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -196,9 +196,9 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                        int type_param_index = 0;
                                        var cl = (Class) m.parent_symbol;
                                        foreach (TypeParameter type_param in cl.get_type_parameters ()) {
-                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.01), new CCodeIdentifier ("%s_type".printf (type_param.name.ascii_down ())));
-                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.02), new CCodeIdentifier ("%s_dup_func".printf (type_param.name.ascii_down ())));
-                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.03), new CCodeIdentifier ("%s_destroy_func".printf (type_param.name.ascii_down ())));
+                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.01), new CCodeIdentifier (get_ccode_type_id (type_param)));
+                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.02), new CCodeIdentifier (get_ccode_copy_function (type_param)));
+                                               in_arg_map.set (get_param_pos (0.1 * type_param_index + 
0.03), new CCodeIdentifier (get_ccode_destroy_function (type_param)));
                                                type_param_index++;
                                        }
                                }
@@ -384,14 +384,14 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
 
                        if (!current_class.is_compact && current_class.has_type_parameters ()) {
                                /* type, dup func, and destroy func fields for generic types */
-                               var suffices = new string[] {"type", "dup_func", "destroy_func"};
+                               var priv_access = new CCodeMemberAccess.pointer (new CCodeIdentifier 
("self"), "priv");
                                foreach (TypeParameter type_param in current_class.get_type_parameters ()) {
-                                       var priv_access = new CCodeMemberAccess.pointer (new CCodeIdentifier 
("self"), "priv");
-
-                                       foreach (string suffix in suffices) {
-                                               var param_name = new CCodeIdentifier ("%s_%s".printf 
(type_param.name.ascii_down (), suffix));
-                                               ccode.add_assignment (new CCodeMemberAccess.pointer 
(priv_access, param_name.name), param_name);
-                                       }
+                                       var type = get_ccode_type_id (type_param);
+                                       var dup_func = get_ccode_copy_function (type_param);
+                                       var destroy_func = get_ccode_destroy_function (type_param);
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (priv_access, 
type), new CCodeIdentifier (type));
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (priv_access, 
dup_func), new CCodeIdentifier (dup_func));
+                                       ccode.add_assignment (new CCodeMemberAccess.pointer (priv_access, 
destroy_func), new CCodeIdentifier (destroy_func));
                                }
                        }
                        // object chainup can't be used as expression
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 944d6a00a..df3b8b274 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -504,20 +504,17 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
                                        }
 
                                        // allow capturing generic type parameters
+                                       var data_var = get_variable_cexpression ("_data%d_".printf 
(block_id));
                                        foreach (var type_param in m.get_type_parameters ()) {
-                                               string func_name;
-
-                                               func_name = "%s_type".printf (type_param.name.ascii_down ());
-                                               ccode.add_declaration ("GType", new CCodeVariableDeclarator 
(func_name));
-                                               ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), func_name));
-
-                                               func_name = "%s_dup_func".printf (type_param.name.ascii_down 
());
-                                               ccode.add_declaration ("GBoxedCopyFunc", new 
CCodeVariableDeclarator (func_name));
-                                               ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), func_name));
-
-                                               func_name = "%s_destroy_func".printf 
(type_param.name.ascii_down ());
-                                               ccode.add_declaration ("GDestroyNotify", new 
CCodeVariableDeclarator (func_name));
-                                               ccode.add_assignment (new CCodeIdentifier (func_name), new 
CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (block_id)), func_name));
+                                               var type = get_ccode_type_id (type_param);
+                                               var dup_func = get_ccode_copy_function (type_param);
+                                               var destroy_func = get_ccode_destroy_function (type_param);
+                                               ccode.add_declaration ("GType", new CCodeVariableDeclarator 
(type));
+                                               ccode.add_declaration ("GBoxedCopyFunc", new 
CCodeVariableDeclarator (dup_func));
+                                               ccode.add_declaration ("GDestroyNotify", new 
CCodeVariableDeclarator (destroy_func));
+                                               ccode.add_assignment (new CCodeIdentifier (type), new 
CCodeMemberAccess.pointer (data_var, type));
+                                               ccode.add_assignment (new CCodeIdentifier (dup_func), new 
CCodeMemberAccess.pointer (data_var, dup_func));
+                                               ccode.add_assignment (new CCodeIdentifier (destroy_func), new 
CCodeMemberAccess.pointer (data_var, destroy_func));
                                        }
                                } else if (m.parent_symbol is Class && !m.coroutine) {
                                        var cl = (Class) m.parent_symbol;
@@ -607,23 +604,14 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
                                                        ccode.add_assignment (get_this_cexpression (), new 
CCodeCastExpression (ccall, get_ccode_name (cl) + "*"));
 
                                                        /* type, dup func, and destroy func fields for 
generic types */
+                                                       var priv_access = new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv");
                                                        foreach (TypeParameter type_param in 
current_class.get_type_parameters ()) {
-                                                               CCodeIdentifier param_name;
-                                                               CCodeAssignment assign;
-
-                                                               var priv_access = new 
CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), "priv");
-
-                                                               param_name = new CCodeIdentifier 
("%s_type".printf (type_param.name.ascii_down ()));
-                                                               assign = new CCodeAssignment (new 
CCodeMemberAccess.pointer (priv_access, param_name.name), param_name);
-                                                               ccode.add_expression (assign);
-
-                                                               param_name = new CCodeIdentifier 
("%s_dup_func".printf (type_param.name.ascii_down ()));
-                                                               assign = new CCodeAssignment (new 
CCodeMemberAccess.pointer (priv_access, param_name.name), param_name);
-                                                               ccode.add_expression (assign);
-
-                                                               param_name = new CCodeIdentifier 
("%s_destroy_func".printf (type_param.name.ascii_down ()));
-                                                               assign = new CCodeAssignment (new 
CCodeMemberAccess.pointer (priv_access, param_name.name), param_name);
-                                                               ccode.add_expression (assign);
+                                                               var type = get_ccode_type_id (type_param);
+                                                               var dup_func = get_ccode_copy_function 
(type_param);
+                                                               var destroy_func = get_ccode_destroy_function 
(type_param);
+                                                               ccode.add_assignment (new 
CCodeMemberAccess.pointer (priv_access, type), new CCodeIdentifier (type));
+                                                               ccode.add_assignment (new 
CCodeMemberAccess.pointer (priv_access, dup_func), new CCodeIdentifier (dup_func));
+                                                               ccode.add_assignment (new 
CCodeMemberAccess.pointer (priv_access, destroy_func), new CCodeIdentifier (destroy_func));
                                                        }
                                                }
                                        } else if (current_type_symbol is Class) {
@@ -988,13 +976,16 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
                if (type_parameters != null) {
                        int type_param_index = 0;
                        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"));
+                               var type = get_ccode_type_id (type_param);
+                               var dup_func = get_ccode_copy_function (type_param);
+                               var destroy_func = get_ccode_destroy_function (type_param);
+                               cparam_map.set (get_param_pos (0.1 * type_param_index + 0.01), new 
CCodeParameter (type, "GType"));
+                               cparam_map.set (get_param_pos (0.1 * type_param_index + 0.02), new 
CCodeParameter (dup_func, "GBoxedCopyFunc"));
+                               cparam_map.set (get_param_pos (0.1 * type_param_index + 0.03), new 
CCodeParameter (destroy_func, "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 ())));
+                                       carg_map.set (get_param_pos (0.1 * type_param_index + 0.01), new 
CCodeIdentifier (type));
+                                       carg_map.set (get_param_pos (0.1 * type_param_index + 0.02), new 
CCodeIdentifier (dup_func));
+                                       carg_map.set (get_param_pos (0.1 * type_param_index + 0.03), new 
CCodeIdentifier (destroy_func));
                                }
                                type_param_index++;
                        }
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index 6c59c7fe4..7019f8ee6 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -70,9 +70,9 @@ public class Vala.GAsyncModule : GtkModule {
                }
 
                foreach (var type_param in m.get_type_parameters ()) {
-                       data.add_field ("GType", "%s_type".printf (type_param.name.ascii_down ()));
-                       data.add_field ("GBoxedCopyFunc", "%s_dup_func".printf (type_param.name.ascii_down 
()));
-                       data.add_field ("GDestroyNotify", "%s_destroy_func".printf 
(type_param.name.ascii_down ()));
+                       data.add_field ("GType", get_ccode_type_id (type_param));
+                       data.add_field ("GBoxedCopyFunc", get_ccode_copy_function (type_param));
+                       data.add_field ("GDestroyNotify", get_ccode_destroy_function (type_param));
                }
 
                if (!(m.return_type is VoidType)) {
@@ -313,9 +313,9 @@ public class Vala.GAsyncModule : GtkModule {
                emit_context.pop_symbol ();
 
                foreach (var type_param in m.get_type_parameters ()) {
-                       var type = "%s_type".printf (type_param.name.ascii_down ());
-                       var dup_func = "%s_dup_func".printf (type_param.name.ascii_down ());
-                       var destroy_func = "%s_destroy_func".printf (type_param.name.ascii_down ());
+                       var type = get_ccode_type_id (type_param);
+                       var dup_func = get_ccode_copy_function (type_param);
+                       var destroy_func = get_ccode_destroy_function (type_param);
                        ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, type), new 
CCodeIdentifier (type));
                        ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, dup_func), new 
CCodeIdentifier (dup_func));
                        ccode.add_assignment (new CCodeMemberAccess.pointer (data_var, destroy_func), new 
CCodeIdentifier (destroy_func));
diff --git a/codegen/valagirwriter.vala b/codegen/valagirwriter.vala
index acb19c8db..d60c3da3d 100644
--- a/codegen/valagirwriter.vala
+++ b/codegen/valagirwriter.vala
@@ -1099,9 +1099,9 @@ public class Vala.GIRWriter : CodeVisitor {
        private void write_type_parameter (TypeParameter type_parameter, string tag_type) {
                write_indent ();
                if (tag_type == "property") {
-                       buffer.append_printf ("<%s name=\"%s-type\" writable=\"1\" construct-only=\"1\">\n", 
tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" writable=\"1\" construct-only=\"1\">\n", 
tag_type, get_ccode_type_id (type_parameter).replace ("_", "-"));
                } else {
-                       buffer.append_printf ("<%s name=\"%s_type\" transfer-ownership=\"none\">\n", 
tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" transfer-ownership=\"none\">\n", tag_type, 
get_ccode_type_id (type_parameter));
                }
                indent++;
                write_indent ();
@@ -1111,9 +1111,9 @@ public class Vala.GIRWriter : CodeVisitor {
                buffer.append_printf ("</%s>\n", tag_type);
                write_indent ();
                if (tag_type == "property") {
-                       buffer.append_printf ("<%s name=\"%s-dup-func\" writable=\"1\" 
construct-only=\"1\">\n", tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" writable=\"1\" construct-only=\"1\">\n", 
tag_type, get_ccode_copy_function (type_parameter).replace ("_", "-"));
                } else {
-                       buffer.append_printf ("<%s name=\"%s_dup_func\" transfer-ownership=\"none\">\n", 
tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" transfer-ownership=\"none\">\n", tag_type, 
get_ccode_copy_function (type_parameter));
                }
                indent++;
                write_indent ();
@@ -1123,9 +1123,9 @@ public class Vala.GIRWriter : CodeVisitor {
                buffer.append_printf ("</%s>\n", tag_type);
                write_indent ();
                if (tag_type == "property") {
-                       buffer.append_printf ("<%s name=\"%s-destroy-func\" writable=\"1\" 
construct-only=\"1\">\n", tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" writable=\"1\" construct-only=\"1\">\n", 
tag_type, get_ccode_destroy_function (type_parameter).replace ("_", "-"));
                } else {
-                       buffer.append_printf ("<%s name=\"%s_destroy_func\" transfer-ownership=\"none\">\n", 
tag_type, type_parameter.name.ascii_down ());
+                       buffer.append_printf ("<%s name=\"%s\" transfer-ownership=\"none\">\n", tag_type, 
get_ccode_destroy_function (type_parameter));
                }
                indent++;
                write_indent ();
diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala
index 30d7eace6..238a67909 100644
--- a/codegen/valagobjectmodule.vala
+++ b/codegen/valagobjectmodule.vala
@@ -79,11 +79,9 @@ public class Vala.GObjectModule : GTypeModule {
                        CCodeConstant func_name_constant;
                        CCodeFunctionCall cinst, cspec;
 
-                       var name_prefix = type_param.name.ascii_down ();
-                       var canonical_prefix = name_prefix.replace ("_", "-");
 
-                       func_name = "%s_type".printf (name_prefix);
-                       func_name_constant = new CCodeConstant ("\"%s-type\"".printf (canonical_prefix));
+                       func_name = get_ccode_type_id (type_param);
+                       func_name_constant = new CCodeConstant ("\"%s\"".printf (func_name.replace ("_", 
"-")));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier 
("g_object_class_install_property"));
                        cinst.add_argument (ccall);
@@ -99,8 +97,8 @@ public class Vala.GObjectModule : GTypeModule {
                        prop_enum.add_value (new CCodeEnumValue (enum_value));
 
 
-                       func_name = "%s_dup_func".printf (name_prefix);
-                       func_name_constant = new CCodeConstant ("\"%s-dup-func\"".printf (canonical_prefix));
+                       func_name = get_ccode_copy_function (type_param);
+                       func_name_constant = new CCodeConstant ("\"%s\"".printf (func_name.replace ("_", 
"-")));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier 
("g_object_class_install_property"));
                        cinst.add_argument (ccall);
@@ -115,8 +113,8 @@ public class Vala.GObjectModule : GTypeModule {
                        prop_enum.add_value (new CCodeEnumValue (enum_value));
 
 
-                       func_name = "%s_destroy_func".printf (name_prefix);
-                       func_name_constant = new CCodeConstant ("\"%s-destroy-func\"".printf 
(canonical_prefix));
+                       func_name = get_ccode_destroy_function (type_param);
+                       func_name_constant = new CCodeConstant ("\"%s\"".printf (func_name.replace ("_", 
"-")));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier 
("g_object_class_install_property"));
                        cinst.add_argument (ccall);
@@ -291,7 +289,7 @@ public class Vala.GObjectModule : GTypeModule {
                        CCodeMemberAccess cfield;
                        CCodeFunctionCall csetcall;
 
-                       func_name = "%s_type".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_type_id (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
@@ -301,7 +299,7 @@ public class Vala.GObjectModule : GTypeModule {
                        ccode.add_expression (csetcall);
                        ccode.add_break ();
 
-                       func_name = "%s_dup_func".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_copy_function (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
@@ -311,7 +309,7 @@ public class Vala.GObjectModule : GTypeModule {
                        ccode.add_expression (csetcall);
                        ccode.add_break ();
 
-                       func_name = "%s_destroy_func".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_destroy_function (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
@@ -422,7 +420,7 @@ public class Vala.GObjectModule : GTypeModule {
                        CCodeMemberAccess cfield;
                        CCodeFunctionCall cgetcall;
 
-                       func_name = "%s_type".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_type_id (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
@@ -431,7 +429,7 @@ public class Vala.GObjectModule : GTypeModule {
                        ccode.add_assignment (cfield, cgetcall);
                        ccode.add_break ();
 
-                       func_name = "%s_dup_func".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_copy_function (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
@@ -440,7 +438,7 @@ public class Vala.GObjectModule : GTypeModule {
                        ccode.add_assignment (cfield, cgetcall);
                        ccode.add_break ();
 
-                       func_name = "%s_destroy_func".printf (type_param.name.ascii_down ());
+                       func_name = get_ccode_destroy_function (type_param);
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), 
func_name).ascii_up ();
                        ccode.add_case (new CCodeIdentifier (enum_value));
                        cfield = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (new 
CCodeIdentifier ("self"), "priv"), func_name);
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 1a0e0d1b3..138201008 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -488,16 +488,9 @@ public class Vala.GTypeModule : GErrorModule {
                if (is_gtypeinstance) {
                        /* create type, dup_func, and destroy_func fields for generic types */
                        foreach (TypeParameter type_param in cl.get_type_parameters ()) {
-                               string func_name;
-
-                               func_name = "%s_type".printf (type_param.name.ascii_down ());
-                               instance_priv_struct.add_field ("GType", func_name);
-
-                               func_name = "%s_dup_func".printf (type_param.name.ascii_down ());
-                               instance_priv_struct.add_field ("GBoxedCopyFunc", func_name);
-
-                               func_name = "%s_destroy_func".printf (type_param.name.ascii_down ());
-                               instance_priv_struct.add_field ("GDestroyNotify", func_name);
+                               instance_priv_struct.add_field ("GType", get_ccode_type_id (type_param));
+                               instance_priv_struct.add_field ("GBoxedCopyFunc", get_ccode_copy_function 
(type_param));
+                               instance_priv_struct.add_field ("GDestroyNotify", get_ccode_destroy_function 
(type_param));
                        }
                }
 
@@ -1427,17 +1420,17 @@ public class Vala.GTypeModule : GErrorModule {
                                GenericType p_type = new GenericType (p);
                                DataType p_data_type = p_type.get_actual_type 
(SemanticAnalyzer.get_data_type_for_symbol (cl), null, cl);
 
-                               add_generic_accessor_function ("get_%s_type".printf (p.name.ascii_down ()),
+                               add_generic_accessor_function ("get_%s".printf (get_ccode_type_id (p)),
                                                               "GType",
                                                               get_type_id_expression (p_data_type),
                                                               p, cl, iface);
 
-                               add_generic_accessor_function ("get_%s_dup_func".printf (p.name.ascii_down 
()),
+                               add_generic_accessor_function ("get_%s".printf (get_ccode_copy_function (p)),
                                                               "GBoxedCopyFunc",
                                                               get_dup_func_expression (p_data_type, null),
                                                               p, cl, iface);
 
-                               add_generic_accessor_function ("get_%s_destroy_func".printf 
(p.name.ascii_down ()),
+                               add_generic_accessor_function ("get_%s".printf (get_ccode_destroy_function 
(p)),
                                                               "GDestroyNotify",
                                                               get_destroy_func_expression (p_data_type),
                                                               p, cl, iface);
@@ -2091,8 +2084,7 @@ public class Vala.GTypeModule : GErrorModule {
 
                if (iface.get_attribute ("GenericAccessors") != null) {
                        foreach (TypeParameter p in iface.get_type_parameters ()) {
-                               string method_name = "get_%s_type".printf (p.name.ascii_down ());
-                               var vdeclarator = new CCodeFunctionDeclarator (method_name);
+                               var vdeclarator = new CCodeFunctionDeclarator ("get_%s".printf 
(get_ccode_type_id (p)));
                                var this_type = SemanticAnalyzer.get_data_type_for_symbol (iface);
                                vdeclarator.add_parameter (new CCodeParameter ("self", get_ccode_name 
(this_type)));
 
@@ -2100,8 +2092,7 @@ public class Vala.GTypeModule : GErrorModule {
                                vdecl.add_declarator (vdeclarator);
                                type_struct.add_declaration (vdecl);
 
-                               method_name = "get_%s_dup_func".printf (p.name.ascii_down ());
-                               vdeclarator = new CCodeFunctionDeclarator (method_name);
+                               vdeclarator = new CCodeFunctionDeclarator ("get_%s".printf 
(get_ccode_copy_function (p)));
                                this_type = SemanticAnalyzer.get_data_type_for_symbol (iface);
                                vdeclarator.add_parameter (new CCodeParameter ("self", get_ccode_name 
(this_type)));
 
@@ -2109,8 +2100,7 @@ public class Vala.GTypeModule : GErrorModule {
                                vdecl.add_declarator (vdeclarator);
                                type_struct.add_declaration (vdecl);
 
-                               method_name = "get_%s_destroy_func".printf (p.name.ascii_down ());
-                               vdeclarator = new CCodeFunctionDeclarator (method_name);
+                               vdeclarator = new CCodeFunctionDeclarator ("get_%s".printf 
(get_ccode_destroy_function (p)));
                                this_type = SemanticAnalyzer.get_data_type_for_symbol (iface);
                                vdeclarator.add_parameter (new CCodeParameter ("self", get_ccode_name 
(this_type)));
 


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