From: Rico Tzschichholz Date: Wed, 7 Dec 2016 17:54:30 +0000 (+0100) Subject: codegen: Reference struct fields with their actual cname X-Git-Tag: 0.35.2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e3b9f7845a2bb2ae5b31803c07d72c89880c125c;p=thirdparty%2Fvala.git codegen: Reference struct fields with their actual cname https://bugzilla.gnome.org/show_bug.cgi?id=775761 --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 3e4da4006..4898a5f13 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -2803,8 +2803,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { has_instance_fields = true; CCodeExpression cexp; // if (cexp) return FALSE; - var s1 = (CCodeExpression) new CCodeMemberAccess.pointer (new CCodeIdentifier ("s1"), f.name); // s1->f - var s2 = (CCodeExpression) new CCodeMemberAccess.pointer (new CCodeIdentifier ("s2"), f.name); // s2->f + var s1 = (CCodeExpression) new CCodeMemberAccess.pointer (new CCodeIdentifier ("s1"), get_ccode_name (f)); // s1->f + var s2 = (CCodeExpression) new CCodeMemberAccess.pointer (new CCodeIdentifier ("s2"), get_ccode_name (f)); // s2->f var variable_type = f.variable_type.copy (); make_comparable_cexpression (ref variable_type, ref s1, ref variable_type, ref s2); diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index fb8a156f1..2f9f50d6b 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -571,7 +571,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { if (get_ccode_array_length_name (field) != null) { length_cname = get_ccode_array_length_name (field); } else { - length_cname = get_array_length_cname (field.name, dim); + length_cname = get_array_length_cname (get_ccode_name (field), dim); } if (((TypeSymbol) field.parent_symbol).is_reference_type ()) { @@ -583,7 +583,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { result.append_array_length_cvalue (length_expr); } if (array_type.rank == 1 && field.is_internal_symbol ()) { - string size_cname = get_array_size_cname (field.name); + string size_cname = get_array_size_cname (get_ccode_name (field)); if (((TypeSymbol) field.parent_symbol).is_reference_type ()) { set_array_size_cvalue (result, new CCodeMemberAccess.pointer (inst, size_cname)); diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala index 1eb6a57b6..9457b3556 100644 --- a/codegen/valaccodestructmodule.vala +++ b/codegen/valaccodestructmodule.vala @@ -83,13 +83,13 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule { if (get_ccode_array_length_name (f) != null) { length_cname = get_ccode_array_length_name (f); } else { - length_cname = get_array_length_cname (f.name, dim); + length_cname = get_array_length_cname (get_ccode_name (f), dim); } instance_struct.add_field (get_ccode_name (len_type), length_cname); } if (array_type.rank == 1 && f.is_internal_symbol ()) { - instance_struct.add_field (get_ccode_name (len_type), get_array_size_cname (f.name)); + instance_struct.add_field (get_ccode_name (len_type), get_array_size_cname (get_ccode_name (f))); } } } else if (f.variable_type is DelegateType) { @@ -98,7 +98,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule { // create field to store delegate target instance_struct.add_field ("gpointer", get_ccode_delegate_target_name (f)); if (delegate_type.is_disposable ()) { - instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name)); + instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_ccode_name (f))); } } } diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index af7a8a481..654383fae 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -337,13 +337,13 @@ public class Vala.GTypeModule : GErrorModule { if (get_ccode_array_length_name (f) != null) { length_cname = get_ccode_array_length_name (f); } else { - length_cname = get_array_length_cname (f.name, dim); + length_cname = get_array_length_cname (get_ccode_name (f), dim); } instance_struct.add_field (get_ccode_name (len_type), length_cname); } if (array_type.rank == 1 && f.is_internal_symbol ()) { - instance_struct.add_field (get_ccode_name (len_type), get_array_size_cname (f.name)); + instance_struct.add_field (get_ccode_name (len_type), get_array_size_cname (get_ccode_name (f))); } } } else if (f.variable_type is DelegateType) { @@ -352,7 +352,7 @@ public class Vala.GTypeModule : GErrorModule { // create field to store delegate target instance_struct.add_field ("gpointer", get_ccode_delegate_target_name (f)); if (delegate_type.is_disposable ()) { - instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name)); + instance_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_ccode_name (f))); } } } @@ -445,13 +445,13 @@ public class Vala.GTypeModule : GErrorModule { if (get_ccode_array_length_name (f) != null) { length_cname = get_ccode_array_length_name (f); } else { - length_cname = get_array_length_cname (f.name, dim); + length_cname = get_array_length_cname (get_ccode_name (f), dim); } instance_priv_struct.add_field (get_ccode_name (len_type), length_cname); } if (array_type.rank == 1 && f.is_internal_symbol ()) { - instance_priv_struct.add_field (get_ccode_name (len_type), get_array_size_cname (f.name)); + instance_priv_struct.add_field (get_ccode_name (len_type), get_array_size_cname (get_ccode_name (f))); } } } else if (f.variable_type is DelegateType) { @@ -460,7 +460,7 @@ public class Vala.GTypeModule : GErrorModule { // create field to store delegate target instance_priv_struct.add_field ("gpointer", get_ccode_delegate_target_name (f)); if (delegate_type.is_disposable ()) { - instance_priv_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (f.name)); + instance_priv_struct.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_ccode_name (f))); } } } @@ -469,7 +469,7 @@ public class Vala.GTypeModule : GErrorModule { if (f.get_lock_used ()) { cl.has_private_fields = true; // add field for mutex - instance_priv_struct.add_field (get_ccode_name (mutex_type), get_symbol_lock_name (f.name)); + instance_priv_struct.add_field (get_ccode_name (mutex_type), get_symbol_lock_name (get_ccode_name (f))); } } else if (f.binding == MemberBinding.CLASS) { if (f.access == SymbolAccessibility.PRIVATE) { diff --git a/tests/Makefile.am b/tests/Makefile.am index ba8895135..9df9790e2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -129,6 +129,7 @@ TESTS = \ structs/bug686190.vala \ structs/bug690380.vala \ structs/bug749952.vala \ + structs/bug775761.vala \ delegates/delegates.vala \ delegates/bug539166.vala \ delegates/bug595610.vala \ diff --git a/tests/structs/bug775761.vala b/tests/structs/bug775761.vala new file mode 100644 index 000000000..3b47a7840 --- /dev/null +++ b/tests/structs/bug775761.vala @@ -0,0 +1,17 @@ +struct Foo { + [CCode (cname = "foo")] + public string f1; + [CCode (cname = "bar")] + public int f2; + [CCode (cname = "baz")] + public unowned string[] f3; +} + +const string[] FOO_ARRAY = { "manam", "minimi" }; + +void main () { + Foo a = { "42", 42, FOO_ARRAY}; + Foo b = { "42", 42, FOO_ARRAY}; + assert (a == b); + assert (a.f3.length == 2); +}