diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2016-02-04 23:38:48 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2016-04-24 11:40:34 +0200 |
commit | 93f5b6e9eb4cf69787274c0565cd38bc9f466a2e (patch) | |
tree | 792ac2d3d7d137caf2079bca4d802183b6c69b97 | |
parent | 5c528645e831c9f9d6b71a90d978929219f3cbd5 (diff) | |
download | vala-wip/array-helper.tar.gz |
codegen: Create only one vala-array helper function per array-typewip/array-helper
-rw-r--r-- | codegen/valaccodearraymodule.vala | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index 892246487..45b49d486 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -24,9 +24,6 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { - int next_array_dup_id = 0; - int next_array_add_id = 0; - void append_initializer_list (CCodeExpression name_cnode, InitializerList initializer_list, int rank, ref int i) { foreach (Expression e in initializer_list.get_initializers ()) { if (rank > 1) { @@ -461,8 +458,28 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { } } + static uint get_attributes_flag (DataType type) { + uint result = 0U; + + if (type.value_owned) + result += 1 << 0; + if (type.nullable) + result += 1 << 1; + if (type.floating_reference) + result += 1 << 2; + if (type.is_dynamic) + result += 1 << 3; + if (type.is_real_struct_type ()) + result += 1 << 10; + if (type.is_reference_type_or_type_parameter ()) + result += 1 << 11; + + return result; + } + string generate_array_dup_wrapper (ArrayType array_type) { - string dup_func = "_vala_array_dup%d".printf (++next_array_dup_id); + string dup_func = "_vala_%s_%x_array_dup".printf (get_ccode_lower_case_name (array_type.element_type), + get_attributes_flag (array_type.element_type)); if (!add_wrapper (dup_func)) { // wrapper already defined @@ -535,7 +552,8 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { } string generate_array_copy_wrapper (ArrayType array_type) { - string dup_func = "_vala_array_copy%d".printf (++next_array_dup_id); + string dup_func = "_vala_%s_%x_array_copy".printf (get_ccode_lower_case_name (array_type.element_type), + get_attributes_flag (array_type.element_type)); if (!add_wrapper (dup_func)) { // wrapper already defined @@ -589,7 +607,8 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule { } string generate_array_add_wrapper (ArrayType array_type) { - string add_func = "_vala_array_add%d".printf (++next_array_add_id); + string add_func = "_vala_%s_%x_array_add".printf (get_ccode_lower_case_name (array_type.element_type), + get_attributes_flag (array_type.element_type)); if (!add_wrapper (add_func)) { // wrapper already defined |