From: Juerg Billeter Date: Thu, 26 Jul 2007 16:04:53 +0000 (+0000) Subject: support class destructors X-Git-Tag: VALA_0_1_2~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dbac5ee5643215cc8db7f44d71e4deadf925b3c7;p=thirdparty%2Fvala.git support class destructors 2007-07-26 Juerg Billeter * gobject/valacodegeneratorclass.vala, vapi/glib-2.0.vala: support class destructors svn path=/trunk/; revision=392 --- diff --git a/ChangeLog b/ChangeLog index c22a4e759..65aabd286 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-26 Jürg Billeter + + * gobject/valacodegeneratorclass.vala, vapi/glib-2.0.vala: support + class destructors + 2007-07-26 Jürg Billeter * gobject/valacodegenerator.vala, diff --git a/gobject/valacodegeneratorclass.vala b/gobject/valacodegeneratorclass.vala index 9c167a83d..2db8b2160 100644 --- a/gobject/valacodegeneratorclass.vala +++ b/gobject/valacodegeneratorclass.vala @@ -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 ())); diff --git a/vapi/glib-2.0.vala b/vapi/glib-2.0.vala index ac34546ca..00fcdf42f 100644 --- a/vapi/glib-2.0.vala +++ b/vapi/glib-2.0.vala @@ -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 {