]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Use finalize instead of dispose to free instance data as dispose should
authorJürg Billeter <j@bitron.ch>
Thu, 14 Aug 2008 20:03:25 +0000 (20:03 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 14 Aug 2008 20:03:25 +0000 (20:03 +0000)
2008-08-14  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodeclassbinding.vala:
* gobject/valaccodegenerator.vala:
* gobject/valaccodegeneratorstruct.vala:

Use finalize instead of dispose to free instance data as dispose
should only be used where it is necessary to break reference
cycles, and this is possible by manually overriding the dispose
method

svn path=/trunk/; revision=1751

ChangeLog
gobject/valaccodeclassbinding.vala
gobject/valaccodegenerator.vala
gobject/valaccodegeneratorstruct.vala

index e5e30f9f5f401bdb3a984c07da950c0a8e78067f..3cc7a6262ca2dd4239044eb274c629c23bf083e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2008-08-14  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodeclassbinding.vala:
+       * gobject/valaccodegenerator.vala:
+       * gobject/valaccodegeneratorstruct.vala:
+
+       Use finalize instead of dispose to free instance data as dispose
+       should only be used where it is necessary to break reference
+       cycles, and this is possible by manually overriding the dispose
+       method
+
 2008-08-14  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodegenerator.vala:
index 07248fbf2387da30cf16c763a6c1aeb015465964..3c1fec535337efc614326d70aebd8daf31887479 100644 (file)
@@ -41,7 +41,7 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                var old_prop_enum = codegen.prop_enum;
                var old_class_init_fragment = codegen.class_init_fragment;
                var old_instance_init_fragment = codegen.instance_init_fragment;
-               var old_instance_dispose_fragment = codegen.instance_dispose_fragment;
+               var old_instance_finalize_fragment = codegen.instance_finalize_fragment;
                codegen.current_symbol = cl;
                codegen.current_type_symbol = cl;
                codegen.current_class = cl;
@@ -64,7 +64,7 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                        codegen.prop_enum.add_value (new CCodeEnumValue ("%s_DUMMY_PROPERTY".printf (cl.get_upper_case_cname (null))));
                        codegen.class_init_fragment = new CCodeFragment ();
                        codegen.instance_init_fragment = new CCodeFragment ();
-                       codegen.instance_dispose_fragment = new CCodeFragment ();
+                       codegen.instance_finalize_fragment = new CCodeFragment ();
                }
 
                CCodeFragment decl_frag;
@@ -175,7 +175,7 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
 
                        if (is_gobject) {
                                if (cl.get_fields ().size > 0 || cl.destructor != null) {
-                                       add_dispose_function (cl);
+                                       add_finalize_function (cl);
                                }
                        }
 
@@ -233,10 +233,6 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                                var destroy_block = new CCodeBlock ();
                                var get_class = new CCodeFunctionCall (new CCodeIdentifier ("%s_GET_CLASS".printf (cl.get_upper_case_cname (null))));
                                get_class.add_argument (new CCodeIdentifier ("self"));
-                               var finalize = new CCodeMemberAccess.pointer (get_class, "finalize");
-                               var finalize_call = new CCodeFunctionCall (finalize);
-                               finalize_call.add_argument (new CCodeIdentifier ("self"));
-                               //destroy_block.add_statement (new CCodeExpressionStatement (finalize_call));
                                var free = new CCodeFunctionCall (new CCodeIdentifier ("g_type_free_instance"));
                                free.add_argument (new CCodeCastExpression (new CCodeIdentifier ("self"), "GTypeInstance *"));
                                destroy_block.add_statement (new CCodeExpressionStatement (free));
@@ -269,7 +265,7 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
 
                        var cblock = new CCodeBlock ();
 
-                       cblock.add_statement (codegen.instance_dispose_fragment);
+                       cblock.add_statement (codegen.instance_finalize_fragment);
 
                        if (cl.destructor != null) {
                                cblock.add_statement (cl.destructor.ccodenode);
@@ -293,7 +289,7 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                codegen.prop_enum = old_prop_enum;
                codegen.class_init_fragment = old_class_init_fragment;
                codegen.instance_init_fragment = old_instance_init_fragment;
-               codegen.instance_dispose_fragment = old_instance_dispose_fragment;
+               codegen.instance_finalize_fragment = old_instance_finalize_fragment;
        }
        
        private void add_class_init_function (Class cl) {
@@ -344,11 +340,11 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                                init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, "constructor"), new CCodeIdentifier ("%s_constructor".printf (cl.get_lower_case_cname (null))))));
                        }
 
