Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
+++ src/Parser/ParseNode.h	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 21:51:49 2016
-// Update Count     : 437
+// Last Modified On : Thu Aug 11 12:24:11 2016
+// Update Count     : 443
 //
 
@@ -363,5 +363,5 @@
 	// StatementNode *add_controlexp( ExpressionNode * );
 	StatementNode *append_block( StatementNode * );
-	StatementNode *append_last_case( StatementNode * );
+	virtual StatementNode *append_last_case( StatementNode * );
 
 	void print( std::ostream &os, int indent = 0) const;
@@ -392,4 +392,5 @@
 		return this;
 	}
+	virtual StatementNode *append_last_case( StatementNode * );
 	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
 
@@ -411,11 +412,15 @@
 };
 
+Statement *build_expr( ExpressionNode *ctl );
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
+Statement *build_case( ExpressionNode *ctl );
+Statement *build_default();
 Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
 Statement *build_for( ForCtl *forctl, StatementNode *stmt );
 Statement *build_branch( std::string identifier, BranchStmt::Type kind );
-Statement *build_case( ExpressionNode *ctl );
-Statement *build_default();
+Statement *build_computedgoto( ExpressionNode *ctl );
+Statement *build_return( ExpressionNode *ctl );
+Statement *build_throw( ExpressionNode *ctl );
 
 //##############################################################################
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
+++ src/Parser/StatementNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 22:08:38 2016
-// Update Count     : 173
+// Last Modified On : Thu Aug 11 16:19:45 2016
+// Update Count     : 210
 //
 
@@ -118,8 +118,9 @@
 
 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
+	assert( false );
 	if ( stmt != 0 ) {
 		StatementNode *next = ( StatementNode *)get_link();
 		if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) )
-			next->append_last_case ( stmt );
+			next->append_last_case( stmt );
 		else
 			if ( block == 0 )
@@ -128,4 +129,21 @@
 				block->set_link( stmt );
 	} // if
+	return this;
+}
+
+StatementNode *StatementNode2::append_last_case( StatementNode *stmt ) {
+	StatementNode *prev = this;
+	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_link() ) {
+		StatementNode2 *node = dynamic_cast<StatementNode2 *>(curr);
+		assert( node );
+		assert( dynamic_cast<CaseStmt *>(node->stmt) );
+		prev = curr;
+	} // for
+	StatementNode2 *node = dynamic_cast<StatementNode2 *>(prev);
+	std::list<Statement *> stmts;
+	buildList( stmt, stmts );
+	CaseStmt * caseStmt;
+	caseStmt = dynamic_cast<CaseStmt *>(node->stmt);
+	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
 }
@@ -205,4 +223,5 @@
 				return new NullStmt( labs );
 		}
+		assert( false );
 	  case If:
 		// {
@@ -220,11 +239,11 @@
 		assert( false );
 	  case Switch:
-		//return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		// return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
 		assert( false );
 	  case Case:
-		return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
+		//return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
 		assert( false );
 	  case Default:
-		return new CaseStmt( labs, 0, branches, true );
+		//return new CaseStmt( labs, 0, branches, true );
 		assert( false );
 	  case While:
@@ -260,25 +279,27 @@
 		assert( false );
 	  case Goto:
-		{
-			if ( get_target() == "" ) {					// computed goto
-				assert( get_control() != 0 );
-				return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
-			} // if
-
-			return new BranchStmt( labs, get_target(), BranchStmt::Goto );
-		}
+		// {
+		// 	if ( get_target() == "" ) {					// computed goto
+		// 		assert( get_control() != 0 );
+		// 		return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
+		// 	} // if
+
+		// 	return new BranchStmt( labs, get_target(), BranchStmt::Goto );
+		// }
+		assert( false );
 	  case Break:
-		return new BranchStmt( labs, get_target(), BranchStmt::Break );
+		// return new BranchStmt( labs, get_target(), BranchStmt::Break );
 		assert( false );
 	  case Continue:
-		return new BranchStmt( labs, get_target(), BranchStmt::Continue );
+		// return new BranchStmt( labs, get_target(), BranchStmt::Continue );
 		assert( false );
 	  case Return:
 	  case Throw :
-		buildList( get_control(), exps );
-		if ( exps.size() ==0 )
-			return new ReturnStmt( labs, 0, type == Throw );
-		if ( exps.size() > 0 )
-			return new ReturnStmt( labs, exps.back(), type == Throw );
+		// buildList( get_control(), exps );
+		// if ( exps.size() ==0 )
+		// 	return new ReturnStmt( labs, 0, type == Throw );
+		// if ( exps.size() > 0 )
+		// 	return new ReturnStmt( labs, exps.back(), type == Throw );
+		assert( false );
 	  case Try:
 		{
@@ -314,4 +335,13 @@
 }
 
+Statement *build_expr( ExpressionNode *ctl ) {
+	Expression *e = maybeBuild< Expression >( ctl );
+
+	if ( e )
+		return new ExprStmt( noLabels, e );
+	else
+		return new NullStmt( noLabels );
+}
+
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
 	Statement *thenb, *elseb = 0;
@@ -338,5 +368,4 @@
 Statement *build_case( ExpressionNode *ctl ) {
 	std::list<Statement *> branches;
-	buildList<Statement, StatementNode>( nullptr, branches );
 	return new CaseStmt( noLabels, maybeBuild<Expression>(ctl), branches );
 }
