]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Drop checked exceptions
authorJürg Billeter <j@bitron.ch>
Fri, 16 Jul 2010 07:02:58 +0000 (09:02 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 18 Jul 2010 13:49:06 +0000 (15:49 +0200)
Replace error parameter by global variable.

codegen/valadovabasemodule.vala
codegen/valadovaerrormodule.vala
codegen/valadovamethodcallmodule.vala
codegen/valadovaobjectmodule.vala
vala/valacodewriter.vala
vala/valamethod.vala
vala/valamethodcall.vala
vala/valaobjectcreationexpression.vala
vala/valaparser.vala
vala/valapropertyaccessor.vala

index 8db548811b602fbce7eb3243e55520d9d535d998..99dd576d5d5c7288d85ecce4ec82aa8a04eb6ca0 100644 (file)
@@ -136,7 +136,6 @@ internal class Vala.DovaBaseModule : CCodeModule {
        public int next_temp_var_id = 0;
        public int next_wrapper_id = 0;
        public bool in_creation_method { get { return current_method is CreationMethod; } }
-       public bool current_method_inner_error = false;
        int next_block_id = 0;
        Map<Block,int> block_map = new HashMap<Block,int> ();
 
@@ -208,7 +207,6 @@ internal class Vala.DovaBaseModule : CCodeModule {
                reserved_identifiers.add ("while");
 
                // reserved for Vala naming conventions
-               reserved_identifiers.add ("error");
                reserved_identifiers.add ("result");
                reserved_identifiers.add ("this");
        }
@@ -659,9 +657,6 @@ internal class Vala.DovaBaseModule : CCodeModule {
        }
 
        public override void visit_destructor (Destructor d) {
-               bool old_method_inner_error = current_method_inner_error;
-               current_method_inner_error = false;
-
                d.accept_children (codegen);
 
                CCodeFragment cfrag = new CCodeFragment ();
@@ -669,8 +664,6 @@ internal class Vala.DovaBaseModule : CCodeModule {
                cfrag.append (d.body.ccodenode);
 
                d.ccodenode = cfrag;
-
-               current_method_inner_error = old_method_inner_error;
        }
 
        public int get_block_id (Block b) {
@@ -1856,12 +1849,6 @@ internal class Vala.DovaBaseModule : CCodeModule {
                                creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
                        }
 
-                       if (expr.tree_can_fail) {
-                               // method can fail
-                               current_method_inner_error = true;
-                               creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_inner_error_")));
-                       }
-
                        if (ellipsis) {
                                /* ensure variable argument list ends with NULL
                                 * except when using printf-style arguments */
index a422cfcd5407ac2163193992e0fa9ef0b92b01bc..13c6936078a99eb11c173bc5f7ba372abe9a273f 100644 (file)
@@ -38,8 +38,7 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                var cfrag = new CCodeFragment ();
 
                // method will fail
-               current_method_inner_error = true;
-               var cassign = new CCodeAssignment (get_variable_cexpression ("_inner_error_"), (CCodeExpression) stmt.error_expression.ccodenode);
+               var cassign = new CCodeAssignment (new CCodeIdentifier ("dova_error"), (CCodeExpression) stmt.error_expression.ccodenode);
                cfrag.append (new CCodeExpressionStatement (cassign));
 
                head.add_simple_check (stmt, cfrag, true);
@@ -50,17 +49,17 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
        }
 
        public virtual CCodeStatement return_with_exception () {
-               // propagate error
                var cerror_block = new CCodeBlock ();
-               cerror_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("error")), get_variable_cexpression ("_inner_error_"))));
-               cerror_block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression ("_inner_error_"), new CCodeConstant ("NULL"))));
+
+               // propagate error
+               // nothing to do
 
                // free local variables
                var free_frag = new CCodeFragment ();
                append_local_free (current_symbol, free_frag, false);
                cerror_block.add_statement (free_frag);
 