-                       /* set dispose function */
+                       /* set finalize function */
                        if (cl.get_fields ().size > 0 || cl.destructor != null) {
                                var ccast = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_CLASS"));
                                ccast.add_argument (new CCodeIdentifier ("klass"));
-                               init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, "dispose"), new CCodeIdentifier ("%s_dispose".printf (cl.get_lower_case_cname (null))))));
+                               init_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (ccast, "finalize"), new CCodeIdentifier ("%s_finalize".printf (cl.get_lower_case_cname (null))))));
                        }
                }
 
@@ -657,8 +653,8 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                codegen.source_type_member_definition.append (instance_init);
        }
        
-       private void add_dispose_function (Class cl) {
-               var function = new CCodeFunction ("%s_dispose".printf (cl.get_lower_case_cname (null)), "void");
+       private void add_finalize_function (Class cl) {
+               var function = new CCodeFunction ("%s_finalize".printf (cl.get_lower_case_cname (null)), "void");
                function.modifiers = CCodeModifiers.STATIC;
                
                function.add_parameter (new CCodeFormalParameter ("obj", "GObject *"));
@@ -679,12 +675,12 @@ public class Vala.CCodeClassBinding : CCodeObjectTypeSymbolBinding {
                        cblock.add_statement (cl.destructor.ccodenode);
                }
 
-               cblock.add_statement (codegen.instance_dispose_fragment);
+               cblock.add_statement (codegen.instance_finalize_fragment);
 
-               // chain up to dispose function of the base class
+               // chain up to finalize function of the base class
                var ccast = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_CLASS"));
                ccast.add_argument (new CCodeIdentifier ("%s_parent_class".printf (cl.get_lower_case_cname (null))));
-               ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (ccast, "dispose"));
+               ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (ccast, "finalize"));
                ccall.add_argument (new CCodeIdentifier ("obj"));
                cblock.add_statement (new CCodeExpressionStatement (ccall));
 
index 47f05c52db8e696568459fa7a1676f6094afad87..b1991b910a45d7c8957d992343ed3922ecb3a681 100644 (file)
@@ -54,7 +54,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
        public CCodeFragment source_type_member_definition;
        public CCodeFragment class_init_fragment;
        public CCodeFragment instance_init_fragment;
-       public CCodeFragment instance_dispose_fragment;
+       public CCodeFragment instance_finalize_fragment;
        public CCodeFragment source_signal_marshaller_definition;
        public CCodeFragment module_init_fragment;
        
@@ -497,8 +497,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
                        fc.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, l));
 
-                       if (instance_dispose_fragment != null) {
-                               instance_dispose_fragment.append (new CCodeExpressionStatement (fc));
+                       if (instance_finalize_fragment != null) {
+                               instance_finalize_fragment.append (new CCodeExpressionStatement (fc));
                        }
                }
        }
@@ -640,13 +640,13 @@ public class Vala.CCodeGenerator : CodeGenerator {
                                }
                        }
                        
-                       if (requires_destroy (f.field_type) && instance_dispose_fragment != null) {
+                       if (requires_destroy (f.field_type) && instance_finalize_fragment != null) {
                                var this_access = new MemberAccess.simple ("this");
                                this_access.value_type = get_data_type_for_symbol ((TypeSymbol) f.parent_symbol);
                                this_access.ccodenode = new CCodeIdentifier ("self");
                                var ma = new MemberAccess (this_access, f.name);
                                ma.symbol_reference = f;
-                               instance_dispose_fragment.append (new CCodeExpressionStatement (get_unref_expression (lhs, f.field_type, ma)));
+                               instance_finalize_fragment.append (new CCodeExpressionStatement (get_unref_expression (lhs, f.field_type, ma)));
                        }
                } else if (f.binding == MemberBinding.CLASS)  {
                        st.add_field (field_ctype, f.get_cname ());
index e79d4eb3340c3e926574c4109d021f884d2491e9..03de0b291b2b35c9409be9200d335a726d9822dc 100644 (file)
@@ -27,10 +27,10 @@ public class Vala.CCodeGenerator {
        public override void visit_struct (Struct st) {
                var old_type_symbol = current_type_symbol;
                var old_instance_struct = instance_struct;
-               var old_instance_dispose_fragment = instance_dispose_fragment;
+               var old_instance_finalize_fragment = instance_finalize_fragment;
                current_type_symbol = st;
                instance_struct = new CCodeStruct ("_%s".printf (st.get_cname ()));
-               instance_dispose_fragment = new CCodeFragment ();
+               instance_finalize_fragment = new CCodeFragment ();
 
                CCodeFragment decl_frag;
                CCodeFragment def_frag;
@@ -55,6 +55,6 @@ public class Vala.CCodeGenerator {
 
                current_type_symbol = old_type_symbol;
                instance_struct = old_instance_struct;
-               instance_dispose_fragment = old_instance_dispose_fragment;
+               instance_finalize_fragment = old_instance_finalize_fragment;
        }
 }