]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Reference struct fields with their actual cname
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 7 Dec 2016 17:54:30 +0000 (18:54 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 8 Dec 2016 09:59:29 +0000 (10:59 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=775761

codegen/valaccodebasemodule.vala
codegen/valaccodememberaccessmodule.vala
codegen/valaccodestructmodule.vala
codegen/valagtypemodule.vala
tests/Makefile.am
tests/structs/bug775761.vala [new file with mode: 0644]

index 3e4da4006faa0f68bf14be13226be2c725ca8cb3..4898a5f13fb12a498f8e58f832fc40eaab846bdd 100644 (file)
@@ -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);
index fb8a156f191b4115c6ef9102ab05004c492aebb1..2f9f50d6b4cde1fbe26694df6e7c7ebf22623162 100644 (file)
@@ -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));
index 1eb6a57b6d1c22228e40acbfdf34bad275694699..9457b35562814fac5ada1bd6e290eaac583e6250 100644 (file)
@@ -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)));
                                                }
                                        }
                                }
index af7a8a4811e57de9aaed182b74ab509e42fa63a5..654383faea54ec6d0a106156c5bc372e22d1a74f 100644 (file)
@@ -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) {
index ba8895135cf66724a7b8dec5e5bd31051526e830..9df9790e240fb243fd4f3fef317c913ff4b6d46e 100644 (file)
@@ -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 (file)
index 0000000..3b47a78
--- /dev/null
@@ -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);
+}