]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Use switch instead of do-while for string switch statements
authorLuca Bruno <lethalman88@gmail.com>
Thu, 11 Mar 2010 12:04:26 +0000 (13:04 +0100)
committerJürg Billeter <j@bitron.ch>
Sat, 20 Mar 2010 10:11:12 +0000 (11:11 +0100)
Fixes bug 541229.

codegen/valaccodecontrolflowmodule.vala

index ea96d647aa4396fafb60aae2d0c8a768c162ade7..b8346e22d4d075d929cfa674f2fab1a1661b20e6 100644 (file)
@@ -152,8 +152,10 @@ internal class Vala.CCodeControlFlowModule : CCodeMethodModule {
                                }
                        }
 
-                       var cdo = new CCodeDoStatement (cblock, new CCodeConstant ("0"));
-                       var cif = new CCodeIfStatement (cor, cdo);
+                       var cswitch = new CCodeSwitchStatement (new CCodeConstant ("0"));
+                       cswitch.add_statement (new CCodeLabel ("default"));
+                       cswitch.add_statement (cblock);
+                       var cif = new CCodeIfStatement (cor, cswitch);
 
                        if (coldif != null) {
                                coldif.false_statement = cif;
@@ -169,15 +171,17 @@ internal class Vala.CCodeControlFlowModule : CCodeMethodModule {
                        foreach (CodeNode body_stmt in default_statements) {
                                cblock.add_statement (body_stmt.ccodenode);
                        }
-               
-                       var cdo = new CCodeDoStatement (cblock, new CCodeConstant ("0"));
+
+                       var cswitch = new CCodeSwitchStatement (new CCodeConstant ("0"));
+                       cswitch.add_statement (new CCodeLabel ("default"));
+                       cswitch.add_statement (cblock);
 
                        if (coldif == null) {
                                // there is only one section and that section
                                // contains a default label
-                               ctopstmt = cdo;
+                               ctopstmt = cswitch;
                        } else {
-                               coldif.false_statement = cdo;
+                               coldif.false_statement = cswitch;
                        }
                }