From: Luca Bruno Date: Sat, 1 Feb 2014 09:42:27 +0000 (+0100) Subject: Cleanup generated empty blocks X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e41e46757bb20a9d537f199350d45de276d95e9b;p=thirdparty%2Fvala.git Cleanup generated empty blocks --- diff --git a/vala/valablock.vala b/vala/valablock.vala index 0a4c544d7..4db87ca9a 100644 --- a/vala/valablock.vala +++ b/vala/valablock.vala @@ -197,6 +197,23 @@ public class Vala.Block : Symbol, Statement { stmt.prev = new_stmt; } + public void remove_statement (Statement stmt) { + var prev = stmt.prev; + var next = stmt.next; + + if (prev != null) { + prev.next = next; + } else { + first_statement = next; + } + + if (next != null) { + next.prev = prev; + } else { + last_statement = prev; + } + } + public void replace_statement (Statement old_stmt, Statement new_stmt) { new_stmt.parent_node = this; new_stmt.prev = old_stmt.prev; diff --git a/vala/valacodebuilder.vala b/vala/valacodebuilder.vala index 4a86650ea..bbe8a5cc8 100644 --- a/vala/valacodebuilder.vala +++ b/vala/valacodebuilder.vala @@ -47,6 +47,12 @@ public class Vala.CodeBuilder { m.body.add_statement (current_block); } + public void cleanup () { + if (current_block.first_statement == null) { + insert_block.remove_statement (current_block); + } + } + public void check (CodeTransformer transformer) { foreach (var node in decl_nodes) { transformer.check (node); diff --git a/vala/valacodetransformer.vala b/vala/valacodetransformer.vala index fb2a960cc..1a8bf359f 100644 --- a/vala/valacodetransformer.vala +++ b/vala/valacodetransformer.vala @@ -42,6 +42,7 @@ public class Vala.CodeTransformer : CodeVisitor { } public void pop_builder () { + b.cleanup (); b = builder_stack.remove_at (builder_stack.size - 1); }