allow private static fields in interfaces, fixes bug 437435
authorJuerg Billeter <j@bitron.ch>
Tue, 24 Jul 2007 13:25:57 +0000 (13:25 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 24 Jul 2007 13:25:57 +0000 (13:25 +0000)
2007-07-24  Juerg Billeter  <j@bitron.ch>

* vala/parser.y, vala/valainterface.vala: allow private static fields in
  interfaces, fixes bug 437435

svn path=/trunk/; revision=379

ChangeLog
vala/parser.y
vala/valainterface.vala

index 01926b0..5191071 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-24  Jürg Billeter  <j@bitron.ch>
+
+       * vala/parser.y, vala/valainterface.vala: allow private static fields in
+         interfaces, fixes bug 437435
+
 2007-07-23  Jürg Billeter  <j@bitron.ch>
 
        * vala/valaarray.vala, vala/valaarraylengthfield.vala,
index 58a6c5f..8826842 100644 (file)
@@ -3060,6 +3060,14 @@ interface_member_declaration
                        g_object_unref ($1);
                }
          }
+       | field_declaration
+         {
+               /* skip declarations with errors */
+               if ($1 != NULL) {
+                       vala_interface_add_field (VALA_INTERFACE (symbol_stack->data), $1);
+                       g_object_unref ($1);
+               }
+         }
        | property_declaration
          {
                /* skip declarations with errors */
index f08f018..aecf335 100644 (file)
@@ -37,6 +37,7 @@ public class Vala.Interface : DataType {
        private List<TypeReference> prerequisites;
 
        private List<Method> methods;
+       private List<Field> fields;
        private List<Property> properties;
        private List<Signal> signals;
        
@@ -136,6 +137,28 @@ public class Vala.Interface : DataType {
        }
        
        /**
+        * Adds the specified field as a member to this interface. The field
+        * must be private and static.
+        *
+        * @param f a field
+        */
+       public void add_field (Field! f) {
+               // non_null fields not yet supported due to initialization issues
+               f.type_reference.non_null = false;
+               fields.append (f);
+               scope.add (f.name, f);
+       }
+
+       /**
+        * Returns a copy of the list of fields.
+        *
+        * @return list of fields
+        */
+       public List<weak Field> get_fields () {
+               return fields.copy ();
+       }
+
+       /**
         * Adds the specified property as a member to this interface.
         *
         * @param prop a property
@@ -235,6 +258,10 @@ public class Vala.Interface : DataType {
                        m.accept (visitor);
                }
                
+               foreach (Field f in fields) {
+                       f.accept (visitor);
+               }
+               
                foreach (Property prop in properties) {
                        prop.accept (visitor);
                }