summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Bruno <lucabru@src.gnome.org>2015-02-24 13:47:12 +0100
committerLuca Bruno <lucabru@src.gnome.org>2015-02-24 16:51:36 +0100
commit9850121b6c3fe8c3a0fce3bc121c05483c5a1739 (patch)
treef75c6bfe0d5a7b7a6c6857b41c0261d9c476bc71
parentb1df03a11d5098c0c355fa9e1b91fa7eef3bc907 (diff)
downloadvala-9850121b6c3fe8c3a0fce3bc121c05483c5a1739.tar.gz
codegen: Return a default value in delegate wrappers
Fixes bug 744639
-rw-r--r--codegen/valaccodedelegatemodule.vala8
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"));
}