]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
basicblock: Add per-block name
authorTimm Bäder <mail@baedert.org>
Sat, 5 Nov 2016 17:29:25 +0000 (18:29 +0100)
committerTimm Bäder <mail@baedert.org>
Sat, 5 Nov 2016 20:15:48 +0000 (21:15 +0100)
For debugging.

vala/valabasicblock.vala
vala/valaflowanalyzer.vala

index ef32e051e103659c48d5f624e3d88b2af9a33fa7..0bb01958dd925044b53d6148576e23ac55b8ba25 100644 (file)
@@ -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 () {
index 9f94a42ca6c16006b82d123796b2b0e8cbe3a78c..c2489483eb580f6e672ae100cb790391506d2372 100644 (file)
@@ -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));
                        }
                }