don't compare base_method and base_interface_method in visit_class as this
authorJuerg Billeter <j@bitron.ch>
Mon, 7 Apr 2008 16:28:32 +0000 (16:28 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 7 Apr 2008 16:28:32 +0000 (16:28 +0000)
2008-04-07  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala: don't compare base_method and
  base_interface_method in visit_class as this might not be set yet
  in other classes; available methods will already be checked in
  detail in visit_method, fixes bug 523263

svn path=/trunk/; revision=1177

ChangeLog
vala/valasemanticanalyzer.vala

index b1bd68e..6eff74b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-04-07  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valasemanticanalyzer.vala: don't compare base_method and
+         base_interface_method in visit_class as this might not be set yet
+         in other classes; available methods will already be checked in
+         detail in visit_method, fixes bug 523263
+
+2008-04-07  Jürg Billeter  <j@bitron.ch>
+
        * vala/valasemanticanalyzer.vala: type check initializer lists
 
        * gobject/valaccodegenerator.vala: fix support for static delegates
index 20cc449..d8b57ab 100644 (file)
@@ -184,7 +184,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                        foreach (Method m in iface.get_methods ()) {
                                                if (m.is_abstract) {
                                                        var sym = cl.scope.lookup (m.name);
-                                                       if (sym == null || !(sym is Method) || ((Method) sym).base_interface_method != m) {
+                                                       if (!(sym is Method)) {
                                                                cl.error = true;
                                                                Report.error (cl.source_reference, "`%s' does not implement interface method `%s'".printf (cl.get_full_name (), m.get_full_name ()));
                                                        }
@@ -200,9 +200,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                        foreach (Method base_method in base_class.get_methods ()) {
                                                if (base_method.is_abstract) {
                                                        var override_method = symbol_lookup_inherited (cl, base_method.name) as Method;
-                                                       if (override_method == null
-                                                           || !override_method.overrides
-                                                           || override_method.base_method != base_method) {
+                                                       if (override_method == null || !override_method.overrides) {
                                                                cl.error = true;
                                                                Report.error (cl.source_reference, "`%s' does not implement abstract method `%s'".printf (cl.get_full_name (), base_method.get_full_name ()));
                                                        }