From 47b5fc36cd671e45fb5ed537e5eaba013571a75e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Thu, 17 Jun 2010 09:44:25 +0200 Subject: [PATCH] dova: Fix virtual methods throwing errors --- codegen/valadovaobjectmodule.vala | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/codegen/valadovaobjectmodule.vala b/codegen/valadovaobjectmodule.vala index 99e8c967f..d949915b5 100644 --- a/codegen/valadovaobjectmodule.vala +++ b/codegen/valadovaobjectmodule.vala @@ -1014,6 +1014,9 @@ internal class Vala.DovaObjectModule : DovaArrayModule { if (m.return_type is GenericType) { param_list += ", void *"; } + if (m.get_error_types ().size > 0) { + param_list += ", DovaError **"; + } param_list += ")"; var override_func = new CCodeFunction ("%soverride_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name)); @@ -1163,6 +1166,10 @@ internal class Vala.DovaObjectModule : DovaArrayModule { if (m.return_type is GenericType) { vfunc.add_parameter (new CCodeFormalParameter ("result", "void *")); } + if (m.get_error_types ().size > 0) { + var cparam = new CCodeFormalParameter ("error", "DovaError**"); + vfunc.add_parameter (cparam); + } var vcast = get_type_private_from_type ((ObjectTypeSymbol) m.parent_symbol, get_type_from_instance (new CCodeIdentifier ("this"))); @@ -1173,8 +1180,12 @@ internal class Vala.DovaObjectModule : DovaArrayModule { } if (m.return_type is GenericType) { vcall.add_argument (new CCodeIdentifier ("result")); - vfunc.block.add_statement (new CCodeExpressionStatement (vcall)); - } else if (m.return_type is VoidType) { + } + if (m.get_error_types ().size > 0) { + vcall.add_argument (new CCodeIdentifier ("error")); + } + + if (m.return_type is VoidType || m.return_type is GenericType) { vfunc.block.add_statement (new CCodeExpressionStatement (vcall)); } else { vfunc.block.add_statement (new CCodeReturnStatement (vcall)); @@ -1198,6 +1209,10 @@ internal class Vala.DovaObjectModule : DovaArrayModule { if (m.return_type is GenericType) { vfunc.add_parameter (new CCodeFormalParameter ("result", "void *")); } + if (m.get_error_types ().size > 0) { + var cparam = new CCodeFormalParameter ("error", "DovaError**"); + vfunc.add_parameter (cparam); + } var base_type = new CCodeIdentifier ("base_type"); @@ -1210,8 +1225,12 @@ internal class Vala.DovaObjectModule : DovaArrayModule { } if (m.return_type is GenericType) { vcall.add_argument (new CCodeIdentifier ("result")); - vfunc.block.add_statement (new CCodeExpressionStatement (vcall)); - } else if (m.return_type is VoidType) { + } + if (m.get_error_types ().size > 0) { + vcall.add_argument (new CCodeIdentifier ("error")); + } + + if (m.return_type is VoidType || m.return_type is GenericType) { vfunc.block.add_statement (new CCodeExpressionStatement (vcall)); } else { vfunc.block.add_statement (new CCodeReturnStatement (vcall)); @@ -1228,6 +1247,9 @@ internal class Vala.DovaObjectModule : DovaArrayModule { if (m.return_type is GenericType) { param_list += ", void *"; } + if (m.get_error_types ().size > 0) { + param_list += ", DovaError **"; + } param_list += ")"; var override_func = new CCodeFunction ("%soverride_%s".printf (m.parent_symbol.get_lower_case_cprefix (), m.name)); -- 2.47.3