-               if (current_method is CreationMethod) {
+               if (current_method is CreationMethod && current_method.parent_symbol is Class) {
                        var cl = current_method.parent_symbol as Class;
                        var unref_call = new CCodeFunctionCall (new CCodeIdentifier (cl.get_unref_function ()));
                        unref_call.add_argument (new CCodeIdentifier ("this"));
@@ -75,7 +74,7 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                return cerror_block;
        }
 
-       CCodeStatement uncaught_error_statement (CCodeExpression inner_error, CCodeBlock? block = null, bool unexpected = false) {
+       CCodeStatement uncaught_error_statement (CCodeBlock? block = null, bool unexpected = false) {
                var cerror_block = block;
                if (cerror_block == null) {
                        cerror_block = new CCodeBlock ();
@@ -112,10 +111,6 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
        }
 
        public override void add_simple_check (CodeNode node, CCodeFragment cfrag, bool always_fails = false) {
-               current_method_inner_error = true;
-
-               var inner_error = get_variable_cexpression ("_inner_error_");
-
                CCodeStatement cerror_handler = null;
 
                if (current_try != null) {
@@ -161,8 +156,8 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                                                var cgoto_block = new CCodeBlock ();
                                                cgoto_block.add_statement (cgoto_stmt);
 
-                                               var type_check = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_is_a"));
-                                               type_check.add_argument (inner_error);
+                                               var type_check = new CCodeFunctionCall (new CCodeIdentifier ("any_is_a"));
+                                               type_check.add_argument (new CCodeIdentifier ("dova_error"));
                                                type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (catch_type.type_symbol.get_lower_case_cname ()))));
 
                                                cerror_block.add_statement (new CCodeIfStatement (type_check, cgoto_block));
@@ -183,7 +178,7 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                                // as jump out of finally block is not supported
                        } else {
                                // should never happen with correct bindings
-                               uncaught_error_statement (inner_error, cerror_block, true);
+                               uncaught_error_statement (cerror_block, true);
                        }
 
                        cerror_handler = cerror_block;
@@ -199,8 +194,8 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                                }
 
                                // Check the allowed error domains to propagate
-                               var type_check = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_is_a"));
-                               type_check.add_argument (inner_error);
+                               var type_check = new CCodeFunctionCall (new CCodeIdentifier ("any_is_a"));
+                               type_check.add_argument (new CCodeIdentifier ("dova_error"));
                                type_check.add_argument (new CCodeFunctionCall (new CCodeIdentifier ("%s_type_get".printf (error_class.get_lower_case_cname ()))));
                                if (ccond == null) {
                                        ccond = type_check;
@@ -215,11 +210,11 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                                var cerror_block = new CCodeBlock ();
                                cerror_block.add_statement (new CCodeIfStatement (ccond,
                                        return_with_exception (),
-                                       uncaught_error_statement (inner_error)));
+                                       uncaught_error_statement ()));
                                cerror_handler = cerror_block;
                        }
                } else {
-                       cerror_handler = uncaught_error_statement (inner_error);
+                       cerror_handler = uncaught_error_statement ();
                }
 
                if (always_fails) {
@@ -227,7 +222,7 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                        // eliminates C warnings
                        cfrag.append (cerror_handler);
                } else {
-                       var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, inner_error, new CCodeConstant ("NULL"));
+                       var ccond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("dova_error"), new CCodeConstant ("NULL"));
                        cfrag.append (new CCodeIfStatement (ccond, cerror_handler));
                }
        }
@@ -287,8 +282,6 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
                        clause.error_variable.active = true;
                }
 
-               current_method_inner_error = true;
-
                generate_type_declaration (clause.error_type, source_declarations);
 
                clause.accept_children (codegen);
@@ -307,15 +300,15 @@ internal class Vala.DovaErrorModule : DovaDelegateModule {
 
                if (clause.variable_name != null) {
                        var cdecl = new CCodeDeclaration (clause.error_type.get_cname ());
-                       cdecl.add_declarator (new CCodeVariableDeclarator (variable_name, get_variable_cexpression ("_inner_error_")));
+                       cdecl.add_declarator (new CCodeVariableDeclarator (variable_name, new CCodeIdentifier ("dova_error")));
                        cblock.add_statement (cdecl);
                } else {
                        // error object is not used within catch statement, clear it
                        var cclear = new CCodeFunctionCall (new CCodeIdentifier ("dova_object_unref"));
-                       cclear.add_argument (get_variable_cexpression ("_inner_error_"));
+                       cclear.add_argument (new CCodeIdentifier ("dova_error"));
                        cblock.add_statement (new CCodeExpressionStatement (cclear));
                }
-               cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression ("_inner_error_"), new CCodeConstant ("NULL"))));
+               cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("dova_error"), new CCodeConstant ("NULL"))));
 
                cblock.add_statement (clause.body.ccodenode);
 
