Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 2f22cc45dfe19e7fffcc9e6ab65a3894af3f6dce)
+++ src/Parser/parser.cc	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
@@ -1035,8 +1035,8 @@
      657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
      692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
-     727,   730,   733,   743,   746,   758,   759,   761,   765,   767,
-     771,   772,   777,   778,   782,   787,   788,   792,   794,   800,
-     801,   805,   807,   809,   811,   817,   818,   822,   824,   829,
-     831,   833,   838,   840,   845,   847,   851,   854,   858,   861,
+     726,   728,   730,   740,   742,   753,   754,   756,   760,   762,
+     766,   767,   772,   773,   777,   782,   783,   787,   789,   795,
+     796,   800,   802,   804,   806,   812,   813,   817,   819,   824,
+     826,   828,   833,   835,   840,   843,   847,   851,   856,   860,
      865,   867,   871,   873,   880,   882,   884,   893,   895,   897,
      899,   901,   906,   908,   910,   912,   917,   930,   931,   936,
@@ -5714,5 +5714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
+#line 725 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
@@ -5721,12 +5721,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 727 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
+    break;
+
+  case 151:
+
+/* Line 1806 of yacc.c  */
 #line 729 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
-    break;
-
-  case 151:
-
-/* Line 1806 of yacc.c  */
-#line 732 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5735,5 +5735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 734 "parser.yy"
+#line 731 "parser.yy"
     {
 			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5750,5 +5750,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 745 "parser.yy"
+#line 741 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5757,7 +5757,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 747 "parser.yy"
+#line 743 "parser.yy"
     {
-			//StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
 			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
@@ -5768,5 +5767,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 758 "parser.yy"
+#line 753 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5775,12 +5774,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 755 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 158:
+
+/* Line 1806 of yacc.c  */
 #line 760 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 765 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
@@ -5789,19 +5788,19 @@
 
 /* Line 1806 of yacc.c  */
+#line 762 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
+    break;
+
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 766 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
 #line 767 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
-    break;
-
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
-    break;
-
-  case 161:
-
-/* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5810,5 +5809,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5817,89 +5816,89 @@
 
 /* Line 1806 of yacc.c  */
+#line 777 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
+    break;
+
+  case 165:
+
+/* Line 1806 of yacc.c  */
 #line 782 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 167:
+
+/* Line 1806 of yacc.c  */
+#line 788 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
 
-  case 165:
-
-/* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
+  case 168:
+
+/* Line 1806 of yacc.c  */
+#line 790 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 169:
+
+/* Line 1806 of yacc.c  */
+#line 795 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
-    break;
-
-  case 168:
-
-/* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+  case 171:
+
+/* Line 1806 of yacc.c  */
+#line 801 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
+    break;
+
+  case 172:
+
+/* Line 1806 of yacc.c  */
+#line 803 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 805 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 807 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 175:
+
+/* Line 1806 of yacc.c  */
+#line 812 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+    break;
+
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 818 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 810 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 174:
-
-/* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
-    break;
-
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
-    break;
-
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+  case 178:
+
+/* Line 1806 of yacc.c  */
+#line 820 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 178:
+  case 179:
 
 /* Line 1806 of yacc.c  */
 #line 825 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5908,5 +5907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 832 "parser.yy"
+#line 827 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     break;
@@ -5915,12 +5914,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 829 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+    break;
+
+  case 182:
+
+/* Line 1806 of yacc.c  */
 #line 834 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 839 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5929,5 +5928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 841 "parser.yy"
+#line 836 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5936,20 +5935,20 @@
 
 /* Line 1806 of yacc.c  */
+#line 842 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
 #line 846 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 185:
+    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 186:
 
 /* Line 1806 of yacc.c  */
 #line 850 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 853 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
+    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
     break;
 
@@ -5957,6 +5956,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
+#line 855 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
     break;
 
@@ -5964,6 +5963,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+#line 859 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
     break;
 
@@ -5972,5 +5971,5 @@
 /* Line 1806 of yacc.c  */
 #line 864 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
+    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
     break;
 
@@ -9151,5 +9150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9154 "Parser/parser.cc"
+#line 9153 "Parser/parser.cc"
       default: break;
     }
