]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Respect cname ccode-attribute of lockable fields
authorRico Tzschichholz <ricotz@ubuntu.com>
Tue, 24 Apr 2018 21:46:39 +0000 (23:46 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 21 May 2018 16:15:55 +0000 (18:15 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=795521

codegen/valaccodebasemodule.vala
codegen/valagtypemodule.vala
tests/Makefile.am
tests/objects/bug795521.vala [new file with mode: 0644]

index 0a8bf1f322dd332fdafbefd08ec213aceffbb271..2ae1fac5128bec74f7349fdf1db73a36a0895f43 100644 (file)
@@ -870,7 +870,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                        var finalize_context = class_finalize_context;
 
                        if (m.is_instance_member ()) {
-                               l = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (l, "priv"), get_symbol_lock_name (m.name));
+                               l = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (l, "priv"), get_symbol_lock_name (get_ccode_name (m)));
                                init_context = instance_init_context;
                                finalize_context = instance_finalize_context;
                        } else if (m.is_class_member ()) {
@@ -878,9 +878,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                                var get_class_private_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS_PRIVATE".printf(get_ccode_upper_case_name (parent))));
                                get_class_private_call.add_argument (new CCodeIdentifier ("klass"));
-                               l = new CCodeMemberAccess.pointer (get_class_private_call, get_symbol_lock_name (m.name));
+                               l = new CCodeMemberAccess.pointer (get_class_private_call, get_symbol_lock_name (get_ccode_name (m)));
                        } else {
-                               l = new CCodeIdentifier (get_symbol_lock_name ("%s_%s".printf(get_ccode_lower_case_name (m.parent_symbol), m.name)));
+                               l = new CCodeIdentifier (get_symbol_lock_name ("%s_%s".printf (get_ccode_lower_case_name (m.parent_symbol), get_ccode_name (m))));
                        }
 
                        push_context (init_context);
@@ -1007,7 +1007,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                if (f.get_lock_used ()) {
                        // Declare mutex for static member
                        var flock = new CCodeDeclaration (get_ccode_name (mutex_type));
-                       var flock_decl =  new CCodeVariableDeclarator (get_symbol_lock_name (get_ccode_name (f)), new CCodeConstant ("{0}"));
+                       var flock_decl = new CCodeVariableDeclarator (get_symbol_lock_name ("%s_%s".printf (get_ccode_lower_case_name (f.parent_symbol), get_ccode_name (f))), new CCodeConstant ("{0}"));
                        flock.add_declarator (flock_decl);
 
                        if (f.is_private_symbol ()) {
@@ -3787,13 +3787,13 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                if (member.is_instance_member ()) {
                        if (inner_node  == null) {
                                l = new CCodeIdentifier ("self");
-                       } else if (resource.symbol_reference.parent_symbol != current_type_symbol) {
+                       } else if (parent != current_type_symbol) {
                                l = generate_instance_cast (get_cvalue (inner_node), parent);
                        } else {
                                l = get_cvalue (inner_node);
                        }
 
-                       l = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (l, "priv"), get_symbol_lock_name (resource.symbol_reference.name));
+                       l = new CCodeMemberAccess.pointer (new CCodeMemberAccess.pointer (l, "priv"), get_symbol_lock_name (get_ccode_name (member)));
                } else if (member.is_class_member ()) {
                        CCodeExpression klass;
 
@@ -3807,9 +3807,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                        var get_class_private_call = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS_PRIVATE".printf(get_ccode_upper_case_name (parent))));
                        get_class_private_call.add_argument (klass);
-                       l = new CCodeMemberAccess.pointer (get_class_private_call, get_symbol_lock_name (resource.symbol_reference.name));
+                       l = new CCodeMemberAccess.pointer (get_class_private_call, get_symbol_lock_name (get_ccode_name (member)));
                } else {
-                       string lock_name = "%s_%s".printf(get_ccode_lower_case_name (parent), resource.symbol_reference.name);
+                       string lock_name = "%s_%s".printf (get_ccode_lower_case_name (parent), get_ccode_name (member));
                        l = new CCodeIdentifier (get_symbol_lock_name (lock_name));
                }
                return l;
index 648197ceb932851611bde979095b3d8c3d5caa97..fe3d5d82e8efe4b1739ed38edba20e22d73b62a0 100644 (file)
@@ -493,13 +493,13 @@ public class Vala.GTypeModule : GErrorModule {
                                if (prop.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 (prop.name));
+                                       instance_priv_struct.add_field (get_ccode_name (mutex_type), get_symbol_lock_name (get_ccode_name (prop)));
                                }
                        } else if (prop.binding == MemberBinding.CLASS) {
                                if (prop.get_lock_used ()) {
                                        has_class_locks = true;
                                        // add field for mutex
-                                       type_priv_struct.add_field (get_ccode_name (mutex_type), get_symbol_lock_name (prop.name));
+                                       type_priv_struct.add_field (get_ccode_name (mutex_type), get_symbol_lock_name (get_ccode_name (prop)));
                                }
                        }
                }
index 6f20d5cd01847bf4fa4d165ec60923cbcdb39e3e..820dcc5fefacf15eb4a70cff3df5bf2a451ce04d 100644 (file)
@@ -275,6 +275,7 @@ TESTS = \
        objects/bug779955.vala \
        objects/bug783897.vala \
        objects/bug788964.vala \
+       objects/bug795521.vala \
        errors/catch-error-code.vala \
        errors/errors.vala \
        errors/bug567181.vala \
diff --git a/tests/objects/bug795521.vala b/tests/objects/bug795521.vala
new file mode 100644 (file)
index 0000000..e1acc60
--- /dev/null
@@ -0,0 +1,40 @@
+class Foo {
+       [CCode (cname = "faz")]
+       public int foo;
+       [CCode (cname = "baz")]
+       public class int boo;
+       [CCode (cname = "maz")]
+       public static int moo;
+
+       public int foor;
+       public class int boor;
+       public static int moor;
+
+       public int foop { get; set; }
+
+       public void use () {
+               lock (foo) {
+               }
+
+               lock (boo) {
+               }
+
+               lock (moo) {
+               }
+
+               lock (foor) {
+               }
+
+               lock (boor) {
+               }
+
+               lock (moor) {
+               }
+
+               lock (foop) {
+               }
+       }
+}
+
+void main () {
+}