From: Luca Bruno Date: Tue, 24 Feb 2015 12:47:12 +0000 (+0100) Subject: codegen: Return a default value in delegate wrappers X-Git-Tag: 0.27.2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9850121b6c3fe8c3a0fce3bc121c05483c5a1739;p=thirdparty%2Fvala.git codegen: Return a default value in delegate wrappers Fixes bug 744639 --- diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala index 744f63a1d..9eb57ed34 100644 --- a/codegen/valaccodedelegatemodule.vala +++ b/codegen/valaccodedelegatemodule.vala @@ -408,8 +408,13 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule { ccall.add_argument (new CCodeConstant ("NULL")); ccall.add_argument (new CCodeConstant ("NULL")); } + if (m.return_type is VoidType || m.return_type.is_real_non_null_struct_type ()) { ccode.add_expression (ccall); + if (!(d.return_type is VoidType || d.return_type.is_real_non_null_struct_type ())) { + // return a default value + ccode.add_declaration (return_type_cname, new CCodeVariableDeclarator ("result", default_value_for_type (d.return_type, true))); + } } else { CCodeExpression result = ccall; if (d.return_type is GenericType) { @@ -435,7 +440,8 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule { } } - if (!(m.return_type is VoidType || m.return_type.is_real_non_null_struct_type ())) { + if (!(m.return_type is VoidType || m.return_type.is_real_non_null_struct_type ()) || + !(d.return_type is VoidType || d.return_type.is_real_non_null_struct_type ())) { ccode.add_return (new CCodeIdentifier ("result")); }