From 9af3cfc0a1d0bfb41b8c68dd0e73b7219bf841a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sun, 15 Jun 2008 22:30:38 +0000 Subject: [PATCH] Fix memory management of error types, fixes bug 537951 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-06-16 Jürg Billeter * vala/valaerrortype.vala: * vala/valasemanticanalyzer.vala: * gobject/valaccodegenerator.vala: Fix memory management of error types, fixes bug 537951 svn path=/trunk/; revision=1592 --- ChangeLog | 8 ++++++++ gobject/valaccodegenerator.vala | 2 ++ vala/valaerrortype.vala | 11 ++++++++++- vala/valasemanticanalyzer.vala | 3 +++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 44e6451..0417be2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2008-06-16 Jürg Billeter + * vala/valaerrortype.vala: + * vala/valasemanticanalyzer.vala: + * gobject/valaccodegenerator.vala: + + Fix memory management of error types, fixes bug 537951 + +2008-06-16 Jürg Billeter + * vapi/packages/gstreamer-0.10/: Fix gst_message_parse_* bindings diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 773cc35..ceac8b9 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -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) { diff --git a/vala/valaerrortype.vala b/vala/valaerrortype.vala index 58d9187..ac974fb 100644 --- a/vala/valaerrortype.vala +++ b/vala/valaerrortype.vala @@ -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; + } } diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 684b7a7..6abd6d9 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -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); } -- 2.7.4