]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
support class destructors
authorJuerg Billeter <j@bitron.ch>
Thu, 26 Jul 2007 16:04:53 +0000 (16:04 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 26 Jul 2007 16:04:53 +0000 (16:04 +0000)
2007-07-26  Juerg Billeter  <j@bitron.ch>

* gobject/valacodegeneratorclass.vala, vapi/glib-2.0.vala: support
  class destructors

svn path=/trunk/; revision=392

ChangeLog
gobject/valacodegeneratorclass.vala
vapi/glib-2.0.vala

index c22a4e7598e5fa5d947b72bc80d43c2d13f136f0..65aabd2866d132a8e0ac3db46d73527e9218df93 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-07-26  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valacodegeneratorclass.vala, vapi/glib-2.0.vala: support
+         class destructors
+
 2007-07-26  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valacodegenerator.vala,
index 9c167a83de7d56eb0e28d115eee7344287939906..2db8b216004b888c6b120ec65ace02b46279fba8 100644 (file)
@@ -122,7 +122,7 @@ public class Vala.CodeGenerator {
                        }
                        
                        add_instance_init_function (cl);
-                       if (memory_management && cl.get_fields () != null) {
+                       if ((memory_management && cl.get_fields () != null) || cl.destructor != null) {
                                add_dispose_function (cl);
                        }
                        
@@ -145,7 +145,6 @@ public class Vala.CodeGenerator {
 
                current_type_symbol = old_type_symbol;
                current_class = old_class;
-               instance_dispose_fragment = old_instance_dispose_fragment;
                instance_struct = old_instance_struct;
                type_struct = old_type_struct;
                instance_priv_struct = old_instance_priv_struct;
@@ -375,7 +374,11 @@ public class Vala.CodeGenerator {
                cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("self", ccall));
                
                cblock.add_statement (cdecl);
-               
+
+               if (cl.destructor != null) {
+                       cblock.add_statement ((CCodeBlock) cl.destructor.body.ccodenode);
+               }
+
                cblock.add_statement (instance_dispose_fragment);
 
                cdecl = new CCodeDeclaration ("%sClass *".printf (cl.get_cname ()));
index ac34546caaad108566481d2d3299febb8d4392df..00fcdf42f4661a9cd634d7526484af9e897c6ec6 100644 (file)
@@ -614,6 +614,9 @@ namespace GLib {
                public void unref ();
                public Object ref_sink ();
                public void set (...);
+               public virtual void dispose ();
+               public virtual void finalize ();
+               public virtual void constructed ();
        }
        
        public class InitiallyUnowned : Object {