]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix critical warnings when using signals in interfaces
authorJürg Billeter <j@bitron.ch>
Sat, 31 Oct 2009 13:30:01 +0000 (14:30 +0100)
committerJürg Billeter <j@bitron.ch>
Sat, 31 Oct 2009 13:30:01 +0000 (14:30 +0100)
vala/valaclass.vala
vala/valainterface.vala
vala/valaobjecttypesymbol.vala
vala/valasignal.vala

index 7b3f3ef2814a4ce93c1e9990a001e6812ae13a13..aee77433dc5e7188c5056826f7d2b8d1cb1eb621 100644 (file)
@@ -310,16 +310,6 @@ public class Vala.Class : ObjectTypeSymbol {
                return new ReadOnlyList<Constant> (constants);
        }
 
-       ObjectType get_this_type () {
-               var result = new ObjectType (this);
-               foreach (var type_parameter in get_type_parameters ()) {
-                       var type_arg = new GenericType (type_parameter);
-                       type_arg.value_owned = true;
-                       result.add_type_argument (type_arg);
-               }
-               return result;
-       }
-
        /**
         * Adds the specified method as a member to this class.
         *
@@ -358,36 +348,6 @@ public class Vala.Class : ObjectTypeSymbol {
                methods.add (m);
                scope.add (m.name, m);
        }
-       
-       /**
-        * Adds the specified method as a hidden member to this class,
-        * primarily used for default signal handlers.
-        *
-        * The hidden methods are not part of the `methods` collection.
-        *
-        * There may also be other use cases, eg, convert array.resize() to
-        * this type of method?
-        *
-        * @param m a method
-        */
-       public void add_hidden_method (Method m) {
-               if (m.binding == MemberBinding.INSTANCE) {
-                       if (m.this_parameter != null) {
-                               m.scope.remove (m.this_parameter.name);
-                       }
-                       m.this_parameter = new FormalParameter ("this", get_this_type ());
-                       m.scope.add (m.this_parameter.name, m.this_parameter);
-               }
-               if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
-                       if (m.result_var != null) {
-                               m.scope.remove (m.result_var.name);
-                       }
-                       m.result_var = new LocalVariable (m.return_type.copy (), "result");
-                       m.result_var.is_result = true;
-               }
-
-               scope.add (null, m);
-       }
 
        /**
         * Returns a copy of the list of methods.
index 15387365eaa8572518c66b791ca6b1e2bc3d10a0..076ba2efce1aab443cfe538786826e9b56072ce4 100644 (file)
@@ -135,7 +135,7 @@ public class Vala.Interface : ObjectTypeSymbol {
                        return;
                }
                if (m.binding == MemberBinding.INSTANCE) {
-                       m.this_parameter = new FormalParameter ("this", new ObjectType (this));
+                       m.this_parameter = new FormalParameter ("this", get_this_type ());
                        m.scope.add (m.this_parameter.name, m.this_parameter);
                }
                if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
index 5539bf0cf3b2d9c5cc66364b9e702e6cdf8a0c62..8849ae7eefc3745286a8223c792d656706f82bd4 100644 (file)
@@ -68,4 +68,44 @@ public abstract class Vala.ObjectTypeSymbol : TypeSymbol {
                }
                return -1;
        }
+
+       public ObjectType get_this_type () {
+               var result = new ObjectType (this);
+               foreach (var type_parameter in get_type_parameters ()) {
+                       var type_arg = new GenericType (type_parameter);
+                       type_arg.value_owned = true;
+                       result.add_type_argument (type_arg);
+               }
+               return result;
+       }
+
+       /**
+        * Adds the specified method as a hidden member to this class,
+        * primarily used for default signal handlers.
+        *
+        * The hidden methods are not part of the `methods` collection.
+        *
+        * There may also be other use cases, eg, convert array.resize() to
+        * this type of method?
+        *
+        * @param m a method
+        */
+       public void add_hidden_method (Method m) {
+               if (m.binding == MemberBinding.INSTANCE) {
+                       if (m.this_parameter != null) {
+                               m.scope.remove (m.this_parameter.name);
+                       }
+                       m.this_parameter = new FormalParameter ("this", get_this_type ());
+                       m.scope.add (m.this_parameter.name, m.this_parameter);
+               }
+               if (!(m.return_type is VoidType) && m.get_postconditions ().size > 0) {
+                       if (m.result_var != null) {
+                               m.scope.remove (m.result_var.name);
+                       }
+                       m.result_var = new LocalVariable (m.return_type.copy (), "result");
+                       m.result_var.is_result = true;
+               }
+
+               scope.add (null, m);
+       }
 }
index 207d8f73742cf97ea7938477130461d7ec8506c3..94e3623d79a271fbeb1e4164d1d47a1de57b6034 100644 (file)
@@ -260,7 +260,7 @@ public class Vala.Signal : Member, Lockable {
                                default_handler.add_parameter (param);
                        }
 
-                       var cl = parent_symbol as Class;
+                       var cl = parent_symbol as ObjectTypeSymbol;
 
                        cl.add_hidden_method (default_handler);
                        default_handler.check (analyzer);