]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Fix virtual methods throwing errors
authorJürg Billeter <j@bitron.ch>
Thu, 17 Jun 2010 07:44:25 +0000 (09:44 +0200)
committerJürg Billeter <j@bitron.ch>
Thu, 17 Jun 2010 07:44:25 +0000 (09:44 +0200)
codegen/valadovaobjectmodule.vala

index 99e8c967fff41efefc817a209509a7386c3daccb..d949915b5da4a57306be0cc09f522e3ea16d8c61 100644 (file)
@@ -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));