]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix protected member access in interfaces
authorAdam Folmert <afolmert@gmail.com>
Fri, 12 Feb 2010 10:10:33 +0000 (11:10 +0100)
committerJürg Billeter <j@bitron.ch>
Mon, 22 Mar 2010 08:35:03 +0000 (09:35 +0100)
Fixes bug 609726.

tests/objects/interfaces.vala
vala/valamemberaccess.vala

index d9fcdb9c50a0cd6ee7c616c079e040d4fc4932a7..e6895d68be0f7adb698bdbb093bc12060cf017cf 100644 (file)
@@ -4,6 +4,21 @@ interface Maman.Ibaz : Object {
        public abstract void do_action ();
 
        public abstract void do_virtual_action ();
+
+       protected void protected_mixin_1() {
+               stdout.puts("protected_mixin_1\n");
+               protected_mixin_2();
+       }
+
+       protected void protected_mixin_2() {
+               stdout.puts("protected_mixin_2\n");
+       }
+
+       public void public_mixin() {
+               protected_mixin_1();
+               protected_mixin_2();
+
+       }
 }
 
 class Maman.Baz : Object, Ibaz {
@@ -14,6 +29,10 @@ class Maman.Baz : Object, Ibaz {
        public virtual void do_virtual_action () {
                stdout.printf (" 4");
        }
+
+       public void do_mixin() {
+               public_mixin();
+       }
 }
 
 class Maman.SubBaz : Baz {
@@ -21,11 +40,13 @@ class Maman.SubBaz : Baz {
                stdout.printf (" 6");
        }
 
-       public static int main () {
+       public static int main_func () {
                stdout.printf ("Interface Test: 1");
 
                Ibaz ibaz = new Baz ();
                ibaz.do_action ();
+               ibaz.public_mixin();
+               (ibaz as Baz).do_mixin();
        
                stdout.printf (" 3");
 
@@ -38,11 +59,14 @@ class Maman.SubBaz : Baz {
 
                stdout.printf (" 7\n");
 
+               subbaz.public_mixin();
+               (subbaz as Baz).public_mixin();
+
                return 0;
        }
 }
 
 void main () {
-       Maman.SubBaz.main ();
+       Maman.SubBaz.main_func ();
 }
 
index 981981ef7374723b7b2470696174b43d548b7320..2914eba83a846f45017bac8626e6581c33af8625 100644 (file)
@@ -637,6 +637,13 @@ public class Vala.MemberAccess : Expression {
 
                        bool in_subtype = false;
                        for (Symbol this_symbol = analyzer.current_symbol; this_symbol != null; this_symbol = this_symbol.parent_symbol) {
+                               if (this_symbol == target_type) {
+                                       // required for interfaces with non-abstract methods
+                                       // accessing protected interface members
+                                       in_subtype = true;
+                                       break;
+                               }
+
                                var cl = this_symbol as Class;
                                if (cl != null && cl.is_subtype_of (target_type)) {
                                        in_subtype = true;