]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
assume that control flow ends when invoking a method with the [NoReturn]
authorJuerg Billeter <j@bitron.ch>
Tue, 5 Feb 2008 18:45:05 +0000 (18:45 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Tue, 5 Feb 2008 18:45:05 +0000 (18:45 +0000)
2008-02-05  Juerg Billeter  <j@bitron.ch>

* vala/valacfgbuilder.vala: assume that control flow ends when
  invoking a method with the [NoReturn] attribute

* vapi/glib-2.0.vapi: add [NoReturn] to assert_not_reached

svn path=/trunk/; revision=974

ChangeLog
vala/valacfgbuilder.vala
vapi/glib-2.0.vapi

index a1119bb6add08313b49746317cea4e476031b8e8..39eb7783051b47ba1b8b363576fa1e1d971fb627 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-02-05  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valacfgbuilder.vala: assume that control flow ends when
+         invoking a method with the [NoReturn] attribute
+
+       * vapi/glib-2.0.vapi: add [NoReturn] to assert_not_reached
+
 2008-02-05  Jürg Billeter  <j@bitron.ch>
 
        * vala/valasemanticanalyzer.vala: set tree_can_fail for assignments
index 165b1c99b4907c1d424e8795c801f13cb7c742d4..470b47afd47f44f8d43eb6763ff7d30cf472de82 100644 (file)
@@ -166,6 +166,16 @@ public class Vala.CFGBuilder : CodeVisitor {
                current_block.add_node (stmt);
 
                handle_errors (stmt);
+
+               if (stmt.expression is InvocationExpression) {
+                       var expr = (InvocationExpression) stmt.expression;
+                       var ma = expr.call as MemberAccess;
+                       if (ma.symbol_reference != null && ma.symbol_reference.get_attribute ("NoReturn") != null) {
+                               current_block = null;
+                               unreachable_reported = false;
+                               return;
+                       }
+               }
        }
 
        public override void visit_if_statement (IfStatement! stmt) {
index feb373294a584cdcb74a7093e8d2539dfc4bbb24..bf7ee3b3adefabb06827d0d4159022939563a561 100644 (file)
@@ -1395,6 +1395,7 @@ namespace GLib {
 
        public static void return_if_fail (bool expr);
        public static void assert (bool expr);
+       [NoReturn]
        public static void assert_not_reached ();
 
        /* Message Logging */