]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Ensure that members are checked when accessing them, fixes bug 561018
authorJürg Billeter <j@bitron.ch>
Mon, 17 Nov 2008 20:26:54 +0000 (20:26 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 17 Nov 2008 20:26:54 +0000 (20:26 +0000)
2008-11-17  Jürg Billeter  <j@bitron.ch>

* vala/valacatchclause.vala:
* vala/valacreationmethod.vala:
* vala/valafield.vala:
* vala/valaforeachstatement.vala:
* vala/valamemberaccess.vala:
* vala/valamethod.vala:

Ensure that members are checked when accessing them,
fixes bug 561018

svn path=/trunk/; revision=2025

ChangeLog
vala/valacatchclause.vala
vala/valacreationmethod.vala
vala/valafield.vala
vala/valaforeachstatement.vala
vala/valamemberaccess.vala
vala/valamethod.vala

index adbd4194f2aa35f25f09bfed2b3ae68ceb1b692d..fc54782a3ede6945326e9af668841b5edfe2e74b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-11-17  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valacatchclause.vala:
+       * vala/valacreationmethod.vala:
+       * vala/valafield.vala:
+       * vala/valaforeachstatement.vala:
+       * vala/valamemberaccess.vala:
+       * vala/valamethod.vala:
+
+       Ensure that members are checked when accessing them,
+       fixes bug 561018
+
 2008-11-17  Jürg Billeter  <j@bitron.ch>
 
        * vapi/glib-2.0.vapi:
index e1c7e4b925981ad49c76b0552ca474b33c21b2fd..cb6d2a6931c5e55344a88620b33003e30684f858 100644 (file)
@@ -109,6 +109,8 @@ public class Vala.CatchClause : CodeNode {
 
                        body.scope.add (variable_name, error_variable);
                        body.add_local_variable (error_variable);
+
+                       error_variable.checked = true;
                } else {
                        error_type = new ErrorType (null, null, source_reference);
                }
index 3f183cd0e2cf8953bcbac970d908b377f83d2f6a..d404b2a316c12899fcfe8b17fe6e866f8ddfec37 100644 (file)
@@ -131,10 +131,21 @@ public class Vala.CreationMethod : Method {
                        return false;
                }
 
+               var old_source_file = analyzer.current_source_file;
                var old_symbol = analyzer.current_symbol;
+               var old_class = analyzer.current_class;
+               var old_struct = analyzer.current_struct;
                var old_return_type = analyzer.current_return_type;
 
+               if (source_reference != null) {
+                       analyzer.current_source_file = source_reference.file;
+               }
                analyzer.current_symbol = this;
+               if (parent_symbol is Class) {
+                       analyzer.current_class = (Class) parent_symbol;
+               } else if (parent_symbol is Struct) {
+                       analyzer.current_struct = (Struct) parent_symbol;
+               }
                analyzer.current_return_type = return_type;
 
                foreach (FormalParameter param in get_parameters()) {
@@ -149,7 +160,10 @@ public class Vala.CreationMethod : Method {
                        body.check (analyzer);
                }
 
+               analyzer.current_source_file = old_source_file;
                analyzer.current_symbol = old_symbol;
+               analyzer.current_class = old_class;
+               analyzer.current_struct = old_struct;
                analyzer.current_return_type = old_return_type;
 
                if (analyzer.current_symbol.parent_symbol is Method) {
index 2b9fd1fc6c37e75c3cd241d36c40f85f265f659a..92fb184dc453b3202b5256e35b32eecf4c8817a4 100644 (file)
@@ -203,6 +203,12 @@ public class Vala.Field : Member, Lockable {
 
                checked = true;
 
+               var old_source_file = analyzer.current_source_file;
+
+               if (source_reference != null) {
+                       analyzer.current_source_file = source_reference.file;
+               }
+
                field_type.check (analyzer);
 
                process_attributes ();
@@ -239,6 +245,8 @@ public class Vala.Field : Member, Lockable {
                        analyzer.current_source_file.add_type_dependency (field_type, SourceFileDependencyType.SOURCE);
                }
 
+               analyzer.current_source_file = old_source_file;
+
                return !error;
        }
 }
index efd2480f2de6da0d41377026c75539e174360b77..5e39ab532a4f05927b371e630e80b00e155f5cc8 100644 (file)
@@ -223,6 +223,7 @@ public class Vala.ForeachStatement : Block {
 
                body.add_local_variable (element_variable);
                element_variable.active = true;
+               element_variable.checked = true;
 
                // analyze body
                owner = analyzer.current_symbol.scope;
index 01d6f13bf4601178a64c3b7f662dc770ad4573f1..573aaf5e1b7230bf4d268118c0b7c8f46284c48f 100644 (file)
@@ -395,6 +395,11 @@ public class Vala.MemberAccess : Expression {
                var access = SymbolAccessibility.PUBLIC;
                bool instance = false;
                bool klass = false;
+
+               if (!member.check (analyzer)) {
+                       return false;
+               }
+
                if (member is Field) {
                        var f = (Field) member;
                        access = f.access;
index 8dd2ccd24fc5cb0502a2fa69866343236cced4df..7f56cd80266a26e9ff9808264e5a67529eafe5e0 100644 (file)
@@ -649,9 +649,21 @@ public class Vala.Method : Member {
                        Report.error (source_reference, "Non-abstract, non-extern methods must have bodies");
                }
 
+               var old_source_file = analyzer.current_source_file;
                var old_symbol = analyzer.current_symbol;
+               var old_class = analyzer.current_class;
+               var old_struct = analyzer.current_struct;
                var old_return_type = analyzer.current_return_type;
+
+               if (source_reference != null) {
+                       analyzer.current_source_file = source_reference.file;
+               }
                analyzer.current_symbol = this;
+               if (parent_symbol is Class) {
+                       analyzer.current_class = (Class) parent_symbol;
+               } else if (parent_symbol is Struct) {
+                       analyzer.current_struct = (Struct) parent_symbol;
+               }
                analyzer.current_return_type = return_type;
 
                return_type.check (analyzer);
@@ -698,7 +710,10 @@ public class Vala.Method : Member {
                        body.check (analyzer);
                }
 
+               analyzer.current_source_file = old_source_file;
                analyzer.current_symbol = old_symbol;
+               analyzer.current_class = old_class;
+               analyzer.current_struct = old_struct;
                analyzer.current_return_type = old_return_type;
 
                if (analyzer.current_symbol.parent_symbol is Method) {