diff options
author | Luca Bruno <lucabru@src.gnome.org> | 2015-02-24 13:47:12 +0100 |
---|---|---|
committer | Luca Bruno <lucabru@src.gnome.org> | 2015-02-24 16:51:36 +0100 |
commit | 9850121b6c3fe8c3a0fce3bc121c05483c5a1739 (patch) | |
tree | f75c6bfe0d5a7b7a6c6857b41c0261d9c476bc71 | |
parent | b1df03a11d5098c0c355fa9e1b91fa7eef3bc907 (diff) | |
download | vala-9850121b6c3fe8c3a0fce3bc121c05483c5a1739.tar.gz |
codegen: Return a default value in delegate wrappers
Fixes bug 744639
-rw-r--r-- | codegen/valaccodedelegatemodule.vala | 8 |
1 files changed, 7 insertions, 1 deletions
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")); } |