index a17b84a7c9ba2f19d1fa1556001002cb455e8d97..149bc89a22e87f4889f4b33cc528a8396cb83fbf 100644 (file)
@@ -224,13 +224,6 @@ internal class Vala.DovaMethodCallModule : DovaAssignmentModule {
                        ccall_expr = ccomma;
                }
 
-               if (expr.tree_can_fail) {
-                       // method can fail
-                       current_method_inner_error = true;
-                       // add &inner_error before the ellipsis arguments
-                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_")));
-               }
-
                expr.ccodenode = ccall_expr;
        }
 }
index d023792e155fbe5e26576a745db835051d0d2441..817555e5c4d331a16bfc690ae745ad471024b96c 100644 (file)
@@ -1077,9 +1077,7 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
 
        public override void visit_property_accessor (PropertyAccessor acc) {
                var old_symbol = current_symbol;
-               bool old_method_inner_error = current_method_inner_error;
                current_symbol = acc;
-               current_method_inner_error = false;
 
                var prop = (Property) acc.prop;
 
@@ -1199,7 +1197,6 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
                }
 
                current_symbol = old_symbol;
-               current_method_inner_error = old_method_inner_error;
        }
 
        public override void generate_interface_declaration (Interface iface, CCodeDeclarationSpace decl_space) {
@@ -1281,9 +1278,6 @@ 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));
@@ -1314,14 +1308,12 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
 
        public override void visit_method (Method m) {
                var old_symbol = current_symbol;
-               bool old_method_inner_error = current_method_inner_error;
                int old_next_temp_var_id = next_temp_var_id;
                var old_temp_vars = temp_vars;
                var old_temp_ref_vars = temp_ref_vars;
                var old_variable_name_map = variable_name_map;
                var old_try = current_try;
                current_symbol = m;
-               current_method_inner_error = false;
                next_temp_var_id = 0;
                temp_vars = new ArrayList<LocalVariable> ();
                temp_ref_vars = new ArrayList<LocalVariable> ();
@@ -1330,10 +1322,7 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
 
                m.accept_children (codegen);
 
-               bool inner_error = current_method_inner_error;
-
                current_symbol = old_symbol;
-               current_method_inner_error = old_method_inner_error;
                next_temp_var_id = old_next_temp_var_id;
                temp_vars = old_temp_vars;
                temp_ref_vars = old_temp_ref_vars;
@@ -1432,12 +1421,6 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
                                        function.block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("result")));
                                }
 
-                               if (inner_error) {
-                                       var cdecl = new CCodeDeclaration ("DovaError *");
-                                       cdecl.add_declarator (new CCodeVariableDeclarator ("_inner_error_", new CCodeConstant ("NULL")));
-                                       cinit.append (cdecl);
-                               }
-
                                var st = m.parent_symbol as Struct;
                                if (m is CreationMethod && st != null && (st.is_boolean_type () || st.is_integer_type () || st.is_floating_type ())) {
                                        var cdecl = new CCodeDeclaration (st.get_cname ());
@@ -1471,10 +1454,6 @@ 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")));
 
@@ -1489,9 +1468,6 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
                        if (m.return_type is GenericType) {
                                vcall.add_argument (new CCodeIdentifier ("result"));
                        }
-                       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));
@@ -1520,10 +1496,6 @@ 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");
 
@@ -1540,9 +1512,6 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
                        if (m.return_type is GenericType) {
                                vcall.add_argument (new CCodeIdentifier ("result"));
                        }
-                       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));
@@ -1561,9 +1530,6 @@ 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));
@@ -1859,17 +1825,6 @@ internal class Vala.DovaObjectModule : DovaArrayModule {
 
                        generate_type_declaration (m.return_type, decl_space);
                }
