2006-07-08 Jürg Billeter <j@bitron.ch>
+ * vala/valasemanticanalyzer.vala: don't allow access to private members
+
+2006-07-08 Jürg Billeter <j@bitron.ch>
+
* vala/valasemanticanalyzer.vala: check method signatures of overriding
methods
* vala/parser.y, vala/valaclassregisterfunction.vala,
expr.static_type = expr.inner.static_type;
}
+ private DataType find_parent_type (Symbol sym) {
+ while (sym != null) {
+ if (sym.node is DataType) {
+ return (DataType) sym.node;
+ }
+ sym = sym.parent_symbol;
+ }
+ return null;
+ }
+
public override void visit_member_access (MemberAccess! expr) {
Symbol base_symbol = null;
return;
}
+ var member = expr.symbol_reference.node;
+ MemberAccessibility access = MemberAccessibility.PUBLIC;
+ if (member is Field) {
+ access = ((Field) member).access;
+ } else if (member is Method) {
+ access = ((Method) member).access;
+ }
+
+ if (access != MemberAccessibility.PUBLIC) {
+ var target_type = (DataType) member.symbol.parent_symbol.node;
+ var this_type = find_parent_type (current_symbol);
+
+ if (target_type != this_type) {
+ expr.error = true;
+ Report.error (expr.source_reference, "Access to private member `%s' denied".printf (member.symbol.get_full_name ()));
+ return;
+ }
+ }
+
current_source_file.add_symbol_dependency (expr.symbol_reference, SourceFileDependencyType.SOURCE);
expr.static_type = get_static_type_for_node (expr.symbol_reference.node);