From: Juerg Billeter Date: Wed, 28 May 2008 19:47:10 +0000 (+0000) Subject: Report error when using invalid modifiers for methods and fields, based on X-Git-Tag: VALA_0_3_3~89 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=145aa2baaf01f2c58af9c3cd606c5fec3fb03a56;p=thirdparty%2Fvala.git Report error when using invalid modifiers for methods and fields, based on 2008-05-28 Juerg Billeter * vala/valanamespace.vala: * vala/valaparser.vala: Report error when using invalid modifiers for methods and fields, based on patch by Jared Moore, fixes bug 534018 svn path=/trunk/; revision=1469 --- diff --git a/ChangeLog b/ChangeLog index 67f6bb614..f4a640221 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-05-28 Jürg Billeter + + * vala/valanamespace.vala: + * vala/valaparser.vala: + + Report error when using invalid modifiers for methods and fields, + based on patch by Jared Moore, fixes bug 534018 + 2008-05-28 Jürg Billeter * gobject/valaccodeclassbinding.vala: diff --git a/vala/valanamespace.vala b/vala/valanamespace.vala index 6679f7b83..2f9255a25 100644 --- a/vala/valanamespace.vala +++ b/vala/valanamespace.vala @@ -293,6 +293,16 @@ public class Vala.Namespace : Symbol { * @param f a field */ public void add_field (Field f) { + if (f.binding == MemberBinding.INSTANCE) { + Report.error (f.source_reference, "instance members are not allowed outside of data types"); + f.error = true; + return; + } else if (f.binding == MemberBinding.CLASS) { + Report.error (f.source_reference, "class members are not allowed outside of classes"); + f.error = true; + return; + } + fields.add (f); scope.add (f.name, f); } @@ -305,13 +315,15 @@ public class Vala.Namespace : Symbol { public void add_method (Method m) { if (m is CreationMethod) { Report.error (m.source_reference, "construction methods may only be declared within classes and structs"); - m.error = true; return; } if (m.binding == MemberBinding.INSTANCE) { - Report.error (m.source_reference, "instance methods not allowed outside of data types"); - + Report.error (m.source_reference, "instance members are not allowed outside of data types"); + m.error = true; + return; + } else if (m.binding == MemberBinding.CLASS) { + Report.error (m.source_reference, "class members are not allowed outside of classes"); m.error = true; return; } diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 8d6b38478..3ecf807ae 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -1867,11 +1867,17 @@ public class Vala.Parser : CodeVisitor { ns.add_delegate ((Delegate) sym); } else if (sym is Method) { var method = (Method) sym; - method.binding = MemberBinding.STATIC; + if (method.binding == MemberBinding.INSTANCE) { + // default to static member binding + method.binding = MemberBinding.STATIC; + } ns.add_method (method); } else if (sym is Field) { var field = (Field) sym; - field.binding = MemberBinding.STATIC; + if (field.binding == MemberBinding.INSTANCE) { + // default to static member binding + field.binding = MemberBinding.STATIC; + } ns.add_field (field); } else if (sym is Constant) { ns.add_constant ((Constant) sym); @@ -2028,6 +2034,11 @@ public class Vala.Parser : CodeVisitor { } else if (ModifierFlags.CLASS in flags) { f.binding = MemberBinding.CLASS; } + if (ModifierFlags.ABSTRACT in flags + || ModifierFlags.VIRTUAL in flags + || ModifierFlags.OVERRIDE in flags) { + Report.error (f.source_reference, "abstract, virtual, and override modifiers are not applicable to fields"); + } if (accept (TokenType.ASSIGN)) { f.initializer = parse_expression (); }