[vala/staging] codegen: Add abi-stability path for interfaces



commit 07528ea112e1683c0edef8796a66cd49cc9a88bb
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Thu Jan 18 13:06:39 2018 +0100

    codegen: Add abi-stability path for interfaces
    
    Based on patch by Daniel Espinosa
    
    https://bugzilla.gnome.org/show_bug.cgi?id=789069

 vala/valainterface.vala |   56 +++++++++++++++++++++++++++++++++-------------
 1 files changed, 40 insertions(+), 16 deletions(-)
---
diff --git a/vala/valainterface.vala b/vala/valainterface.vala
index 8e3229c..72d3454 100644
--- a/vala/valainterface.vala
+++ b/vala/valainterface.vala
@@ -261,13 +261,6 @@ public class Vala.Interface : ObjectTypeSymbol {
                        en.check (context);
                }
 
-               foreach (Method m in get_methods ()) {
-                       m.check (context);
-                       if (m.is_virtual || m.is_abstract) {
-                               virtuals.add (m);
-                       }
-               }
-
                foreach (Field f in get_fields ()) {
                        f.check (context);
                }
@@ -276,17 +269,48 @@ public class Vala.Interface : ObjectTypeSymbol {
                        c.check (context);
                }
 
-               foreach (Signal sig in get_signals ()) {
-                       sig.check (context);
-                       if (sig.is_virtual) {
-                               virtuals.add (sig);
+               if (context.abi_stability) {
+                       foreach (Symbol s in get_members ()) {
+                               if (s is Method) {
+                                       var m = (Method) s;
+                                       m.check (context);
+                                       if (m.is_virtual || m.is_abstract) {
+                                               virtuals.add (m);
+                                       }
+                               } else if (s is Signal) {
+                                       var sig = (Signal) s;
+                                       sig.check (context);
+                                       if (sig.is_virtual) {
+                                               virtuals.add (sig);
+                                       }
+                               } else if (s is Property) {
+                                       var prop = (Property) s;
+                                       prop.check (context);
+                                       if (prop.is_virtual || prop.is_abstract) {
+                                               virtuals.add (prop);
+                                       }
+                               }
+                       }
+               } else {
+                       foreach (Method m in get_methods ()) {
+                               m.check (context);
+                               if (m.is_virtual || m.is_abstract) {
+                                       virtuals.add (m);
+                               }
                        }
-               }
 
-               foreach (Property prop in get_properties ()) {
-                       prop.check (context);
-                       if (prop.is_virtual || prop.is_abstract) {
-                               virtuals.add (prop);
+                       foreach (Signal sig in get_signals ()) {
+                               sig.check (context);
+                               if (sig.is_virtual) {
+                                       virtuals.add (sig);
+                               }
+                       }
+
+                       foreach (Property prop in get_properties ()) {
+                               prop.check (context);
+                               if (prop.is_virtual || prop.is_abstract) {
+                                       virtuals.add (prop);
+                               }
                        }
                }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]