From: Juerg Billeter Date: Fri, 29 Feb 2008 22:23:29 +0000 (+0000) Subject: support methods throwing exceptions and returning generic type parameter X-Git-Tag: VALA_0_1_7~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad31ae89b525e02b8fd9309712a84ebd2a09ec28;p=thirdparty%2Fvala.git support methods throwing exceptions and returning generic type parameter 2008-02-29 Juerg Billeter * gobject/valaccodegenerator.vala, gobject/valaccodegeneratormethod.vala: support methods throwing exceptions and returning generic type parameter svn path=/trunk/; revision=1070 --- diff --git a/ChangeLog b/ChangeLog index c0b8a2e37..3ec905d17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-02-29 Jürg Billeter + + * gobject/valaccodegenerator.vala, + gobject/valaccodegeneratormethod.vala: support methods throwing + exceptions and returning generic type parameter + 2008-02-29 Jürg Billeter * vala/parser.y, vala/valacodecontext.vala, vala/valaenumvalue.vala: diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 4457916c4..e9aa25a69 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -1354,10 +1354,10 @@ public class Vala.CCodeGenerator : CodeGenerator { var cerror_block = new CCodeBlock (); cerror_block.add_statement (new CCodeExpressionStatement (cpropagate)); - if (current_return_type != null && current_return_type.data_type != null) { - cerror_block.add_statement (new CCodeReturnStatement (default_value_for_type (current_return_type))); - } else { + if (current_return_type is VoidType) { cerror_block.add_statement (new CCodeReturnStatement ()); + } else { + cerror_block.add_statement (new CCodeReturnStatement (default_value_for_type (current_return_type))); } var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("inner_error"), new CCodeConstant ("NULL")); @@ -2111,22 +2111,6 @@ public class Vala.CCodeGenerator : CodeGenerator { add_simple_check (stmt, cfrag); - /* free temporary objects */ - foreach (VariableDeclarator decl in temp_ref_vars) { - var ma = new MemberAccess.simple (decl.name); - ma.symbol_reference = decl; - cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (decl.name), decl.type_reference, ma))); - } - - temp_vars.clear (); - temp_ref_vars.clear (); - - if (current_return_type != null && current_return_type.data_type != null) { - cfrag.append (new CCodeReturnStatement (default_value_for_type (current_return_type))); - } else { - cfrag.append (new CCodeReturnStatement ()); - } - stmt.ccodenode = cfrag; } diff --git a/gobject/valaccodegeneratormethod.vala b/gobject/valaccodegeneratormethod.vala index 3a60c8044..b31114a7b 100644 --- a/gobject/valaccodegeneratormethod.vala +++ b/gobject/valaccodegeneratormethod.vala @@ -731,6 +731,10 @@ public class Vala.CCodeGenerator { return new CCodeConstant ("NULL"); } else if (type.data_type != null && type.data_type.get_default_value () != null) { return new CCodeConstant (type.data_type.get_default_value ()); + } else if (type.type_parameter != null) { + return new CCodeConstant ("NULL"); + } else if (type is ErrorType) { + return new CCodeConstant ("NULL"); } return null; }