From 82f50074a0f235596263fb1c347b31f78948a3c4 Mon Sep 17 00:00:00 2001 From: Raffaele Sandrini Date: Sat, 23 Feb 2008 17:12:14 +0000 Subject: [PATCH] fix handling of error type parameters in the gobject backend, fix creation 2008-02-23 Raffaele Sandrini * gobject/valaccodegenerator.vala, vala/valaerrortype.vala: fix handling of error type parameters in the gobject backend, fix creation of GErrors outside of throws statements * tests/exceptions.vala: test error cast svn path=/trunk/; revision=1036 --- ChangeLog | 7 +++++++ gobject/valaccodegenerator.vala | 11 +++++++++-- tests/exceptions.vala | 5 +++++ vala/valaerrortype.vala | 5 +++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b5ba8b..dbd0e96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2008-02-23 Raffaele Sandrini + * gobject/valaccodegenerator.vala, vala/valaerrortype.vala: fix + handling of error type parameters in the gobject backend, fix + creation of GErrors outside of throws statements + * tests/exceptions.vala: test error cast + +2008-02-23 Raffaele Sandrini + * vala/valaclass.vala, vala/valaerrortype.vala, vala/valasymbolresolver.vala: allow any error type to be cast implicitly to GLib.Error diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 0302823..ea9f27d 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -122,6 +122,7 @@ public class Vala.CCodeGenerator : CodeGenerator { private bool requires_array_free; private bool requires_array_move; private bool requires_strcmp0; + private bool inside_throws_statement; private Set wrappers; @@ -2056,7 +2057,9 @@ public class Vala.CCodeGenerator : CodeGenerator { } public override void visit_throw_statement (ThrowStatement! stmt) { + inside_throws_statement = true; stmt.accept_children (this); + inside_throws_statement = false; var cfrag = new CCodeFragment (); @@ -2783,8 +2786,12 @@ public class Vala.CCodeGenerator : CodeGenerator { var ecode = (ErrorCode) expr.symbol_reference; var edomain = (ErrorDomain) ecode.parent_symbol; - creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_set_error")); - creation_call.add_argument (new CCodeIdentifier ("error")); + if (inside_throws_statement) { + creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_set_error")); + creation_call.add_argument (new CCodeIdentifier ("error")); + } else { + creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_error_new")); + } creation_call.add_argument (new CCodeIdentifier (edomain.get_upper_case_cname ())); creation_call.add_argument (new CCodeIdentifier (ecode.get_cname ())); diff --git a/tests/exceptions.vala b/tests/exceptions.vala index 6f6397a..d024bba 100644 --- a/tests/exceptions.vala +++ b/tests/exceptions.vala @@ -41,6 +41,8 @@ class Maman.Bar : Object { return result; } + public void error_cast_check (GLib.Error e) {} + public void run () { stdout.printf (" 2"); @@ -80,6 +82,9 @@ class Maman.Bar : Object { stdout.printf (" 13"); } + // test implicit cast to GLib.Error + error_cast_check (new BarError.FOO ("FOO")); + stdout.printf (" 14"); } diff --git a/vala/valaerrortype.vala b/vala/valaerrortype.vala index 3244e1b..c83e1a1 100644 --- a/vala/valaerrortype.vala +++ b/vala/valaerrortype.vala @@ -18,6 +18,7 @@ * * Author: * Jürg Billeter + * Raffaele Sandrini */ using GLib; @@ -64,4 +65,8 @@ public class Vala.ErrorType : ReferenceType { public override DataType copy () { return new ErrorType (error_domain); } + + public override string get_cname (bool var_type = false, bool const_type = false) { + return "GError*"; + } } -- 2.7.4