]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Report error when using virtual method modifiers for static methods, fixes
authorJürg Billeter <j@bitron.ch>
Sat, 25 Oct 2008 07:44:04 +0000 (07:44 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 25 Oct 2008 07:44:04 +0000 (07:44 +0000)
2008-10-25  Jürg Billeter  <j@bitron.ch>

* vala/valaparser.vala:

Report error when using virtual method modifiers for static
methods, fixes bug 556881

svn path=/trunk/; revision=1913

ChangeLog
vala/valaparser.vala

index d3c9c3a86426e4442e5f8d1ef896ab2c2331037f..67d6679631e89f3158fc63d7a7c9df226f791026 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-10-25  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valaparser.vala:
+
+       Report error when using virtual method modifiers for static
+       methods, fixes bug 556881
+
 2008-10-25  Jürg Billeter  <j@bitron.ch>
 
        * vala/valaparser.vala:
index c13bbf2487e1a5a49782472dd9e7f390d579af1f..28cf08949dd5ca37d23d9dcbea8758b087d1b1ae 100644 (file)
@@ -2119,20 +2119,30 @@ public class Vala.Parser : CodeVisitor {
                } else if (ModifierFlags.CLASS in flags) {
                        method.binding = MemberBinding.CLASS;
                }
-               if (ModifierFlags.ABSTRACT in flags) {
-                       method.is_abstract = true;
-               }
-               if (ModifierFlags.VIRTUAL in flags) {
-                       method.is_virtual = true;
-               }
-               if (ModifierFlags.OVERRIDE in flags) {
-                       method.overrides = true;
-               }
-               if ((method.is_abstract && method.is_virtual)
-                   || (method.is_abstract && method.overrides)
-                   || (method.is_virtual && method.overrides)) {
-                       throw new ParseError.SYNTAX (get_error ("only one of `abstract', `virtual', or `override' may be specified"));
+
+               if (method.binding == MemberBinding.INSTANCE) {
+                       if (ModifierFlags.ABSTRACT in flags) {
+                               method.is_abstract = true;
+                       }
+                       if (ModifierFlags.VIRTUAL in flags) {
+                               method.is_virtual = true;
+                       }
+                       if (ModifierFlags.OVERRIDE in flags) {
+                               method.overrides = true;
+                       }
+                       if ((method.is_abstract && method.is_virtual)
+                           || (method.is_abstract && method.overrides)
+                           || (method.is_virtual && method.overrides)) {
+                               throw new ParseError.SYNTAX (get_error ("only one of `abstract', `virtual', or `override' may be specified"));
+                       }
+               } else {
+                       if (ModifierFlags.ABSTRACT in flags
+                           || ModifierFlags.VIRTUAL in flags
+                           || ModifierFlags.OVERRIDE in flags) {
+                               throw new ParseError.SYNTAX (get_error ("the modifiers `abstract', `virtual', and `override' are not valid for static methods"));
+                       }
                }
+
                if (ModifierFlags.INLINE in flags) {
                        method.is_inline = true;
                }