[vala/wip/baedert/nullable: 3/25] basicblock: Add per-block name
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/baedert/nullable: 3/25] basicblock: Add per-block name
- Date: Tue, 8 Nov 2016 21:18:18 +0000 (UTC)
commit 1c524039c3fae2eac5860db427fe56afd0cc92ed
Author: Timm Bäder <mail baedert org>
Date: Sat Nov 5 18:29:25 2016 +0100
basicblock: Add per-block name
For debugging.
vala/valabasicblock.vala | 25 ++++++++++++++++++++++++-
vala/valaflowanalyzer.vala | 34 +++++++++++++++++-----------------
2 files changed, 41 insertions(+), 18 deletions(-)
---
diff --git a/vala/valabasicblock.vala b/vala/valabasicblock.vala
index ef32e05..0bb0195 100644
--- a/vala/valabasicblock.vala
+++ b/vala/valabasicblock.vala
@@ -43,7 +43,30 @@ public class Vala.BasicBlock {
public bool postorder_visited { get; set; }
public int postorder_number { get; set; }
- public BasicBlock () {
+
+
+ public string name;
+
+ private void print_level (int level) {
+ for (int i =0; i < level * 4; i ++)
+ stdout.printf(" ");
+ }
+
+ public void print (int level = 0) {
+ print_level (level);
+ stdout.printf ("BasicBlock (" + name + ", nulls: %d, non-nulls: %d)\n", null_vars.size,
+ non_null_vars.size);
+ foreach (var node in nodes) {
+ print_level (level);
+ stdout.printf ("- ");
+ stdout.printf (node.type_name + "\n");
+ }
+ foreach (var b in children)
+ b.print(level + 1);
+ }
+
+ public BasicBlock (string name) {
+ this.name = name;
}
public BasicBlock.entry () {
diff --git a/vala/valaflowanalyzer.vala b/vala/valaflowanalyzer.vala
index 9f94a42..c248948 100644
--- a/vala/valaflowanalyzer.vala
+++ b/vala/valaflowanalyzer.vala
@@ -188,7 +188,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
}
m.entry_block = new BasicBlock.entry ();
- m.return_block = new BasicBlock ();
+ m.return_block = new BasicBlock ("return");
m.exit_block = new BasicBlock.exit ();
m.return_block.connect (m.exit_block);
@@ -204,7 +204,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
}
}
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("Function");
m.entry_block.connect (current_block);
current_block.add_node (m);
@@ -611,7 +611,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
if (always_false (stmt.condition)) {
mark_unreachable ();
} else {
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("if");
last_block.connect (current_block);
}
stmt.true_statement.accept (this);
@@ -621,7 +621,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
if (always_true (stmt.condition)) {
mark_unreachable ();
} else {
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("else");
last_block.connect (current_block);
}
if (stmt.false_statement != null) {
@@ -632,7 +632,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var last_false_block = current_block;
// reachable?
if (last_true_block != null || last_false_block != null) {
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("after if/else");
if (last_true_block != null) {
last_true_block.connect (current_block);
}
@@ -647,7 +647,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
return;
}
- var after_switch_block = new BasicBlock ();
+ var after_switch_block = new BasicBlock ("after switch");
jump_stack.add (new JumpTarget.break_target (after_switch_block));
// condition
@@ -659,7 +659,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
bool has_default_label = false;
foreach (SwitchSection section in stmt.get_sections ()) {
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("switch section");
condition_block.connect (current_block);
foreach (Statement section_stmt in section.get_statements ()) {
section_stmt.accept (this);
@@ -700,9 +700,9 @@ public class Vala.FlowAnalyzer : CodeVisitor {
return;
}
- var loop_block = new BasicBlock ();
+ var loop_block = new BasicBlock ("loop");
jump_stack.add (new JumpTarget.continue_target (loop_block));
- var after_loop_block = new BasicBlock ();
+ var after_loop_block = new BasicBlock ("after loop");
jump_stack.add (new JumpTarget.break_target (after_loop_block));
// loop block
@@ -739,9 +739,9 @@ public class Vala.FlowAnalyzer : CodeVisitor {
current_block.add_node (stmt.collection);
handle_errors (stmt.collection);
- var loop_block = new BasicBlock ();
+ var loop_block = new BasicBlock ("loop");
jump_stack.add (new JumpTarget.continue_target (loop_block));
- var after_loop_block = new BasicBlock ();
+ var after_loop_block = new BasicBlock ("after loop");
jump_stack.add (new JumpTarget.break_target (after_loop_block));
// loop block
@@ -884,7 +884,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
// normal control flow
if (!always_fail) {
- current_block = new BasicBlock ();
+ current_block = new BasicBlock ("after errors");
last_block.connect (current_block);
}
}
@@ -913,15 +913,15 @@ public class Vala.FlowAnalyzer : CodeVisitor {
}
var before_try_block = current_block;
- var after_try_block = new BasicBlock ();
+ var after_try_block = new BasicBlock ("after try");
BasicBlock finally_block = null;
if (stmt.finally_body != null) {
- finally_block = new BasicBlock ();
+ finally_block = new BasicBlock ("finally");
current_block = finally_block;
// trap all forbidden jumps
- var invalid_block = new BasicBlock ();
+ var invalid_block = new BasicBlock ("invalid");
jump_stack.add (new JumpTarget.any_target (invalid_block));
stmt.finally_body.accept (this);
@@ -944,9 +944,9 @@ public class Vala.FlowAnalyzer : CodeVisitor {
var catch_clause = catch_clauses[i];
if (catch_clause.error_type != null) {
var error_type = (ErrorType) catch_clause.error_type;
- jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause,
catch_clause.error_type.data_type as ErrorDomain, error_type.error_code, null));
+ jump_stack.add (new JumpTarget.error_target (new BasicBlock ("catch"),
catch_clause, catch_clause.error_type.data_type as ErrorDomain, error_type.error_code, null));
} else {
- jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause,
null, null, null));
+ jump_stack.add (new JumpTarget.error_target (new BasicBlock ("catch"),
catch_clause, null, null, null));
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]