]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
allow inner classes to access private members of outer classes
authorJuerg Billeter <j@bitron.ch>
Sun, 22 Jul 2007 17:27:15 +0000 (17:27 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 22 Jul 2007 17:27:15 +0000 (17:27 +0000)
2007-07-22  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala: allow inner classes to access private
  members of outer classes

svn path=/trunk/; revision=367

ChangeLog
vala/valasemanticanalyzer.vala

index 4185aad80a609b43ee493b56fdd700ad376c7317..f51370d0def448daa12f8948cf181ac60e306f30 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-22  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valasemanticanalyzer.vala: allow inner classes to access private
+         members of outer classes
+
 2007-07-21  Jürg Billeter  <j@bitron.ch>
 
        * vala/Makefile.am, vala/parser.y, vala/scanner.l, vala/vala.h,
index f11f3bba8c6487857b302c33867f122d1dffc21c..c9bb7dc9019cf31c098104353dc3f78e96c83100 100644 (file)
@@ -1183,9 +1183,16 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 
                if (access == MemberAccessibility.PRIVATE) {
                        var target_type = (DataType) member.parent_symbol;
-                       var this_type = find_parent_type (current_symbol);
 
-                       if (target_type != this_type) {
+                       bool in_target_type = false;
+                       for (Symbol this_symbol = current_symbol; this_symbol != null; this_symbol = this_symbol.parent_symbol) {
+                               if (target_type == this_symbol) {
+                                       in_target_type = true;
+                                       break;
+                               }
+                       }
+
+                       if (!in_target_type) {
                                expr.error = true;
                                Report.error (expr.source_reference, "Access to private member `%s' denied".printf (member.get_full_name ()));
                                return;