From: Jürg Billeter Date: Sat, 25 Oct 2008 07:44:04 +0000 (+0000) Subject: Report error when using virtual method modifiers for static methods, fixes X-Git-Tag: VALA_0_5_1~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b6114e1376c2589d2f0618743ee139e447afa9c5;p=thirdparty%2Fvala.git Report error when using virtual method modifiers for static methods, fixes 2008-10-25 Jürg Billeter * vala/valaparser.vala: Report error when using virtual method modifiers for static methods, fixes bug 556881 svn path=/trunk/; revision=1913 --- diff --git a/ChangeLog b/ChangeLog index d3c9c3a86..67d667963 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-10-25 Jürg Billeter + + * vala/valaparser.vala: + + Report error when using virtual method modifiers for static + methods, fixes bug 556881 + 2008-10-25 Jürg Billeter * vala/valaparser.vala: diff --git a/vala/valaparser.vala b/vala/valaparser.vala index c13bbf248..28cf08949 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -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; }