Fix memory management of error types, fixes bug 537951
authorJürg Billeter <j@bitron.ch>
Sun, 15 Jun 2008 22:30:38 +0000 (22:30 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 15 Jun 2008 22:30:38 +0000 (22:30 +0000)
2008-06-16  Jürg Billeter  <j@bitron.ch>

* vala/valaerrortype.vala:
* vala/valasemanticanalyzer.vala:
* gobject/valaccodegenerator.vala:

Fix memory management of error types, fixes bug 537951

svn path=/trunk/; revision=1592

ChangeLog
gobject/valaccodegenerator.vala
vala/valaerrortype.vala
vala/valasemanticanalyzer.vala

index 44e6451..0417be2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2008-06-16  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valaerrortype.vala:
+       * vala/valasemanticanalyzer.vala:
+       * gobject/valaccodegenerator.vala:
+
+       Fix memory management of error types, fixes bug 537951
+
+2008-06-16  Jürg Billeter  <j@bitron.ch>
+
        * vapi/packages/gstreamer-0.10/:
 
        Fix gst_message_parse_* bindings
index 773cc35..ceac8b9 100644 (file)
@@ -1372,6 +1372,8 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        } else {
                                return new CCodeIdentifier (type.data_type.get_free_function ());
                        }
+               } else if (type is ErrorType) {
+                       return new CCodeIdentifier ("g_error_free");
                } else if (type.data_type != null) {
                        string unref_function;
                        if (type is ReferenceType) {
index 58d9187..ac974fb 100644 (file)
@@ -69,7 +69,12 @@ public class Vala.ErrorType : ReferenceType {
        }
 
        public override DataType copy () {
-               return new ErrorType (error_domain, source_reference);
+               var result = new ErrorType (error_domain, source_reference);
+               result.source_reference = source_reference;
+               result.value_owned = value_owned;
+               result.nullable = nullable;
+
+               return result;
        }
 
        public override string? get_cname () {
@@ -107,4 +112,8 @@ public class Vala.ErrorType : ReferenceType {
        public override string? get_type_id () {
                return "G_TYPE_POINTER";
        }
+
+       public override bool is_reference_type_or_type_parameter () {
+               return true;
+       }
 }
index 684b7a7..6abd6d9 100644 (file)
@@ -1210,6 +1210,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
        }
 
        public override void visit_throw_statement (ThrowStatement stmt) {
+               stmt.error_expression.target_type = new ErrorType (null, stmt.source_reference);
+               stmt.error_expression.target_type.value_owned = true;
+
                stmt.accept_children (this);
        }