-
-               if (m.get_error_types ().size > 0 || (m.base_method != null && m.base_method.get_error_types ().size > 0)) {
-                       var cparam = new CCodeFormalParameter ("error", "DovaError**");
-                       func.add_parameter (cparam);
-                       if (vdeclarator != null) {
-                               vdeclarator.add_parameter (cparam);
-                       }
-                       if (vcall != null) {
-                               vcall.add_argument (new CCodeIdentifier ("error"));
-                       }
-               }
        }
 
        public override void visit_element_access (ElementAccess expr) {
index 57209cd43359023b4f887919bc5c63e56a38661b..721ce3f6136868668864b42912c8234ebd83ec25 100644 (file)
@@ -1075,7 +1075,10 @@ public class Vala.CodeWriter : CodeVisitor {
                }
                
                write_params (m.get_parameters ());
-               write_error_domains (m.get_error_types ());
+
+               if (context.profile != Profile.DOVA) {
+                       write_error_domains (m.get_error_types ());
+               }
 
                write_code_block (m.body);
 
index 8b75efd75e6c2b0ec7c574bfcad068972294abcd..0319868acd816afe4f2502c09f011e2efc252952 100644 (file)
@@ -939,7 +939,7 @@ public class Vala.Method : Member {
                        entry_point = true;
                        analyzer.context.entry_point = this;
 
-                       if (tree_can_fail) {
+                       if (tree_can_fail && analyzer.context.profile != Profile.DOVA) {
                                Report.error (source_reference, "\"main\" method cannot throw errors");
                        }
                }
index f4fa66cd93495dae114ed6f435eb80e3676fd5b5..4da68f7e87d035ae3abd47c7b6a795c50816ed8c 100644 (file)
@@ -669,8 +669,10 @@ public class Vala.MethodCall : Expression {
                        if (parent_node is LocalVariable || parent_node is ExpressionStatement) {
                                // simple statements, no side effects after method call
                        } else if (!(analyzer.current_symbol is Block)) {
-                               // can't handle errors in field initializers
-                               Report.error (source_reference, "Field initializers must not throw errors");
+                               if (analyzer.context.profile != Profile.DOVA) {
+                                       // can't handle errors in field initializers
+                                       Report.error (source_reference, "Field initializers must not throw errors");
+                               }
                        } else {
                                // store parent_node as we need to replace the expression in the old parent node later on
                                var old_parent_node = parent_node;
index ab726e79fafb7e49c335fdd6de617b01e502160b..8e334fe478ff51dff7b6be173307753d286b24e2 100644 (file)
@@ -392,8 +392,10 @@ public class Vala.ObjectCreationExpression : Expression {
                        if (parent_node is LocalVariable || parent_node is ExpressionStatement) {
                                // simple statements, no side effects after method call
                        } else if (!(analyzer.current_symbol is Block)) {
-                               // can't handle errors in field initializers
-                               Report.error (source_reference, "Field initializers must not throw errors");
+                               if (analyzer.context.profile != Profile.DOVA) {
+                                       // can't handle errors in field initializers
+                                       Report.error (source_reference, "Field initializers must not throw errors");
+                               }
                        } else {
                                // store parent_node as we need to replace the expression in the old parent node later on
                                var old_parent_node = parent_node;
index 78aecc5244a1eb6226931fc5badddb23f825e43d..67366dfe5cfdc422548e8cb10fb54105d8eb4db2 100644 (file)
@@ -2650,10 +2650,21 @@ public class Vala.Parser : CodeVisitor {
                        } while (accept (TokenType.COMMA));
                }
                expect (TokenType.CLOSE_PARENS);
-               if (accept (TokenType.THROWS)) {
-                       do {
-                               method.add_error_type (parse_type (true, false));
-                       } while (accept (TokenType.COMMA));
+               if (context.profile == Profile.DOVA) {
+                       var error_type = new UnresolvedType.from_symbol (new UnresolvedSymbol (new UnresolvedSymbol (null, "Dova"), "Error"), method.source_reference);
+                       method.add_error_type (error_type);
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       parse_type (true, false);
+                               } while (accept (TokenType.COMMA));
+                               Report.warning (method.source_reference, "`throws' is ignored in the Dova profile");
+                       }
+               } else {
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       method.add_error_type (parse_type (true, false));
+                               } while (accept (TokenType.COMMA));
+                       }
                }
                while (accept (TokenType.REQUIRES)) {
                        expect (TokenType.OPEN_PARENS);
@@ -2716,11 +2727,14 @@ public class Vala.Parser : CodeVisitor {
                if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
                        prop.external = true;
                }
-               if (accept (TokenType.THROWS)) {
-                       do {
-                               prop.add_error_type (parse_type (true, false));
-                       } while (accept (TokenType.COMMA));
-                       Report.error (prop.source_reference, "properties throwing errors are not supported yet");
+               if (context.profile == Profile.DOVA) {
+               } else {
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       prop.add_error_type (parse_type (true, false));
+                               } while (accept (TokenType.COMMA));
+                               Report.error (prop.source_reference, "properties throwing errors are not supported yet");
+                       }
                }
                expect (TokenType.OPEN_BRACE);
                while (current () != TokenType.CLOSE_BRACE) {
@@ -3300,10 +3314,21 @@ public class Vala.Parser : CodeVisitor {
                        } while (accept (TokenType.COMMA));
                }
                expect (TokenType.CLOSE_PARENS);
-               if (accept (TokenType.THROWS)) {
-                       do {
-                               method.add_error_type (parse_type (true, false));
-                       } while (accept (TokenType.COMMA));
+               if (context.profile == Profile.DOVA) {
+                       var error_type = new UnresolvedType.from_symbol (new UnresolvedSymbol (new UnresolvedSymbol (null, "Dova"), "Error"), method.source_reference);
+                       method.add_error_type (error_type);
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       parse_type (true, false);
+                               } while (accept (TokenType.COMMA));
+                               Report.warning (method.source_reference, "`throws' is ignored in the Dova profile");
+                       }
+               } else {
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       method.add_error_type (parse_type (true, false));
+                               } while (accept (TokenType.COMMA));
+                       }
                }
                while (accept (TokenType.REQUIRES)) {
                        expect (TokenType.OPEN_PARENS);
@@ -3361,10 +3386,21 @@ public class Vala.Parser : CodeVisitor {
                        } while (accept (TokenType.COMMA));
                }
                expect (TokenType.CLOSE_PARENS);
