From: Timm Bäder Date: Sat, 5 Nov 2016 17:29:25 +0000 (+0100) Subject: basicblock: Add per-block name X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c524039c3fae2eac5860db427fe56afd0cc92ed;p=thirdparty%2Fvala.git basicblock: Add per-block name For debugging. --- diff --git a/vala/valabasicblock.vala b/vala/valabasicblock.vala index ef32e051e..0bb01958d 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 9f94a42ca..c2489483e 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)); } }