@@ -377,4 +406,18 @@
 Statement *build_branch( std::string identifier, BranchStmt::Type kind ) {
 	return new BranchStmt( noLabels, identifier, kind );
+}
+Statement *build_computedgoto( ExpressionNode *ctl ) {
+	return new BranchStmt( noLabels, maybeBuild<Expression>(ctl), BranchStmt::Goto );
+}
+
+Statement *build_return( ExpressionNode *ctl ) {
+	std::list<Expression *> exps;
+	buildList( ctl, exps );
+	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr );
+}
+Statement *build_throw( ExpressionNode *ctl ) {
+	std::list<Expression *> exps;
+	buildList( ctl, exps );
+	return new ReturnStmt( noLabels, exps.size() > 0 ? exps.back() : nullptr, true );
 }
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
+++ src/Parser/parser.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
@@ -1035,65 +1035,65 @@
      657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
      692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
-     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,
-     938,   943,   947,   949,   951,   953,   955,   961,   962,   968,
-     969,   973,   974,   979,   981,   987,   988,   990,   995,   997,
-    1004,  1006,  1010,  1011,  1016,  1018,  1022,  1023,  1027,  1029,
-    1033,  1034,  1038,  1039,  1043,  1044,  1059,  1060,  1061,  1062,
-    1063,  1067,  1072,  1079,  1089,  1094,  1099,  1107,  1112,  1117,
-    1122,  1127,  1135,  1157,  1162,  1169,  1171,  1178,  1183,  1188,
-    1199,  1204,  1209,  1214,  1219,  1228,  1233,  1241,  1242,  1243,
-    1244,  1250,  1255,  1263,  1264,  1265,  1266,  1270,  1271,  1272,
-    1273,  1278,  1279,  1288,  1289,  1294,  1295,  1300,  1302,  1304,
-    1306,  1308,  1311,  1310,  1322,  1323,  1325,  1335,  1336,  1341,
-    1345,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1364,  1366,
-    1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,  1384,  1386,
-    1388,  1394,  1395,  1397,  1399,  1401,  1406,  1407,  1413,  1414,
-    1416,  1418,  1423,  1425,  1427,  1429,  1434,  1435,  1437,  1439,
-    1444,  1445,  1447,  1452,  1453,  1455,  1457,  1462,  1464,  1466,
-    1471,  1472,  1476,  1478,  1484,  1483,  1487,  1489,  1494,  1496,
-    1502,  1503,  1508,  1509,  1511,  1512,  1521,  1522,  1524,  1526,
-    1531,  1533,  1539,  1540,  1542,  1545,  1548,  1553,  1554,  1559,
-    1564,  1568,  1570,  1576,  1575,  1582,  1584,  1590,  1591,  1599,
-    1600,  1604,  1605,  1606,  1608,  1610,  1617,  1618,  1620,  1622,
-    1627,  1628,  1634,  1635,  1639,  1640,  1645,  1646,  1647,  1649,
-    1657,  1658,  1660,  1663,  1665,  1669,  1670,  1671,  1673,  1675,
-    1679,  1684,  1692,  1693,  1702,  1704,  1709,  1710,  1711,  1715,
-    1716,  1717,  1721,  1722,  1723,  1727,  1728,  1729,  1734,  1735,
-    1736,  1737,  1743,  1744,  1746,  1751,  1752,  1757,  1758,  1759,
-    1760,  1761,  1776,  1777,  1782,  1783,  1789,  1791,  1794,  1796,
-    1798,  1821,  1822,  1824,  1826,  1831,  1832,  1834,  1839,  1844,
-    1845,  1851,  1850,  1854,  1858,  1860,  1862,  1868,  1869,  1874,
-    1879,  1881,  1886,  1888,  1889,  1891,  1896,  1898,  1900,  1905,
-    1907,  1912,  1917,  1925,  1931,  1930,  1944,  1945,  1950,  1951,
-    1955,  1960,  1965,  1973,  1978,  1989,  1990,  2001,  2002,  2008,
-    2009,  2013,  2014,  2015,  2018,  2017,  2028,  2037,  2043,  2049,
-    2058,  2064,  2070,  2076,  2082,  2090,  2096,  2104,  2110,  2119,
-    2120,  2121,  2125,  2129,  2131,  2136,  2137,  2141,  2142,  2147,
-    2153,  2154,  2157,  2159,  2160,  2164,  2165,  2166,  2167,  2201,
-    2203,  2204,  2206,  2211,  2216,  2221,  2223,  2225,  2230,  2232,
-    2234,  2236,  2241,  2243,  2252,  2254,  2255,  2260,  2262,  2264,
-    2269,  2271,  2273,  2278,  2280,  2282,  2291,  2292,  2293,  2297,
-    2299,  2301,  2306,  2308,  2310,  2315,  2317,  2319,  2334,  2336,
-    2337,  2339,  2344,  2345,  2350,  2352,  2354,  2359,  2361,  2363,
-    2365,  2370,  2372,  2374,  2384,  2386,  2387,  2389,  2394,  2396,
-    2398,  2403,  2405,  2407,  2409,  2414,  2416,  2418,  2449,  2451,
-    2452,  2454,  2459,  2464,  2472,  2474,  2476,  2481,  2483,  2488,
-    2490,  2504,  2505,  2507,  2512,  2514,  2516,  2518,  2520,  2525,
-    2526,  2528,  2530,  2535,  2537,  2539,  2545,  2547,  2549,  2553,
-    2555,  2557,  2559,  2573,  2574,  2576,  2581,  2583,  2585,  2587,
-    2589,  2594,  2595,  2597,  2599,  2604,  2606,  2608,  2614,  2615,
-    2617,  2626,  2629,  2631,  2634,  2636,  2638,  2651,  2652,  2654,
-    2659,  2661,  2663,  2665,  2667,  2672,  2673,  2675,  2677,  2682,
-    2684,  2692,  2693,  2694,  2699,  2700,  2704,  2706,  2708,  2710,
-    2712,  2714,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
-    2737,  2739,  2744,  2746,  2748,  2753,  2779,  2780,  2782,  2786,
-    2787,  2791,  2793,  2795,  2797,  2799,  2801,  2808,  2810,  2812,
-    2814,  2816,  2818,  2823,  2828,  2830,  2832,  2850,  2852,  2857,
-    2858
+     726,   728,   730,   740,   742,   753,   754,   756,   761,   763,
+     767,   768,   773,   774,   778,   783,   784,   788,   790,   796,
+     797,   801,   803,   805,   807,   813,   814,   818,   820,   825,
+     827,   829,   834,   836,   841,   843,   847,   850,   854,   857,
+     861,   863,   865,   867,   872,   874,   876,   885,   887,   889,
+     891,   893,   898,   900,   902,   904,   909,   922,   923,   928,
+     930,   935,   939,   941,   943,   945,   947,   953,   954,   960,
+     961,   965,   966,   971,   973,   979,   980,   982,   987,   989,
+     996,   998,  1002,  1003,  1008,  1010,  1014,  1015,  1019,  1021,
+    1025,  1026,  1030,  1031,  1035,  1036,  1051,  1052,  1053,  1054,
+    1055,  1059,  1064,  1071,  1081,  1086,  1091,  1099,  1104,  1109,
+    1114,  1119,  1127,  1149,  1154,  1161,  1163,  1170,  1175,  1180,
+    1191,  1196,  1201,  1206,  1211,  1220,  1225,  1233,  1234,  1235,
+    1236,  1242,  1247,  1255,  1256,  1257,  1258,  1262,  1263,  1264,
+    1265,  1270,  1271,  1280,  1281,  1286,  1287,  1292,  1294,  1296,
+    1298,  1300,  1303,  1302,  1314,  1315,  1317,  1327,  1328,  1333,
+    1337,  1339,  1341,  1343,  1345,  1347,  1349,  1351,  1356,  1358,
+    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
+    1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,  1406,
+    1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,  1431,
+    1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,  1458,
+    1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,  1488,
+    1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,  1518,
+    1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,  1551,
+    1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,  1591,
+    1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,  1614,
+    1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,  1641,
+    1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,  1667,
+    1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,  1707,
+    1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,  1727,
+    1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,  1751,
+    1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,  1788,
+    1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,  1836,
+    1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,  1866,
+    1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,  1897,
+    1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,  1943,
+    1947,  1952,  1957,  1965,  1970,  1981,  1982,  1993,  1994,  2000,
+    2001,  2005,  2006,  2007,  2010,  2009,  2020,  2029,  2035,  2041,
+    2050,  2056,  2062,  2068,  2074,  2082,  2088,  2096,  2102,  2111,
+    2112,  2113,  2117,  2121,  2123,  2128,  2129,  2133,  2134,  2139,
+    2145,  2146,  2149,  2151,  2152,  2156,  2157,  2158,  2159,  2193,
+    2195,  2196,  2198,  2203,  2208,  2213,  2215,  2217,  2222,  2224,
+    2226,  2228,  2233,  2235,  2244,  2246,  2247,  2252,  2254,  2256,
+    2261,  2263,  2265,  2270,  2272,  2274,  2283,  2284,  2285,  2289,
+    2291,  2293,  2298,  2300,  2302,  2307,  2309,  2311,  2326,  2328,
+    2329,  2331,  2336,  2337,  2342,  2344,  2346,  2351,  2353,  2355,
+    2357,  2362,  2364,  2366,  2376,  2378,  2379,  2381,  2386,  2388,
+    2390,  2395,  2397,  2399,  2401,  2406,  2408,  2410,  2441,  2443,
+    2444,  2446,  2451,  2456,  2464,  2466,  2468,  2473,  2475,  2480,
+    2482,  2496,  2497,  2499,  2504,  2506,  2508,  2510,  2512,  2517,
+    2518,  2520,  2522,  2527,  2529,  2531,  2537,  2539,  2541,  2545,
+    2547,  2549,  2551,  2565,  2566,  2568,  2573,  2575,  2577,  2579,
+    2581,  2586,  2587,  2589,  2591,  2596,  2598,  2600,  2606,  2607,
+    2609,  2618,  2621,  2623,  2626,  2628,  2630,  2643,  2644,  2646,
+    2651,  2653,  2655,  2657,  2659,  2664,  2665,  2667,  2669,  2674,
+    2676,  2684,  2685,  2686,  2691,  2692,  2696,  2698,  2700,  2702,
+    2704,  2706,  2713,  2715,  2717,  2719,  2721,  2723,  2725,  2727,
+    2729,  2731,  2736,  2738,  2740,  2745,  2771,  2772,  2774,  2778,
+    2779,  2783,  2785,  2787,  2789,  2791,  2793,  2800,  2802,  2804,
+    2806,  2808,  2810,  2815,  2820,  2822,  2824,  2842,  2844,  2849,
+    2850
 };
 #endif