-               if (accept (TokenType.THROWS)) {
-                       do {
-                               d.add_error_type (parse_type (true, false));
-                       } while (accept (TokenType.COMMA));
+               if (context.profile == Profile.DOVA) {
+                       var error_type = new UnresolvedType.from_symbol (new UnresolvedSymbol (new UnresolvedSymbol (null, "Dova"), "Error"), d.source_reference);
+                       d.add_error_type (error_type);
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       parse_type (true, false);
+                               } while (accept (TokenType.COMMA));
+                               Report.warning (d.source_reference, "`throws' is ignored in the Dova profile");
+                       }
+               } else {
+                       if (accept (TokenType.THROWS)) {
+                               do {
+                                       d.add_error_type (parse_type (true, false));
+                               } while (accept (TokenType.COMMA));
+                       }
                }
                expect (TokenType.SEMICOLON);
 
index a4227d987ad1bd7450f14d1940e6cf1abf5b8ccc..9e3944e39c5b554b9f073752ab9b90e5f97690ea 100644 (file)
@@ -1,6 +1,6 @@
 /* valapropertyaccessor.vala
  *
- * Copyright (C) 2006-2009  Jürg Billeter
+ * Copyright (C) 2006-2010  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -223,9 +223,11 @@ public class Vala.PropertyAccessor : Symbol {
 
                        body.check (analyzer);
 
-                       foreach (DataType body_error_type in body.get_error_types ()) {
-                               if (!((ErrorType) body_error_type).dynamic_error) {
-                                       Report.warning (body_error_type.source_reference, "unhandled error `%s'".printf (body_error_type.to_string()));
+                       if (analyzer.context.profile != Profile.DOVA) {
+                               foreach (DataType body_error_type in body.get_error_types ()) {
+                                       if (!((ErrorType) body_error_type).dynamic_error) {
+                                               Report.warning (body_error_type.source_reference, "unhandled error `%s'".printf (body_error_type.to_string()));
+                                       }
                                }
                        }
                }