summaryrefslogtreecommitdiff
path: root/vala/valaflowanalyzer.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2010-10-28 16:10:47 +0200
committerJürg Billeter <j@bitron.ch>2010-10-28 16:11:11 +0200
commit5f3ed0f460a06120900b082c49f9da8bcc1a0a84 (patch)
treef2c3035a80531b5f2e5ffc492565a433fe0a442b /vala/valaflowanalyzer.vala
parentcd21a120520c7f740be67fe67d7bb5d98921acde (diff)
downloadvala-5f3ed0f460a06120900b082c49f9da8bcc1a0a84.tar.gz
Add FlowAnalyzer.mark_unreachable
Diffstat (limited to 'vala/valaflowanalyzer.vala')
-rw-r--r--vala/valaflowanalyzer.vala44
1 files changed, 18 insertions, 26 deletions
diff --git a/vala/valaflowanalyzer.vala b/vala/valaflowanalyzer.vala
index 5394e86b9..148cc9c68 100644
--- a/vala/valaflowanalyzer.vala
+++ b/vala/valaflowanalyzer.vala
@@ -152,8 +152,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var old_current_block = current_block;
var old_unreachable_reported = unreachable_reported;
var old_jump_stack = jump_stack;
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
jump_stack = new ArrayList<JumpTarget> ();
le.accept_children (this);
@@ -578,8 +577,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var expr = (MethodCall) stmt.expression;
var ma = expr.call as MemberAccess;
if (ma != null && ma.symbol_reference != null && ma.symbol_reference.get_attribute ("NoReturn") != null) {
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
return;
}
}
@@ -608,8 +606,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// true block
var last_block = current_block;
if (always_false (stmt.condition)) {
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
} else {
current_block = new BasicBlock ();
last_block.connect (current_block);
@@ -619,8 +616,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// false block
var last_true_block = current_block;
if (always_true (stmt.condition)) {
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
} else {
current_block = new BasicBlock ();
last_block.connect (current_block);
@@ -690,8 +686,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
if (after_switch_block.get_predecessors ().size > 0) {
current_block = after_switch_block;
} else {
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
}
jump_stack.remove_at (jump_stack.size - 1);
@@ -722,8 +717,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// reachable?
if (after_loop_block.get_predecessors ().size == 0) {
// after loop block not reachable
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
} else {
// after loop block reachable
current_block = after_loop_block;
@@ -779,8 +773,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var jump_target = jump_stack[i];
if (jump_target.is_break_target) {
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
return;
} else if (jump_target.is_finally_clause) {
current_block.connect (jump_target.basic_block);
@@ -803,8 +796,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var jump_target = jump_stack[i];
if (jump_target.is_continue_target) {
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
return;
} else if (jump_target.is_finally_clause) {
current_block.connect (jump_target.basic_block);
@@ -833,8 +825,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var jump_target = jump_stack[i];
if (jump_target.is_return_target) {
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
return;
} else if (jump_target.is_finally_clause) {
current_block.connect (jump_target.basic_block);
@@ -861,8 +852,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var jump_target = jump_stack[i];
if (jump_target.is_exit_target) {
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
break;
} else if (jump_target.is_error_target) {
if (context.profile == Profile.GOBJECT) {
@@ -873,8 +863,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// error can always be caught by this catch clause
// following catch clauses cannot be reached by this error
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
break;
} else if (error_type.error_domain == null
|| (error_type.error_domain == jump_target.error_domain
@@ -889,8 +878,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// error can always be caught by this catch clause
// following catch clauses cannot be reached by this error
current_block.connect (jump_target.basic_block);
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
break;
} else if (jump_target.error_class.is_subtype_of (error_class)) {
// error might be caught by this catch clause
@@ -1046,8 +1034,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
current_block = after_try_block;
} else {
stmt.after_try_block_reachable = false;
- current_block = null;
- unreachable_reported = false;
+ mark_unreachable ();
}
}
@@ -1082,4 +1069,9 @@ public class Vala.FlowAnalyzer : CodeVisitor {
return false;
}
+
+ void mark_unreachable () {
+ current_block = null;
+ unreachable_reported = false;
+ }
}