From: Juerg Billeter Date: Sat, 1 Dec 2007 16:45:54 +0000 (+0000) Subject: don't emit unreachable code, patch by Ondrej Jirman X-Git-Tag: VALA_0_1_6~123 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=064eb741c97ba311cd77de22600c9ea8f67cddf4;p=platform%2Fupstream%2Fvala.git don't emit unreachable code, patch by Ondrej Jirman 2007-12-01 Juerg Billeter * ccode/valaccodeblock.vala: don't emit unreachable code, patch by Ondrej Jirman svn path=/trunk/; revision=744 --- diff --git a/ChangeLog b/ChangeLog index 9d25b2f..cc9d6d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-12-01 Jürg Billeter + * ccode/valaccodeblock.vala: don't emit unreachable code, + patch by Ondřej Jirman + +2007-12-01 Jürg Billeter + * vala/parser.y, vala/valaclass.vala, vala/valacreationmethod.vala, vala/valainterfacewriter.vala, vala/valamemberaccess.vala, vala/valasemanticanalyzer.vala, vala/valastruct.vala: don't let named diff --git a/ccode/valaccodeblock.vala b/ccode/valaccodeblock.vala index d3df316..8ac4d74 100644 --- a/ccode/valaccodeblock.vala +++ b/ccode/valaccodeblock.vala @@ -55,9 +55,28 @@ public class Vala.CCodeBlock : CCodeStatement { foreach (CCodeNode statement in statements) { statement.write_declaration (writer); } + + // compute last reachable statement + CCodeNode last_statement = null; + foreach (CCodeNode statement in statements) { + if (statement is CCodeReturnStatement || statement is CCodeGotoStatement + || statement is CCodeContinueStatement || statement is CCodeBreakStatement) { + last_statement = statement; + } + if (statement is CCodeLabel) { + last_statement = null; + } + } + foreach (CCodeNode statement in statements) { statement.write (writer); + + // only output reachable code + if (statement == last_statement) { + break; + } } + writer.write_end_block (); if (!suppress_newline) {