]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Respect --abi-stability in Class/Interface.accept_children()
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 5 Oct 2019 20:47:48 +0000 (22:47 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 16 Oct 2019 12:23:32 +0000 (14:23 +0200)
Add common implementation to ObjectTypeSymbol.accept_children() and match
generate_class_struct_declaration() and generate_interface_declaration()

Accepting fields earlier for interfaces in not a concern while there is
no support for instance/class fields yet.

vala/valaclass.vala
vala/valainterface.vala
vala/valaobjecttypesymbol.vala

index fcf239b33e45c6f08b93f1498b80ec5bf30acdb8..289cc74599690d8fbc881916a44b3956d2c76c34 100644 (file)
@@ -390,34 +390,8 @@ public class Vala.Class : ObjectTypeSymbol {
                        type.accept (visitor);
                }
 
-               foreach (TypeParameter p in get_type_parameters ()) {
-                       p.accept (visitor);
-               }
-
-               /* process enums first to avoid order problems in C code */
-               foreach (Enum en in get_enums ()) {
-                       en.accept (visitor);
-               }
-
-               foreach (Field f in get_fields ()) {
-                       f.accept (visitor);
-               }
-
-               foreach (Constant c in get_constants ()) {
-                       c.accept (visitor);
-               }
-
-               foreach (Method m in get_methods ()) {
-                       m.accept (visitor);
-               }
-
-               foreach (Property prop in get_properties ()) {
-                       prop.accept (visitor);
-               }
-
-               foreach (Signal sig in get_signals ()) {
-                       sig.accept (visitor);
-               }
+               // Invoke common implementation in ObjectTypeSymbol
+               base.accept_children (visitor);
 
                if (constructor != null) {
                        constructor.accept (visitor);
@@ -442,18 +416,6 @@ public class Vala.Class : ObjectTypeSymbol {
                if (class_destructor != null) {
                        class_destructor.accept (visitor);
                }
-
-               foreach (Class cl in get_classes ()) {
-                       cl.accept (visitor);
-               }
-
-               foreach (Struct st in get_structs ()) {
-                       st.accept (visitor);
-               }
-
-               foreach (Delegate d in get_delegates ()) {
-                       d.accept (visitor);
-               }
        }
 
        public override bool is_reference_type () {
index 2d0933eda76e8a2c3ed28fdb07f329ebe70416a6..5cbb2ed785cf3f81df73c836362594021d445254 100644 (file)
@@ -117,46 +117,8 @@ public class Vala.Interface : ObjectTypeSymbol {
                        type.accept (visitor);
                }
 
-               foreach (TypeParameter p in get_type_parameters ()) {
-                       p.accept (visitor);
-               }
-
-               /* process enums first to avoid order problems in C code */
-               foreach (Enum en in get_enums ()) {
-                       en.accept (visitor);
-               }
-
-               foreach (Method m in get_methods ()) {
-                       m.accept (visitor);
-               }
-
-               foreach (Field f in get_fields ()) {
-                       f.accept (visitor);
-               }
-
-               foreach (Constant c in get_constants ()) {
-                       c.accept (visitor);
-               }
-
-               foreach (Property prop in get_properties ()) {
-                       prop.accept (visitor);
-               }
-
-               foreach (Signal sig in get_signals ()) {
-                       sig.accept (visitor);
-               }
-
-               foreach (Class cl in get_classes ()) {
-                       cl.accept (visitor);
-               }
-
-               foreach (Struct st in get_structs ()) {
-                       st.accept (visitor);
-               }
-
-               foreach (Delegate d in get_delegates ()) {
-                       d.accept (visitor);
-               }
+               // Invoke common implementation in ObjectTypeSymbol
+               base.accept_children (visitor);
        }
 
        public override bool is_reference_type () {
index c15be3e34aed8b2ecf62d08e2b38901d6245833c..918d18814a2d02d34719e376b7aef138f29baa6c 100644 (file)
@@ -315,4 +315,50 @@ public abstract class Vala.ObjectTypeSymbol : TypeSymbol {
 
                scope.add (null, m);
        }
+
+       public override void accept_children (CodeVisitor visitor) {
+               foreach (TypeParameter p in get_type_parameters ()) {
+                       p.accept (visitor);
+               }
+
+               /* process enums first to avoid order problems in C code */
+               foreach (Enum en in get_enums ()) {
+                       en.accept (visitor);
+               }
+
+               foreach (Constant c in get_constants ()) {
+                       c.accept (visitor);
+               }
+
+               if (CodeContext.get ().abi_stability) {
+                       foreach (Symbol s in get_members ()) {
+                               s.accept (visitor);
+                       }
+               } else {
+                       foreach (Field f in get_fields ()) {
+                               f.accept (visitor);
+                       }
+                       foreach (Method m in get_methods ()) {
+                               m.accept (visitor);
+                       }
+                       foreach (Property prop in get_properties ()) {
+                               prop.accept (visitor);
+                       }
+                       foreach (Signal sig in get_signals ()) {
+                               sig.accept (visitor);
+                       }
+               }
+
+               foreach (Class cl in get_classes ()) {
+                       cl.accept (visitor);
+               }
+
+               foreach (Struct st in get_structs ()) {
+                       st.accept (visitor);
+               }
+
+               foreach (Delegate d in get_delegates ()) {
+                       d.accept (visitor);
+               }
+       }
 }