]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Report error when using invalid modifiers for methods and fields, based on
authorJuerg Billeter <j@bitron.ch>
Wed, 28 May 2008 19:47:10 +0000 (19:47 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 28 May 2008 19:47:10 +0000 (19:47 +0000)
2008-05-28  Juerg Billeter  <j@bitron.ch>

* 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

ChangeLog
vala/valanamespace.vala
vala/valaparser.vala

index 67f6bb614c3bf586267550b1766088be6f593bb6..f4a64022126c8f5ded3682b61b53fc1984cab789 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-05-28  Jürg Billeter  <j@bitron.ch>
+
+       * 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  <j@bitron.ch>
 
        * gobject/valaccodeclassbinding.vala:
index 6679f7b83fd021050468a241463aa2db7b4f42a3..2f9255a25a5d0d1a4838f36771de4177a1f8d222 100644 (file)
@@ -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;
                }
index 8d6b3847838a634def9057f9b22ab5fd58c9263a..3ecf807aeb78455f4b47862f49564d9b80fe31b3 100644 (file)
@@ -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 ();
                }