[vala/staging] codegen: Unify handling of GenericType arguments/parameters
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] codegen: Unify handling of GenericType arguments/parameters
- Date: Sun, 18 Apr 2021 19:08:11 +0000 (UTC)
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]