From: Rico Tzschichholz Date: Sat, 5 Oct 2019 20:47:48 +0000 (+0200) Subject: vala: Respect --abi-stability in Class/Interface.accept_children() X-Git-Tag: 0.47.1~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2661221908acffc5607b5c16ff6f217ecd4c1926;p=thirdparty%2Fvala.git vala: Respect --abi-stability in Class/Interface.accept_children() 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. --- diff --git a/vala/valaclass.vala b/vala/valaclass.vala index fcf239b33..289cc7459 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -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 () { diff --git a/vala/valainterface.vala b/vala/valainterface.vala index 2d0933eda..5cbb2ed78 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -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 () { diff --git a/vala/valaobjecttypesymbol.vala b/vala/valaobjecttypesymbol.vala index c15be3e34..918d18814 100644 --- a/vala/valaobjecttypesymbol.vala +++ b/vala/valaobjecttypesymbol.vala @@ -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); + } + } }