@@ -5638,5 +5638,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
+			(yyval.sn) = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ) ) );
 		}
     break;
@@ -5708,5 +5708,5 @@
 /* Line 1806 of yacc.c  */
 #line 719 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
+    { (yyval.sn) = new StatementNode2( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5781,6 +5781,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 760 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
+#line 761 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
 
@@ -5788,6 +5788,6 @@
 
 /* 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 ) ) ); }
+#line 763 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode2( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
 
@@ -5795,5 +5795,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 766 "parser.yy"
+#line 767 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5802,6 +5802,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Default ); }
+#line 768 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_default() ); }
     break;
 
@@ -5809,5 +5809,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 774 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5816,5 +5816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 777 "parser.yy"
+#line 778 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5823,5 +5823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 782 "parser.yy"
+#line 783 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5830,5 +5830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 788 "parser.yy"
+#line 789 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5837,5 +5837,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 790 "parser.yy"
+#line 791 "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;
@@ -5844,5 +5844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
+#line 796 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5851,5 +5851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 801 "parser.yy"
+#line 802 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5858,5 +5858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 803 "parser.yy"
+#line 804 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5865,5 +5865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+#line 806 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5872,5 +5872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 807 "parser.yy"
+#line 808 "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;
@@ -5879,6 +5879,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Break ); }
+#line 813 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
     break;
 
@@ -5886,5 +5886,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 818 "parser.yy"
+#line 819 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5893,5 +5893,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 820 "parser.yy"
+#line 821 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5900,5 +5900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 825 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5907,5 +5907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
+#line 828 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     break;
@@ -5914,5 +5914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 829 "parser.yy"
+#line 830 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
@@ -5921,5 +5921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 834 "parser.yy"
+#line 835 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5928,5 +5928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 836 "parser.yy"
+#line 837 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5943,5 +5943,5 @@
 /* Line 1806 of yacc.c  */
 #line 846 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
+    { (yyval.sn) = new StatementNode2( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5949,5 +5949,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 850 "parser.yy"
+#line 849 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
     break;
@@ -5956,5 +5956,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 853 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
     break;
@@ -5963,5 +5963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 856 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
     break;
@@ -5970,34 +5970,34 @@
 
 /* Line 1806 of yacc.c  */
+#line 860 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
+    break;
+
+  case 190:
+
+/* Line 1806 of yacc.c  */
+#line 862 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_return( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 191:
+
+/* Line 1806 of yacc.c  */
 #line 864 "parser.yy"
-    { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
-    break;
-
-  case 190:
+    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 192:
 
 /* Line 1806 of yacc.c  */
 #line 866 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 191:
+    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 193:
 
 /* Line 1806 of yacc.c  */
 #line 868 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
+    { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
 
@@ -6005,5 +6005,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 881 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6012,5 +6012,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
+#line 875 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6019,5 +6019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
+#line 877 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6029,5 +6029,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 888 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6036,5 +6036,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 890 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6043,5 +6043,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 892 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6050,5 +6050,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 902 "parser.yy"
+#line 894 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6057,5 +6057,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
+#line 899 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6064,5 +6064,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 901 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6071,5 +6071,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 911 "parser.yy"
+#line 903 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6078,5 +6078,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 913 "parser.yy"
+#line 905 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6085,5 +6085,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 918 "parser.yy"
+#line 910 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6095,5 +6095,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 932 "parser.yy"
+#line 924 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6105,5 +6105,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 937 "parser.yy"
+#line 929 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6112,5 +6112,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 931 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6122,33 +6122,33 @@
 
 /* Line 1806 of yacc.c  */
+#line 940 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+    break;
+
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 942 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 944 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
+    break;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 946 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ); }
+    break;
+
+  case 216:
+
+/* Line 1806 of yacc.c  */
 #line 948 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
-    break;
-
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
-    break;
-
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 952 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
-    break;
-
-  case 215:
-
-/* Line 1806 of yacc.c  */
-#line 954 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ); }
-    break;
-
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 956 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6157,5 +6157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 961 "parser.yy"
+#line 953 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6164,5 +6164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 963 "parser.yy"
+#line 955 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6171,5 +6171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
+#line 960 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6178,5 +6178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 975 "parser.yy"
+#line 967 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6185,5 +6185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
+#line 972 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6192,5 +6192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
+#line 974 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6199,5 +6199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+#line 979 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6206,5 +6206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
+#line 981 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6213,5 +6213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 991 "parser.yy"
+#line 983 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6220,5 +6220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 996 "parser.yy"
+#line 988 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6227,5 +6227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 998 "parser.yy"
+#line 990 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6234,5 +6234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1005 "parser.yy"
+#line 997 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6241,5 +6241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1012 "parser.yy"
+#line 1004 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6248,5 +6248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1017 "parser.yy"
+#line 1009 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6255,5 +6255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1024 "parser.yy"
+#line 1016 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6262,5 +6262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1038 "parser.yy"
+#line 1030 "parser.yy"
     {}
     break;
@@ -6269,5 +6269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 1031 "parser.yy"
     {}
     break;
@@ -6276,5 +6276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1068 "parser.yy"
+#line 1060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6286,5 +6286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1075 "parser.yy"
+#line 1067 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6296,5 +6296,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1080 "parser.yy"
+#line 1072 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6306,5 +6306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1090 "parser.yy"
+#line 1082 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6316,5 +6316,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+#line 1087 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6326,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+#line 1092 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6336,5 +6336,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1108 "parser.yy"
+#line 1100 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6346,5 +6346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1113 "parser.yy"
+#line 1105 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6356,5 +6356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1118 "parser.yy"
+#line 1110 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6366,5 +6366,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1123 "parser.yy"
+#line 1115 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6376,5 +6376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1128 "parser.yy"
+#line 1120 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6386,5 +6386,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1136 "parser.yy"
+#line 1128 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6395,5 +6395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1159 "parser.yy"
+#line 1151 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6404,5 +6404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1163 "parser.yy"
+#line 1155 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6413,5 +6413,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1170 "parser.yy"
+#line 1162 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6420,5 +6420,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1174 "parser.yy"
+#line 1166 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6427,5 +6427,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1179 "parser.yy"
+#line 1171 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6437,5 +6437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1184 "parser.yy"
+#line 1176 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6447,5 +6447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1189 "parser.yy"
+#line 1181 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6457,5 +6457,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1200 "parser.yy"
+#line 1192 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6467,5 +6467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1205 "parser.yy"
+#line 1197 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6477,5 +6477,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1210 "parser.yy"
+#line 1202 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6487,5 +6487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1215 "parser.yy"
+#line 1207 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6497,5 +6497,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1220 "parser.yy"
+#line 1212 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6507,5 +6507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1229 "parser.yy"
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6517,5 +6517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+#line 1226 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6527,5 +6527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1251 "parser.yy"
+#line 1243 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6537,5 +6537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1256 "parser.yy"
+#line 1248 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6547,5 +6547,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1278 "parser.yy"
+#line 1270 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6554,5 +6554,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
+#line 1282 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6561,40 +6561,40 @@
 
 /* Line 1806 of yacc.c  */
+#line 1293 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
+  case 298:
+
+/* Line 1806 of yacc.c  */
+#line 1295 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1297 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+    break;
+
+  case 300:
+
+/* Line 1806 of yacc.c  */
+#line 1299 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
+    break;
+
+  case 301:
+
+/* Line 1806 of yacc.c  */
 #line 1301 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
-    break;
-
-  case 298:
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
+    break;
+
+  case 302:
 
 /* Line 1806 of yacc.c  */
 #line 1303 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-    break;
-
-  case 299:
-
-/* Line 1806 of yacc.c  */
-#line 1305 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 300:
-
-/* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 301:
-
-/* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 302:
-
-/* Line 1806 of yacc.c  */
-#line 1311 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6605,5 +6605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1315 "parser.yy"
+#line 1307 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6615,5 +6615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1316 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6622,5 +6622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+#line 1318 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6629,5 +6629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1329 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6636,54 +6636,54 @@
 
 /* Line 1806 of yacc.c  */
+#line 1338 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1340 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1342 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1344 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
 #line 1346 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 311:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 315:
 
 /* Line 1806 of yacc.c  */
 #line 1348 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 312:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
 
 /* Line 1806 of yacc.c  */
 #line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 313:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 317:
 
 /* Line 1806 of yacc.c  */
 #line 1352 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6692,89 +6692,89 @@
 
 /* Line 1806 of yacc.c  */
+#line 1357 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1359 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1361 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1363 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
 #line 1365 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 319:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
 
 /* Line 1806 of yacc.c  */
 #line 1367 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 320:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
 
 /* Line 1806 of yacc.c  */
 #line 1369 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 321:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
 
 /* Line 1806 of yacc.c  */
 #line 1371 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 322:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
 
 /* Line 1806 of yacc.c  */
 #line 1373 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 323:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
 
 /* Line 1806 of yacc.c  */
 #line 1375 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 324:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
 
 /* Line 1806 of yacc.c  */
 #line 1377 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 325:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
 
 /* Line 1806 of yacc.c  */
 #line 1379 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 326:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
 
 /* Line 1806 of yacc.c  */
 #line 1381 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6783,5 +6783,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1396 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6790,5 +6790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1398 "parser.yy"
+#line 1390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6797,93 +6797,107 @@
 
 /* Line 1806 of yacc.c  */
+#line 1392 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1394 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
 #line 1400 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1407 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1409 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1411 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1420 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1422 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1428 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1430 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1408 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1440 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1426 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1428 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1436 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 351:
+  case 354:
 
 /* Line 1806 of yacc.c  */
@@ -6892,5 +6906,5 @@
     break;
 
-  case 352:
+  case 355:
 
 /* Line 1806 of yacc.c  */
@@ -6899,50 +6913,36 @@
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1455 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1457 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1458 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1463 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1465 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1467 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 362:
 
 /* Line 1806 of yacc.c  */
-#line 1477 "parser.yy"
+#line 1469 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6951,5 +6951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1471 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6961,5 +6961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1484 "parser.yy"
+#line 1476 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6968,5 +6968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
+#line 1478 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -6975,5 +6975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1488 "parser.yy"
+#line 1480 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -6982,5 +6982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1490 "parser.yy"
+#line 1482 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -6989,5 +6989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
+#line 1487 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -6996,5 +6996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1497 "parser.yy"
+#line 1489 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7003,19 +7003,19 @@
 
 /* Line 1806 of yacc.c  */
+#line 1494 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 371:
+
+/* Line 1806 of yacc.c  */
+#line 1496 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
+    break;
+
+  case 373:
+
+/* Line 1806 of yacc.c  */
 #line 1502 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 371:
-
-/* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 373:
-
-/* Line 1806 of yacc.c  */
-#line 1510 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7024,5 +7024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1513 "parser.yy"
+#line 1505 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7035,5 +7035,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1523 "parser.yy"
+#line 1515 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7042,5 +7042,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1525 "parser.yy"
+#line 1517 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7049,5 +7049,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1527 "parser.yy"
+#line 1519 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7056,5 +7056,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
+#line 1524 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7063,5 +7063,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1534 "parser.yy"
+#line 1526 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7070,40 +7070,40 @@
 
 /* Line 1806 of yacc.c  */
+#line 1531 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
+    break;
+
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1533 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1536 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 385:
+
+/* Line 1806 of yacc.c  */
 #line 1539 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
-    break;
-
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1541 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1544 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 385:
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1545 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 388:
 
 /* Line 1806 of yacc.c  */
 #line 1547 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1553 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7112,5 +7112,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1552 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7119,5 +7119,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+#line 1561 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7126,5 +7126,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
+#line 1563 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7136,5 +7136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
+#line 1568 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7143,5 +7143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1578 "parser.yy"
+#line 1570 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7150,5 +7150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1583 "parser.yy"
+#line 1575 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7157,5 +7157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1585 "parser.yy"
+#line 1577 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7164,5 +7164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
+#line 1582 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7171,5 +7171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1592 "parser.yy"
+#line 1584 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7178,12 +7178,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1591 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 403:
+
+/* Line 1806 of yacc.c  */
 #line 1599 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1607 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7192,5 +7192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1609 "parser.yy"
+#line 1601 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7199,16 +7199,30 @@
 
 /* Line 1806 of yacc.c  */
+#line 1603 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 407:
+
+/* Line 1806 of yacc.c  */
 #line 1611 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1619 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1613 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1615 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
 
 /* Line 1806 of yacc.c  */
@@ -7217,50 +7231,36 @@
     break;
 
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1623 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1629 "parser.yy"
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1640 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1634 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1648 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1650 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
   case 421:
 
 /* Line 1806 of yacc.c  */
-#line 1659 "parser.yy"
+#line 1651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7269,5 +7269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1662 "parser.yy"
+#line 1654 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7276,5 +7276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1664 "parser.yy"
+#line 1656 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7283,5 +7283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1674 "parser.yy"
+#line 1666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7290,5 +7290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
+#line 1672 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7300,5 +7300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1685 "parser.yy"
+#line 1677 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7310,5 +7310,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+#line 1686 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7317,5 +7317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+#line 1695 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7324,9 +7324,16 @@
 
 /* Line 1806 of yacc.c  */
-#line 1705 "parser.yy"
+#line 1697 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
   case 447:
+
+/* Line 1806 of yacc.c  */
+#line 1722 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 451:
 
 /* Line 1806 of yacc.c  */
@@ -7335,64 +7342,57 @@
     break;
 
-  case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1738 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 452:
 
 /* Line 1806 of yacc.c  */
+#line 1735 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1737 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1739 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 455:
+
+/* Line 1806 of yacc.c  */
 #line 1743 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 456:
+
+/* Line 1806 of yacc.c  */
+#line 1744 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1749 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 453:
-
-/* Line 1806 of yacc.c  */
-#line 1745 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1747 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 455:
+  case 459:
 
 /* Line 1806 of yacc.c  */
 #line 1751 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 456:
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+    break;
+
+  case 460:
 
 /* Line 1806 of yacc.c  */
 #line 1752 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1757 "parser.yy"
-    { (yyval.in) = 0; }
-    break;
-
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1759 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
-    break;
-
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7401,5 +7401,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1762 "parser.yy"
+#line 1754 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7408,5 +7408,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1778 "parser.yy"
+#line 1770 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
@@ -7415,5 +7415,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
+#line 1776 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -7422,5 +7422,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1790 "parser.yy"
+#line 1782 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7429,5 +7429,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1793 "parser.yy"
+#line 1785 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7436,5 +7436,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1795 "parser.yy"
+#line 1787 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7443,5 +7443,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1797 "parser.yy"
+#line 1789 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
@@ -7450,5 +7450,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1799 "parser.yy"
+#line 1791 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7457,5 +7457,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1823 "parser.yy"
+#line 1815 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7464,33 +7464,33 @@
 
 /* Line 1806 of yacc.c  */
+#line 1817 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 474:
+
+/* Line 1806 of yacc.c  */
+#line 1819 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 476:
+
+/* Line 1806 of yacc.c  */
 #line 1825 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 477:
+
+/* Line 1806 of yacc.c  */
+#line 1827 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1833 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1835 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 478:
 
 /* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
+#line 1832 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7499,5 +7499,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+#line 1838 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7506,26 +7506,26 @@
 
 /* Line 1806 of yacc.c  */
+#line 1843 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
+    break;
+
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1845 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 484:
+
+/* Line 1806 of yacc.c  */
 #line 1851 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
-    break;
-
-  case 482:
+    { (yyval.tclass) = DeclarationNode::Type; }
+    break;
+
+  case 485:
 
 /* Line 1806 of yacc.c  */
 #line 1853 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 484:
-
-/* Line 1806 of yacc.c  */
-#line 1859 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Type; }
-    break;
-
-  case 485:
-
-/* Line 1806 of yacc.c  */
-#line 1861 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7534,5 +7534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1855 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7541,5 +7541,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
+#line 1860 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7548,5 +7548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+#line 1862 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7555,5 +7555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+#line 1867 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7565,5 +7565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1880 "parser.yy"
+#line 1872 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7572,19 +7572,19 @@
 
 /* Line 1806 of yacc.c  */
+#line 1874 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1879 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
+    break;
+
+  case 494:
+
+/* Line 1806 of yacc.c  */
 #line 1882 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1887 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
-    break;
-
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1890 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
@@ -7593,5 +7593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1892 "parser.yy"
+#line 1884 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7600,5 +7600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
+#line 1889 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7607,5 +7607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1899 "parser.yy"
+#line 1891 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7614,5 +7614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1901 "parser.yy"
+#line 1893 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7621,5 +7621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1906 "parser.yy"
+#line 1898 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7628,5 +7628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1908 "parser.yy"
+#line 1900 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7635,5 +7635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+#line 1905 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7645,5 +7645,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+#line 1910 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7655,5 +7655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7665,5 +7665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+#line 1923 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7675,5 +7675,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1936 "parser.yy"
+#line 1928 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7686,5 +7686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1946 "parser.yy"
+#line 1938 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7693,5 +7693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1956 "parser.yy"
+#line 1948 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7703,5 +7703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+#line 1953 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7713,5 +7713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+#line 1958 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7723,5 +7723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1974 "parser.yy"
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7733,5 +7733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1979 "parser.yy"
+#line 1971 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7743,5 +7743,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1989 "parser.yy"
+#line 1981 "parser.yy"
     {}
     break;
@@ -7750,5 +7750,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1991 "parser.yy"
+#line 1983 "parser.yy"
     {
 			if ( theTree ) {
@@ -7763,5 +7763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2003 "parser.yy"
+#line 1995 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7770,12 +7770,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 2000 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 523:
+
+/* Line 1806 of yacc.c  */
 #line 2008 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2016 "parser.yy"
     {}
     break;
@@ -7784,5 +7784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2018 "parser.yy"
+#line 2010 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7794,5 +7794,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2023 "parser.yy"
+#line 2015 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7805,5 +7805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2029 "parser.yy"
+#line 2021 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7816,5 +7816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2044 "parser.yy"
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7827,5 +7827,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2050 "parser.yy"
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7838,5 +7838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2059 "parser.yy"
+#line 2051 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7849,5 +7849,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2065 "parser.yy"
+#line 2057 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7860,5 +7860,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2071 "parser.yy"
+#line 2063 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7871,5 +7871,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2077 "parser.yy"
+#line 2069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7882,5 +7882,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2083 "parser.yy"
+#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7893,5 +7893,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2091 "parser.yy"
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7902,4 +7902,15 @@
 
   case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2089 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			(yyval.decl) = (yyvsp[(2) - (5)].decl)->addOldDeclList( (yyvsp[(4) - (5)].decl) )->addFunctionBody( (yyvsp[(5) - (5)].sn) )->addQualifiers( (yyvsp[(1) - (5)].decl) );
+		}
+    break;
+
+  case 537:
 
 /* Line 1806 of yacc.c  */
@@ -7912,19 +7923,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2105 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			(yyval.decl) = (yyvsp[(2) - (5)].decl)->addOldDeclList( (yyvsp[(4) - (5)].decl) )->addFunctionBody( (yyvsp[(5) - (5)].sn) )->addQualifiers( (yyvsp[(1) - (5)].decl) );
-		}
-    break;
-
   case 538:
 
 /* Line 1806 of yacc.c  */
-#line 2111 "parser.yy"
+#line 2103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7937,5 +7937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2126 "parser.yy"
+#line 2118 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7944,5 +7944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+#line 2128 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7951,5 +7951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2143 "parser.yy"
+#line 2135 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7958,5 +7958,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2149 "parser.yy"
+#line 2141 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7965,5 +7965,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2164 "parser.yy"
+#line 2156 "parser.yy"
     {}
     break;
@@ -7972,5 +7972,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2165 "parser.yy"
+#line 2157 "parser.yy"
     {}
     break;
@@ -7979,5 +7979,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+#line 2158 "parser.yy"
     {}
     break;
@@ -7986,5 +7986,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2167 "parser.yy"
+#line 2159 "parser.yy"
     {}
     break;
@@ -7993,5 +7993,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2202 "parser.yy"
+#line 2194 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8000,5 +8000,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+#line 2197 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8007,5 +8007,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+#line 2199 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8014,5 +8014,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2204 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8024,5 +8024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2209 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8031,5 +8031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+#line 2214 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8038,5 +8038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8045,5 +8045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+#line 2218 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8052,5 +8052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2231 "parser.yy"
+#line 2223 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8059,5 +8059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2233 "parser.yy"
+#line 2225 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8066,5 +8066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2235 "parser.yy"
+#line 2227 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8073,5 +8073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8080,5 +8080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+#line 2234 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8087,5 +8087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2244 "parser.yy"
+#line 2236 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8094,355 +8094,355 @@
 
 /* Line 1806 of yacc.c  */
+#line 2245 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
 #line 2253 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2262 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2271 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2273 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2275 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2290 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2294 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2299 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2308 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2327 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2330 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2338 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2363 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2270 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2377 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2382 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2387 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2272 "parser.yy"
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2389 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2274 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2391 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2398 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2281 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2400 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2407 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2409 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2411 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2318 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2320 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2442 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2364 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2373 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2375 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2388 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2395 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2406 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2408 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2415 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2417 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2419 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2450 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2453 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2455 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 632:
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2452 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8454,5 +8454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2457 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8464,5 +8464,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2473 "parser.yy"
+#line 2465 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8471,5 +8471,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2475 "parser.yy"
+#line 2467 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8478,5 +8478,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2469 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8485,5 +8485,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2482 "parser.yy"
+#line 2474 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8492,5 +8492,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2484 "parser.yy"
+#line 2476 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8499,5 +8499,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+#line 2481 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8506,5 +8506,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+#line 2483 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8513,5 +8513,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
+#line 2498 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8520,5 +8520,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2500 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8527,352 +8527,380 @@
 
 /* Line 1806 of yacc.c  */
+#line 2505 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2509 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2511 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 648:
+
+/* Line 1806 of yacc.c  */
 #line 2513 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2528 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2530 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2538 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2548 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2550 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2552 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2567 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2569 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2574 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2515 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2517 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2580 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2536 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2597 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2538 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2608 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2619 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2554 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2560 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2627 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2629 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2631 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2645 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2647 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2652 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2584 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2654 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2586 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2656 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2658 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2605 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2607 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2609 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2677 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2630 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2637 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2639 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2662 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2664 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2668 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2674 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2685 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
   case 703:
 
 /* Line 1806 of yacc.c  */
-#line 2695 "parser.yy"
+#line 2687 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
   case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2697 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2699 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2701 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2703 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
 
 /* Line 1806 of yacc.c  */
@@ -8881,5 +8909,5 @@
     break;
 
-  case 707:
+  case 711:
 
 /* Line 1806 of yacc.c  */
@@ -8888,138 +8916,138 @@
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2714 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2716 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2718 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2720 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2726 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2728 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2744 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2773 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2784 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2786 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2788 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2790 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2726 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2730 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2736 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2738 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2740 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2747 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2781 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 731:
+  case 735:
 
 /* Line 1806 of yacc.c  */
@@ -9028,5 +9056,5 @@
     break;
 
-  case 732:
+  case 736:
 
 /* Line 1806 of yacc.c  */
@@ -9035,78 +9063,50 @@
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
   case 737:
 
 /* Line 1806 of yacc.c  */
+#line 2801 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2803 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2805 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2807 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 741:
+
+/* Line 1806 of yacc.c  */
 #line 2809 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 738:
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 742:
 
 /* Line 1806 of yacc.c  */
 #line 2811 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2813 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2815 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2817 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2819 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 743:
 
 /* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
+#line 2816 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9115,5 +9115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
+#line 2821 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9122,5 +9122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2831 "parser.yy"
+#line 2823 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9129,5 +9129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2833 "parser.yy"
+#line 2825 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9136,5 +9136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2857 "parser.yy"
+#line 2849 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9143,5 +9143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2859 "parser.yy"
+#line 2851 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9381,5 +9381,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2862 "parser.yy"
+#line 2854 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 321f55dd97b62c0225eb83e07dfecef26a7154d2)
+++ src/Parser/parser.yy	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 23:03:05 2016
-// Update Count     : 1846
+// Last Modified On : Thu Aug 11 18:02:57 2016
+// Update Count     : 1861
 //
 
@@ -665,5 +665,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
+			$$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
 		}
 	;
@@ -717,5 +717,5 @@
 expression_statement:
 	comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Exp, $1, 0 ); }
+		{ $$ = new StatementNode2( build_expr( $1 ) ); }
 	;
 
@@ -758,12 +758,13 @@
 
 case_value_list:										// CFA
-	case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
+	//case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
+	case_value									{ $$ = new StatementNode2( build_case( $1 ) ); }
 		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
-	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
 	;
 
 case_label:												// CFA
 	CASE case_value_list ':'					{ $$ = $2; }
-	| DEFAULT ':'								{ $$ = new StatementNode( StatementNode::Default ); }
+	| DEFAULT ':'								{ $$ = new StatementNode2( build_default() ); }
 		// A semantic check is required to ensure only one default clause per switch/choose statement.
 	;
@@ -810,5 +811,5 @@
 fall_through_opt:										// CFA
 	// empty
-		{ $$ = new StatementNode( StatementNode::Break ); }	// insert implicit break
+		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); } // insert implicit break
 	| fall_through
 	;
@@ -839,40 +840,31 @@
 jump_statement:
 	GOTO IDENTIFIER ';'
-		//{ $$ = new StatementNode( StatementNode::Goto, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Goto ) ); }
 	| GOTO '*' comma_expression ';'						// GCC, computed goto
 		// The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
 		// whereas normal operator precedence yields goto (*i)+3;
-		{ $$ = new StatementNode( StatementNode::Goto, $3 ); }
+		{ $$ = new StatementNode2( build_computedgoto( $3 ) ); }
 	| CONTINUE ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Continue ); }
 		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
 	| CONTINUE IDENTIFIER ';'							// CFA, multi-level continue
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Continue, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Continue ) ); delete $2; }
 	| BREAK ';'
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Break ); }
 		{ $$ = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
 	| BREAK IDENTIFIER ';'								// CFA, multi-level exit
 		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
 		// the target of the transfer appears only at the start of an iteration statement.
-		//{ $$ = new StatementNode( StatementNode::Break, $2 ); }
 		{ $$ = new StatementNode2( build_branch( *$2, BranchStmt::Break ) ); delete $2; }
 	| RETURN comma_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Return, $2, 0 ); }
-	| THROW assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROW ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
-	| THROWRESUME assignment_expression_opt ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-	| THROWRESUME assignment_expression_opt AT assignment_expression ';'
-		{ $$ = new StatementNode( StatementNode::Throw, $2, 0 ); }
-//	| THROWRESUME ';'
-//		{ $$ = new StatementNode( StatementNode::Throw ); }
+		{ $$ = new StatementNode2( build_return( $2 ) ); }
+	| THROW assignment_expression_opt ';'				// handles rethrow
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt ';'			// handles reresume
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
+		{ $$ = new StatementNode2( build_throw( $2 ) ); }
 	;
 
