diff options
author | Juerg Billeter <j@bitron.ch> | 2008-04-07 14:21:50 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2008-04-07 14:21:50 +0000 |
commit | 3c46988e0dbca6c072633de40bc3cd2cd918f2c1 (patch) | |
tree | 0f1c6e16d69dc5a1b7d1bd1795ec5c15e3f87203 | |
parent | 071491e89f74a82713766284ffafead30abdc5de (diff) | |
download | vala-3c46988e0dbca6c072633de40bc3cd2cd918f2c1.tar.gz |
fix spurious error when overriding abstract method in derived abstract
2008-04-07 Juerg Billeter <j@bitron.ch>
* vala/valasemanticanalyzer.vala: fix spurious error when
overriding abstract method in derived abstract class,
fixes bug 523263
* tests/classes-methods.vala: test overriding abstract method in
derived abstract class
svn path=/trunk/; revision=1172
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | tests/classes-methods.vala | 14 | ||||
-rw-r--r-- | vala/valasemanticanalyzer.vala | 12 |
3 files changed, 30 insertions, 5 deletions
@@ -1,5 +1,14 @@ 2008-04-07 Jürg Billeter <j@bitron.ch> + * vala/valasemanticanalyzer.vala: fix spurious error when + overriding abstract method in derived abstract class, + fixes bug 523263 + + * tests/classes-methods.vala: test overriding abstract method in + derived abstract class + +2008-04-07 Jürg Billeter <j@bitron.ch> + * vala/valasemanticanalyzer.vala: check accessiblity of property types, fixes bug 512404 diff --git a/tests/classes-methods.vala b/tests/classes-methods.vala index 163790864..3226c1c87 100644 --- a/tests/classes-methods.vala +++ b/tests/classes-methods.vala @@ -77,3 +77,17 @@ class Maman.FooBar : Object { class Maman.SubFooBar : FooBar, Foo { } +// http://bugzilla.gnome.org/show_bug.cgi?id=523263 + +abstract class Maman.AbstractBase : Object { + public abstract void foo (); +} + +abstract class Maman.AbstractDerived : AbstractBase { + public override void foo () { + } +} + +class Maman.DeepDerived : AbstractDerived { +} + diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 882a7af87..2f0b435d2 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -197,12 +197,14 @@ public class Vala.SemanticAnalyzer : CodeVisitor { if (!cl.is_abstract) { var base_class = cl.base_class; while (base_class != null && base_class.is_abstract) { - foreach (Method m in base_class.get_methods ()) { - if (m.is_abstract) { - var sym = cl.scope.lookup (m.name); - if (sym == null || !(sym is Method) || ((Method) sym).base_method != m) { + 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) { cl.error = true; - Report.error (cl.source_reference, "`%s' does not implement abstract method `%s'".printf (cl.get_full_name (), m.get_full_name ())); + Report.error (cl.source_reference, "`%s' does not implement abstract method `%s'".printf (cl.get_full_name (), base_method.get_full_name ())); } } } |