Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 1b299967c6b00690fea8f261aa12be0524f73546)
+++ src/Parser/ExpressionNode.cc	(revision b6fd7517dcd49accffbb4e92357f4fec8890b879)
@@ -198,15 +198,13 @@
 }
 
-Expression *build_fieldSel( ExpressionNode *expr_node, NameExpr *member ) {
-	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), maybeMoveBuild< Expression >(expr_node) );
-	delete member;
-	return ret;
-}
-
-Expression *build_pfieldSel( ExpressionNode *expr_node, NameExpr *member ) {
+Expression *build_fieldSel( ExpressionNode *expr_node, Expression *member ) {
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member, maybeMoveBuild< Expression >(expr_node) );
+	return ret;
+}
+
+Expression *build_pfieldSel( ExpressionNode *expr_node, Expression *member ) {
 	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
 	deref->get_args().push_back( maybeMoveBuild< Expression >(expr_node) );
-	UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
-	delete member;
+	UntypedMemberExpr *ret = new UntypedMemberExpr( member, deref );
 	return ret;
 }
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 1b299967c6b00690fea8f261aa12be0524f73546)
+++ src/Parser/ParseNode.h	(revision b6fd7517dcd49accffbb4e92357f4fec8890b879)
@@ -160,6 +160,6 @@
 
 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
-Expression * build_fieldSel( ExpressionNode * expr_node, NameExpr * member );
-Expression * build_pfieldSel( ExpressionNode * expr_node, NameExpr * member );
+Expression * build_fieldSel( ExpressionNode * expr_node, Expression * member );
+Expression * build_pfieldSel( ExpressionNode * expr_node, Expression * member );
 Expression * build_addressOf( ExpressionNode * expr_node );
 Expression * build_sizeOfexpr( ExpressionNode * expr_node );
@@ -383,8 +383,8 @@
 //##############################################################################
 
-template< typename SynTreeType, typename NodeType >
-void buildList( const NodeType * firstNode, std::list< SynTreeType * > &outputList ) {
+template< typename SynTreeType, typename NodeType, template< typename, typename...> class Container, typename... Args >
+void buildList( const NodeType * firstNode, Container< SynTreeType *, Args... > &outputList ) {
 	SemanticError errors;
-	std::back_insert_iterator< std::list< SynTreeType * > > out( outputList );
+	std::back_insert_iterator< Container< SynTreeType *, Args... > > out( outputList );
 	const NodeType * cur = firstNode;
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 1b299967c6b00690fea8f261aa12be0524f73546)
+++ src/Parser/TypeData.cc	(revision b6fd7517dcd49accffbb4e92357f4fec8890b879)
@@ -385,31 +385,33 @@
 } // TypeData::print
 
-void buildForall( const DeclarationNode * firstNode, list< TypeDecl* > &outputList ) {
+template< typename ForallList >
+void buildForall( const DeclarationNode * firstNode, ForallList &outputList ) {
 	buildList( firstNode, outputList );
-	for ( list< TypeDecl* >::iterator i = outputList.begin(); i != outputList.end(); ++i ) {
-		if ( (*i)->get_kind() == TypeDecl::Any ) {
+	for ( typename ForallList::iterator i = outputList.begin(); i != outputList.end(); ++i ) {
+		TypeDecl * td = static_cast<TypeDecl*>(*i);
+		if ( td->get_kind() == TypeDecl::Any ) {
 			// add assertion parameters to `type' tyvars in reverse order
 			// add dtor:  void ^?{}(T *)
 			FunctionType * dtorType = new FunctionType( Type::Qualifiers(), false );
-			dtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), nullptr ) );
-			(*i)->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, nullptr, false, false ) );
+			dtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
+			td->get_assertions().push_front( new FunctionDecl( "^?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, dtorType, nullptr, false, false ) );
 
 			// add copy ctor:  void ?{}(T *, T)
 			FunctionType * copyCtorType = new FunctionType( Type::Qualifiers(), false );
-			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), nullptr ) );
-			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), nullptr ) );
-			(*i)->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, copyCtorType, nullptr, false, false ) );
+			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
+			copyCtorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
+			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, copyCtorType, nullptr, false, false ) );
 
 			// add default ctor:  void ?{}(T *)
 			FunctionType * ctorType = new FunctionType( Type::Qualifiers(), false );
-			ctorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), nullptr ) );
-			(*i)->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, nullptr, false, false ) );
+			ctorType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
+			td->get_assertions().push_front( new FunctionDecl( "?{}", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, ctorType, nullptr, false, false ) );
 
 			// add assignment operator:  T * ?=?(T *, T)
 			FunctionType * assignType = new FunctionType( Type::Qualifiers(), false );
-			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ) ), nullptr ) );
-			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), nullptr ) );
-			assignType->get_returnVals().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), (*i)->get_name(), *i ), nullptr ) );
-			(*i)->get_assertions().push_front( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, assignType, nullptr, false, false ) );
+			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new PointerType( Type::Qualifiers(), new TypeInstType( Type::Qualifiers(), td->get_name(), *i ) ), nullptr ) );
+			assignType->get_parameters().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
+			assignType->get_returnVals().push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, nullptr, new TypeInstType( Type::Qualifiers(), td->get_name(), *i ), nullptr ) );
+			td->get_assertions().push_front( new FunctionDecl( "?=?", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, assignType, nullptr, false, false ) );
 		} // if
 	} // for
@@ -515,5 +517,5 @@
 		// character types. The implementation shall define char to have the same range, representation, and behavior as
 		// either signed char or unsigned char.
-		static BasicType::Kind chartype[] = { BasicType::SignedChar, BasicType::UnsignedChar, BasicType::Char }; 
+		static BasicType::Kind chartype[] = { BasicType::SignedChar, BasicType::UnsignedChar, BasicType::Char };
 
 		if ( td->length != DeclarationNode::NoLength ) {
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 1b299967c6b00690fea8f261aa12be0524f73546)
+++ src/Parser/parser.cc	(revision b6fd7517dcd49accffbb4e92357f4fec8890b879)
@@ -1026,80 +1026,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   306,   306,   310,   317,   318,   319,   320,   321,   325,
-     326,   327,   331,   332,   336,   337,   341,   342,   346,   350,
-     351,   362,   364,   366,   367,   369,   374,   375,   381,   383,
-     385,   386,   387,   389,   390,   392,   394,   396,   405,   406,
-     412,   413,   417,   418,   422,   424,   426,   428,   430,   432,
-     434,   439,   441,   443,   447,   449,   453,   456,   458,   460,
-     465,   478,   480,   482,   484,   486,   488,   490,   492,   494,
-     496,   498,   505,   506,   512,   513,   514,   515,   519,   520,
-     527,   528,   530,   532,   537,   538,   540,   545,   546,   548,
-     553,   554,   556,   558,   560,   565,   566,   568,   573,   574,
-     579,   580,   585,   586,   591,   592,   597,   598,   603,   604,
-     607,   614,   619,   620,   628,   629,   633,   634,   635,   636,
-     637,   638,   639,   640,   641,   642,   643,   644,   654,   656,
-     661,   662,   667,   668,   674,   675,   681,   682,   683,   684,
-     685,   686,   687,   688,   689,   699,   706,   708,   718,   719,
-     724,   726,   732,   734,   738,   739,   744,   749,   752,   754,
-     756,   766,   768,   779,   780,   782,   786,   788,   792,   793,
-     798,   799,   803,   808,   809,   813,   815,   821,   822,   826,
-     828,   830,   832,   838,   839,   843,   845,   850,   852,   854,
-     859,   861,   866,   868,   872,   875,   879,   882,   886,   888,
-     890,   892,   897,   899,   901,   906,   908,   910,   912,   914,
-     919,   921,   923,   925,   930,   942,   943,   948,   950,   955,
-     959,   961,   963,   965,   967,   973,   974,   980,   981,   985,
-     986,   991,   993,   999,  1000,  1002,  1007,  1012,  1022,  1024,
-    1028,  1029,  1034,  1036,  1040,  1041,  1045,  1047,  1051,  1052,
-    1056,  1057,  1061,  1062,  1077,  1078,  1079,  1080,  1081,  1085,
-    1090,  1097,  1107,  1112,  1117,  1125,  1130,  1135,  1140,  1145,
-    1175,  1180,  1187,  1189,  1196,  1201,  1206,  1217,  1222,  1227,
-    1232,  1237,  1246,  1251,  1259,  1260,  1261,  1262,  1268,  1273,
-    1281,  1282,  1283,  1284,  1288,  1289,  1290,  1291,  1296,  1297,
-    1306,  1307,  1312,  1313,  1318,  1320,  1322,  1324,  1326,  1329,
-    1328,  1340,  1341,  1343,  1353,  1354,  1359,  1361,  1363,  1365,
-    1367,  1370,  1372,  1375,  1380,  1382,  1384,  1386,  1388,  1390,
-    1392,  1394,  1396,  1398,  1400,  1402,  1404,  1410,  1411,  1413,
-    1415,  1417,  1422,  1423,  1429,  1430,  1432,  1434,  1439,  1441,
-    1443,  1445,  1450,  1451,  1453,  1455,  1460,  1461,  1463,  1468,
-    1469,  1471,  1473,  1478,  1480,  1482,  1487,  1488,  1492,  1494,
-    1500,  1499,  1503,  1505,  1510,  1512,  1518,  1519,  1524,  1525,
-    1527,  1528,  1537,  1538,  1540,  1542,  1547,  1549,  1555,  1556,
-    1558,  1561,  1564,  1569,  1570,  1575,  1580,  1584,  1586,  1592,
-    1591,  1598,  1600,  1606,  1607,  1615,  1616,  1620,  1621,  1622,
-    1624,  1626,  1633,  1634,  1636,  1638,  1643,  1644,  1650,  1651,
-    1655,  1656,  1661,  1662,  1663,  1665,  1673,  1674,  1676,  1679,
-    1681,  1685,  1686,  1687,  1689,  1691,  1695,  1700,  1708,  1709,
-    1718,  1720,  1725,  1726,  1727,  1731,  1732,  1733,  1737,  1738,
-    1739,  1743,  1744,  1745,  1750,  1751,  1752,  1753,  1759,  1760,
-    1762,  1767,  1768,  1773,  1774,  1775,  1776,  1777,  1792,  1793,
-    1798,  1799,  1805,  1807,  1810,  1812,  1814,  1837,  1838,  1840,
-    1842,  1847,  1848,  1850,  1855,  1860,  1861,  1867,  1866,  1870,
-    1874,  1876,  1878,  1884,  1885,  1890,  1895,  1897,  1902,  1904,
-    1905,  1907,  1912,  1914,  1916,  1921,  1923,  1928,  1933,  1941,
-    1947,  1946,  1960,  1961,  1966,  1967,  1971,  1976,  1981,  1989,
-    1994,  2005,  2006,  2011,  2012,  2018,  2019,  2023,  2024,  2025,
-    2028,  2027,  2038,  2047,  2053,  2059,  2068,  2074,  2080,  2086,
-    2092,  2100,  2106,  2114,  2120,  2129,  2130,  2131,  2135,  2139,
-    2141,  2146,  2147,  2151,  2152,  2157,  2163,  2164,  2167,  2169,
-    2170,  2174,  2175,  2176,  2177,  2211,  2213,  2214,  2216,  2221,
-    2226,  2231,  2233,  2235,  2240,  2242,  2244,  2246,  2251,  2253,
-    2262,  2264,  2265,  2270,  2272,  2274,  2279,  2281,  2283,  2288,
-    2290,  2292,  2301,  2302,  2303,  2307,  2309,  2311,  2316,  2318,
-    2320,  2325,  2327,  2329,  2344,  2346,  2347,  2349,  2354,  2355,
-    2360,  2362,  2364,  2369,  2371,  2373,  2375,  2380,  2382,  2384,
-    2394,  2396,  2397,  2399,  2404,  2406,  2408,  2413,  2415,  2417,
-    2419,  2424,  2426,  2428,  2459,  2461,  2462,  2464,  2469,  2474,
-    2482,  2484,  2486,  2491,  2493,  2498,  2500,  2514,  2515,  2517,
-    2522,  2524,  2526,  2528,  2530,  2535,  2536,  2538,  2540,  2545,
-    2547,  2549,  2555,  2557,  2559,  2563,  2565,  2567,  2569,  2583,
-    2584,  2586,  2591,  2593,  2595,  2597,  2599,  2604,  2605,  2607,
-    2609,  2614,  2616,  2618,  2624,  2625,  2627,  2636,  2639,  2641,
-    2644,  2646,  2648,  2661,  2662,  2664,  2669,  2671,  2673,  2675,
-    2677,  2682,  2683,  2685,  2687,  2692,  2694,  2702,  2703,  2704,
-    2709,  2710,  2714,  2716,  2718,  2720,  2722,  2724,  2731,  2733,
-    2735,  2737,  2739,  2742,  2744,  2746,  2748,  2750,  2755,  2757,
-    2759,  2764,  2790,  2791,  2793,  2797,  2798,  2802,  2804,  2806,
-    2808,  2810,  2812,  2819,  2821,  2823,  2825,  2827,  2829,  2834,
-    2841,  2843,  2861,  2863,  2868,  2869
+       0,   305,   305,   309,   316,   317,   318,   319,   320,   324,
+     325,   326,   330,   331,   335,   336,   340,   341,   345,   349,
+     350,   361,   363,   365,   366,   368,   373,   374,   380,   382,
+     384,   386,   388,   390,   392,   394,   396,   398,   407,   408,
+     414,   415,   419,   420,   424,   425,   427,   429,   431,   433,
+     435,   440,   442,   444,   448,   450,   454,   457,   459,   461,
+     466,   479,   481,   483,   485,   487,   489,   491,   493,   495,
+     497,   499,   506,   507,   513,   514,   515,   516,   520,   521,
+     528,   529,   531,   533,   538,   539,   541,   546,   547,   549,
+     554,   555,   557,   559,   561,   566,   567,   569,   574,   575,
+     580,   581,   586,   587,   592,   593,   598,   599,   604,   605,
+     608,   615,   620,   621,   629,   630,   634,   635,   636,   637,
+     638,   639,   640,   641,   642,   643,   644,   645,   655,   657,
+     662,   663,   668,   669,   675,   676,   682,   683,   684,   685,
+     686,   687,   688,   689,   690,   700,   707,   709,   719,   720,
+     725,   727,   733,   735,   739,   740,   745,   750,   753,   755,
+     757,   767,   769,   780,   781,   783,   787,   789,   793,   794,
+     799,   800,   804,   809,   810,   814,   816,   822,   823,   827,
+     829,   831,   833,   839,   840,   844,   846,   851,   853,   855,
+     860,   862,   867,   869,   873,   876,   880,   883,   887,   889,
+     891,   893,   898,   900,   902,   907,   909,   911,   913,   915,
+     920,   922,   924,   926,   931,   943,   944,   949,   951,   956,
+     960,   962,   964,   966,   968,   974,   975,   981,   982,   986,
+     987,   992,   994,  1000,  1001,  1003,  1008,  1013,  1023,  1025,
+    1029,  1030,  1035,  1037,  1041,  1042,  1046,  1048,  1052,  1053,
+    1057,  1058,  1062,  1063,  1078,  1079,  1080,  1081,  1082,  1086,
+    1091,  1098,  1108,  1113,  1118,  1126,  1131,  1136,  1141,  1146,
+    1176,  1181,  1188,  1190,  1197,  1202,  1207,  1218,  1223,  1228,
+    1233,  1238,  1247,  1252,  1260,  1261,  1262,  1263,  1269,  1274,
+    1282,  1283,  1284,  1285,  1289,  1290,  1291,  1292,  1297,  1298,
+    1307,  1308,  1313,  1314,  1319,  1321,  1323,  1325,  1327,  1330,
+    1329,  1341,  1342,  1344,  1354,  1355,  1360,  1362,  1364,  1366,
+    1368,  1371,  1373,  1376,  1381,  1383,  1385,  1387,  1389,  1391,
+    1393,  1395,  1397,  1399,  1401,  1403,  1405,  1411,  1412,  1414,
+    1416,  1418,  1423,  1424,  1430,  1431,  1433,  1435,  1440,  1442,
+    1444,  1446,  1451,  1452,  1454,  1456,  1461,  1462,  1464,  1469,
+    1470,  1472,  1474,  1479,  1481,  1483,  1488,  1489,  1493,  1495,
+    1501,  1500,  1504,  1506,  1511,  1513,  1519,  1520,  1525,  1526,
+    1528,  1529,  1538,  1539,  1541,  1543,  1548,  1550,  1556,  1557,
+    1559,  1562,  1565,  1570,  1571,  1576,  1581,  1585,  1587,  1593,
+    1592,  1599,  1601,  1607,  1608,  1616,  1617,  1621,  1622,  1623,
+    1625,  1627,  1634,  1635,  1637,  1639,  1644,  1645,  1651,  1652,
+    1656,  1657,  1662,  1663,  1664,  1666,  1674,  1675,  1677,  1680,
+    1682,  1686,  1687,  1688,  1690,  1692,  1696,  1701,  1709,  1710,
+    1719,  1721,  1726,  1727,  1728,  1732,  1733,  1734,  1738,  1739,
+    1740,  1744,  1745,  1746,  1751,  1752,  1753,  1754,  1760,  1761,
+    1763,  1768,  1769,  1774,  1775,  1776,  1777,  1778,  1793,  1794,
+    1799,  1800,  1806,  1808,  1811,  1813,  1815,  1838,  1839,  1841,
+    1843,  1848,  1849,  1851,  1856,  1861,  1862,  1868,  1867,  1871,
+    1875,  1877,  1879,  1885,  1886,  1891,  1896,  1898,  1903,  1905,
+    1906,  1908,  1913,  1915,  1917,  1922,  1924,  1929,  1934,  1942,
+    1948,  1947,  1961,  1962,  1967,  1968,  1972,  1977,  1982,  1990,
+    1995,  2006,  2007,  2012,  2013,  2019,  2020,  2024,  2025,  2026,
+    2029,  2028,  2039,  2048,  2054,  2060,  2069,  2075,  2081,  2087,
+    2093,  2101,  2107,  2115,  2121,  2130,  2131,  2132,  2136,  2140,
+    2142,  2147,  2148,  2152,  2153,  2158,  2164,  2165,  2168,  2170,
+    2171,  2175,  2176,  2177,  2178,  2212,  2214,  2215,  2217,  2222,
+    2227,  2232,  2234,  2236,  2241,  2243,  2245,  2247,  2252,  2254,
+    2263,  2265,  2266,  2271,  2273,  2275,  2280,  2282,  2284,  2289,
+    2291,  2293,  2302,  2303,  2304,  2308,  2310,  2312,  2317,  2319,
+    2321,  2326,  2328,  2330,  2345,  2347,  2348,  2350,  2355,  2356,
+    2361,  2363,  2365,  2370,  2372,  2374,  2376,  2381,  2383,  2385,
+    2395,  2397,  2398,  2400,  2405,  2407,  2409,  2414,  2416,  2418,
+    2420,  2425,  2427,  2429,  2460,  2462,  2463,  2465,  2470,  2475,
+    2483,  2485,  2487,  2492,  2494,  2499,  2501,  2515,  2516,  2518,
+    2523,  2525,  2527,  2529,  2531,  2536,  2537,  2539,  2541,  2546,
+    2548,  2550,  2556,  2558,  2560,  2564,  2566,  2568,  2570,  2584,
+    2585,  2587,  2592,  2594,  2596,  2598,  2600,  2605,  2606,  2608,
+    2610,  2615,  2617,  2619,  2625,  2626,  2628,  2637,  2640,  2642,
+    2645,  2647,  2649,  2662,  2663,  2665,  2670,  2672,  2674,  2676,
+    2678,  2683,  2684,  2686,  2688,  2693,  2695,  2703,  2704,  2705,
+    2710,  2711,  2715,  2717,  2719,  2721,  2723,  2725,  2732,  2734,
+    2736,  2738,  2740,  2743,  2745,  2747,  2749,  2751,  2756,  2758,
+    2760,  2765,  2791,  2792,  2794,  2798,  2799,  2803,  2805,  2807,
+    2809,  2811,  2813,  2820,  2822,  2824,  2826,  2828,  2830,  2835,
+    2842,  2844,  2862,  2864,  2869,  2870
 };
 #endif
@@ -4851,5 +4851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
+#line 305 "parser.yy"
     { typedefTable.enterScope(); }
     break;
@@ -4858,5 +4858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 310 "parser.yy"
+#line 309 "parser.yy"
     { typedefTable.leaveScope(); }
     break;
@@ -4865,9 +4865,16 @@
 
 /* Line 1806 of yacc.c  */
+#line 316 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 5:
+
+/* Line 1806 of yacc.c  */
 #line 317 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 5:
+    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 6:
 
 /* Line 1806 of yacc.c  */
@@ -4876,5 +4883,5 @@
     break;
 
-  case 6:
+  case 7:
 
 /* Line 1806 of yacc.c  */
@@ -4883,15 +4890,8 @@
     break;
 
-  case 7:
+  case 8:
 
 /* Line 1806 of yacc.c  */
 #line 320 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 8:
-
-/* Line 1806 of yacc.c  */
-#line 321 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4900,5 +4900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 345 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
     break;
@@ -4907,5 +4907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 350 "parser.yy"
+#line 349 "parser.yy"
     { (yyval.str) = (yyvsp[(1) - (1)].tok); }
     break;
@@ -4914,5 +4914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 352 "parser.yy"
+#line 351 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
@@ -4925,5 +4925,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 363 "parser.yy"
+#line 362 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4932,5 +4932,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
+#line 364 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4939,5 +4939,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
+#line 367 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -4946,5 +4946,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
+#line 369 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -4953,5 +4953,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 380 "parser.yy"
+#line 379 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -4960,5 +4960,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 382 "parser.yy"
+#line 381 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -4967,19 +4967,40 @@
 
 /* Line 1806 of yacc.c  */
-#line 384 "parser.yy"
+#line 383 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
+  case 30:
+
+/* Line 1806 of yacc.c  */
+#line 385 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 31:
+
+/* Line 1806 of yacc.c  */
+#line 387 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en), build_constantInteger( *(yyvsp[(2) - (2)].tok) ) ) ); }
+    break;
+
   case 32:
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 389 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
+  case 33:
+
+/* Line 1806 of yacc.c  */
+#line 391 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
   case 34:
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 393 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -4988,5 +5009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
+#line 395 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -4995,5 +5016,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 395 "parser.yy"
+#line 397 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5002,5 +5023,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 397 "parser.yy"
+#line 399 "parser.yy"
     {
 			Token fn;
@@ -5013,5 +5034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 407 "parser.yy"
+#line 409 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5020,5 +5041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
+#line 414 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5027,20 +5048,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 420 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 423 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
   case 45:
 
 /* Line 1806 of yacc.c  */
-#line 425 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(2) - (2)].en), build_varref( (yyvsp[(1) - (2)].tok) ) ) ); }
+#line 426 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ), maybeMoveBuild<Expression>( (yyvsp[(2) - (2)].en) ) ) ); }
     break;
 
@@ -5048,6 +5062,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 427 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(4) - (6)].en), build_varref( (yyvsp[(1) - (6)].tok) ) ) ); }
+#line 428 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (6)].tok) ) ), build_tuple( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5055,6 +5069,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 429 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
+#line 430 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
 
@@ -5062,6 +5076,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 431 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 432 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5069,6 +5083,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 433 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
+#line 434 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
 
@@ -5076,6 +5090,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 435 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
+#line 436 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5083,6 +5097,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
-    { (yyval.tok) = (yyvsp[(1) - (2)].tok); }
+#line 441 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -5090,6 +5104,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
-    { (yyval.tok) = (yyvsp[(1) - (2)].tok); }
+#line 443 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -5097,6 +5111,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 444 "parser.yy"
-    { (yyval.tok) = (yyvsp[(1) - (2)].tok); }
+#line 445 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -5104,5 +5118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 457 "parser.yy"
+#line 458 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5111,5 +5125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 459 "parser.yy"
+#line 460 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5118,5 +5132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 461 "parser.yy"
+#line 462 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5125,5 +5139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 467 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5143,5 +5157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 479 "parser.yy"
+#line 480 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5150,5 +5164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 481 "parser.yy"
+#line 482 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5157,5 +5171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 483 "parser.yy"
+#line 484 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5164,5 +5178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 486 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5171,5 +5185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 488 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5178,5 +5192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
+#line 490 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5185,5 +5199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 492 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5192,5 +5206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5199,5 +5213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5206,5 +5220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 498 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5213,5 +5227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 500 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5220,5 +5234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 506 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5227,5 +5241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 506 "parser.yy"
+#line 507 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5234,5 +5248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 512 "parser.yy"
+#line 513 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5241,5 +5255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5248,5 +5262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 514 "parser.yy"
+#line 515 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5255,5 +5269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 515 "parser.yy"
+#line 516 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5262,5 +5276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 521 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5269,5 +5283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5276,5 +5290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 531 "parser.yy"
+#line 532 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5283,5 +5297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 533 "parser.yy"
+#line 534 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5290,5 +5304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
+#line 540 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5297,5 +5311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 541 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5304,5 +5318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 547 "parser.yy"
+#line 548 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5311,5 +5325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 549 "parser.yy"
+#line 550 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5318,5 +5332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 555 "parser.yy"
+#line 556 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5325,5 +5339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 557 "parser.yy"
+#line 558 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5332,5 +5346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 560 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5339,5 +5353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5346,5 +5360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
+#line 568 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5353,5 +5367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 569 "parser.yy"
+#line 570 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5360,5 +5374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 575 "parser.yy"
+#line 576 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5367,5 +5381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 581 "parser.yy"
+#line 582 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5374,5 +5388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
+#line 588 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5381,5 +5395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5388,5 +5402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+#line 600 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5395,5 +5409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
+#line 606 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5402,5 +5416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5409,5 +5423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
+#line 622 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5416,5 +5430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 628 "parser.yy"
+#line 629 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5423,5 +5437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 633 "parser.yy"
+#line 634 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5430,5 +5444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 634 "parser.yy"
+#line 635 "parser.yy"
     { (yyval.op) = OperKinds::AtAssn; }
     break;
@@ -5437,5 +5451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 635 "parser.yy"
+#line 636 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5444,5 +5458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
+#line 637 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5451,5 +5465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 637 "parser.yy"
+#line 638 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5458,5 +5472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 638 "parser.yy"
+#line 639 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5465,5 +5479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 639 "parser.yy"
+#line 640 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5472,5 +5486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 641 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5479,5 +5493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 641 "parser.yy"
+#line 642 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5486,5 +5500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 642 "parser.yy"
+#line 643 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5493,5 +5507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 644 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5500,5 +5514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 644 "parser.yy"
+#line 645 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5507,5 +5521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 655 "parser.yy"
+#line 656 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5514,5 +5528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 657 "parser.yy"
+#line 658 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5521,5 +5535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 663 "parser.yy"
+#line 664 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5528,5 +5542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
+#line 670 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5535,5 +5549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 674 "parser.yy"
+#line 675 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5542,5 +5556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 683 "parser.yy"
+#line 684 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5549,5 +5563,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 690 "parser.yy"
+#line 691 "parser.yy"
     {
 			Token fn;
@@ -5560,5 +5574,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 700 "parser.yy"
+#line 701 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5569,5 +5583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
+#line 708 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
@@ -5576,5 +5590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 714 "parser.yy"
+#line 715 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     break;
@@ -5583,5 +5597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 720 "parser.yy"
+#line 721 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5590,5 +5604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
+#line 726 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5597,5 +5611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 727 "parser.yy"
+#line 728 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -5608,5 +5622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
+#line 734 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5615,5 +5629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 740 "parser.yy"
+#line 741 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5622,5 +5636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 745 "parser.yy"
+#line 746 "parser.yy"
     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5629,5 +5643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 751 "parser.yy"
+#line 752 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
@@ -5636,5 +5650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 753 "parser.yy"
+#line 754 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
@@ -5643,5 +5657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
+#line 756 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5650,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 757 "parser.yy"
+#line 758 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5665,5 +5679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 768 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5672,5 +5686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+#line 770 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5682,5 +5696,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 779 "parser.yy"
+#line 780 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5689,5 +5703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 781 "parser.yy"
+#line 782 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5696,5 +5710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 786 "parser.yy"
+#line 787 "parser.yy"
     { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
@@ -5703,5 +5717,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 788 "parser.yy"
+#line 789 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
@@ -5710,5 +5724,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 792 "parser.yy"
+#line 793 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5717,5 +5731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+#line 794 "parser.yy"
     { (yyval.sn) = new StatementNode( build_default() ); }
     break;
@@ -5724,5 +5738,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 799 "parser.yy"
+#line 800 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5731,5 +5745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 803 "parser.yy"
+#line 804 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5738,5 +5752,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
+#line 809 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5745,5 +5759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 814 "parser.yy"
+#line 815 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5752,5 +5766,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 817 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
     break;
@@ -5759,5 +5773,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+#line 822 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5766,5 +5780,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
+#line 828 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5773,5 +5787,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 829 "parser.yy"
+#line 830 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5780,5 +5794,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5787,5 +5801,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
@@ -5794,5 +5808,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 838 "parser.yy"
+#line 839 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5801,5 +5815,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+#line 845 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5808,5 +5822,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 846 "parser.yy"
+#line 847 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5815,5 +5829,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
+#line 852 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5822,5 +5836,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 853 "parser.yy"
+#line 854 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
     break;
@@ -5829,5 +5843,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 856 "parser.yy"
     { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
@@ -5836,5 +5850,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
+#line 861 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5843,5 +5857,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
+#line 863 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5850,5 +5864,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 867 "parser.yy"
+#line 868 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
@@ -5857,5 +5871,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 871 "parser.yy"
+#line 872 "parser.yy"
     { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5864,5 +5878,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+#line 875 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
     break;
@@ -5871,5 +5885,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 878 "parser.yy"
+#line 879 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
     break;
@@ -5878,5 +5892,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 881 "parser.yy"
+#line 882 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5885,5 +5899,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
+#line 886 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
     break;
@@ -5892,5 +5906,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+#line 888 "parser.yy"
     { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5899,5 +5913,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 889 "parser.yy"
+#line 890 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5906,5 +5920,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 892 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5913,5 +5927,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 893 "parser.yy"
+#line 894 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
@@ -5920,5 +5934,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 899 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     break;
@@ -5927,5 +5941,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 901 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     break;
@@ -5934,5 +5948,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 902 "parser.yy"
+#line 903 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     break;
@@ -5941,5 +5955,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -5948,5 +5962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 911 "parser.yy"
+#line 912 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -5955,5 +5969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 913 "parser.yy"
+#line 914 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -5962,5 +5976,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+#line 916 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -5969,5 +5983,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
+#line 921 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -5976,5 +5990,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+#line 923 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -5983,5 +5997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 924 "parser.yy"
+#line 925 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -5990,5 +6004,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 926 "parser.yy"
+#line 927 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -5997,5 +6011,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+#line 932 "parser.yy"
     {
 			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
@@ -6006,5 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 944 "parser.yy"
+#line 945 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6016,5 +6030,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 949 "parser.yy"
+#line 950 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6023,5 +6037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
+#line 952 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6033,5 +6047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 961 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     break;
@@ -6040,5 +6054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 962 "parser.yy"
+#line 963 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     break;
@@ -6047,5 +6061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+#line 965 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
     break;
@@ -6054,5 +6068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 966 "parser.yy"
+#line 967 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
     break;
@@ -6061,5 +6075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
+#line 969 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
     break;
@@ -6068,5 +6082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 973 "parser.yy"
+#line 974 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6075,5 +6089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 975 "parser.yy"
+#line 976 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6082,5 +6096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
+#line 981 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6089,5 +6103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+#line 988 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6096,5 +6110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 992 "parser.yy"
+#line 993 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6103,5 +6117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 994 "parser.yy"
+#line 995 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6110,5 +6124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 999 "parser.yy"
+#line 1000 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6117,5 +6131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
+#line 1002 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6124,5 +6138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1003 "parser.yy"
+#line 1004 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6131,5 +6145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1008 "parser.yy"
+#line 1009 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6141,5 +6155,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1013 "parser.yy"
+#line 1014 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6151,5 +6165,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1023 "parser.yy"
+#line 1024 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6158,5 +6172,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+#line 1031 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6165,5 +6179,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1035 "parser.yy"
+#line 1036 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6172,16 +6186,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1042 "parser.yy"
+#line 1043 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
   case 250:
-
-/* Line 1806 of yacc.c  */
-#line 1056 "parser.yy"
-    {}
-    break;
-
-  case 251:
 
 /* Line 1806 of yacc.c  */
@@ -6190,8 +6197,15 @@
     break;
 
+  case 251:
+
+/* Line 1806 of yacc.c  */
+#line 1058 "parser.yy"
+    {}
+    break;
+
   case 259:
 
 /* Line 1806 of yacc.c  */
-#line 1086 "parser.yy"
+#line 1087 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6203,5 +6217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1093 "parser.yy"
+#line 1094 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6213,5 +6227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1098 "parser.yy"
+#line 1099 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6223,5 +6237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1108 "parser.yy"
+#line 1109 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6233,5 +6247,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1113 "parser.yy"
+#line 1114 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6243,5 +6257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1118 "parser.yy"
+#line 1119 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6253,5 +6267,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1126 "parser.yy"
+#line 1127 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6263,5 +6277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1131 "parser.yy"
+#line 1132 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6273,5 +6287,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1136 "parser.yy"
+#line 1137 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6283,5 +6297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1141 "parser.yy"
+#line 1142 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6293,5 +6307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1146 "parser.yy"
+#line 1147 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6303,5 +6317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1177 "parser.yy"
+#line 1178 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6312,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1181 "parser.yy"
+#line 1182 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6321,5 +6335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1188 "parser.yy"
+#line 1189 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6328,5 +6342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+#line 1193 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6335,5 +6349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1198 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6345,5 +6359,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1202 "parser.yy"
+#line 1203 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6355,5 +6369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1207 "parser.yy"
+#line 1208 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6365,5 +6379,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1218 "parser.yy"
+#line 1219 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6375,5 +6389,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1223 "parser.yy"
+#line 1224 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6385,5 +6399,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1228 "parser.yy"
+#line 1229 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6395,5 +6409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1233 "parser.yy"
+#line 1234 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6405,5 +6419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1238 "parser.yy"
+#line 1239 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6415,5 +6429,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1247 "parser.yy"
+#line 1248 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6425,5 +6439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1252 "parser.yy"
+#line 1253 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6435,5 +6449,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1269 "parser.yy"
+#line 1270 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6445,5 +6459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1274 "parser.yy"
+#line 1275 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6455,5 +6469,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1296 "parser.yy"
+#line 1297 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6462,5 +6476,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1308 "parser.yy"
+#line 1309 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6469,5 +6483,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1319 "parser.yy"
+#line 1320 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6476,5 +6490,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1321 "parser.yy"
+#line 1322 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6483,5 +6497,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1323 "parser.yy"
+#line 1324 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6490,5 +6504,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1325 "parser.yy"
+#line 1326 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6497,5 +6511,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
+#line 1328 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6504,5 +6518,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1330 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6513,5 +6527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+#line 1334 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6523,5 +6537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6530,5 +6544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6537,5 +6551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1355 "parser.yy"
+#line 1356 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6544,5 +6558,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+#line 1361 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6551,5 +6565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+#line 1363 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6558,5 +6572,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+#line 1365 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6565,5 +6579,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1367 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6572,5 +6586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1369 "parser.yy"
+#line 1370 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
     break;
@@ -6579,5 +6593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1371 "parser.yy"
+#line 1372 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6586,5 +6600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+#line 1375 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
     break;
@@ -6593,5 +6607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+#line 1377 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6600,5 +6614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+#line 1382 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6607,5 +6621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+#line 1384 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6614,5 +6628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+#line 1386 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6621,5 +6635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6628,5 +6642,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
     break;
@@ -6635,5 +6649,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+#line 1392 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
     break;
@@ -6642,5 +6656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+#line 1394 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
     break;
@@ -6649,5 +6663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
+#line 1396 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
     break;
@@ -6656,5 +6670,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+#line 1398 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6663,5 +6677,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+#line 1400 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6670,5 +6684,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+#line 1402 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
     break;
@@ -6677,5 +6691,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+#line 1404 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
     break;
@@ -6684,5 +6698,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+#line 1406 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6691,5 +6705,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1412 "parser.yy"
+#line 1413 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6698,5 +6712,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1414 "parser.yy"
+#line 1415 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6705,5 +6719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+#line 1417 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6712,5 +6726,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1419 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6719,5 +6733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
+#line 1425 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6726,5 +6740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
+#line 1432 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6733,5 +6747,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1433 "parser.yy"
+#line 1434 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6740,5 +6754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1435 "parser.yy"
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6747,5 +6761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+#line 1441 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6754,5 +6768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
+#line 1443 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6761,5 +6775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1444 "parser.yy"
+#line 1445 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6768,5 +6782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
+#line 1447 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6775,5 +6789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1452 "parser.yy"
+#line 1453 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6782,5 +6796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+#line 1455 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6789,5 +6803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+#line 1457 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6796,5 +6810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+#line 1463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6803,5 +6817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1464 "parser.yy"
+#line 1465 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6810,5 +6824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+#line 1471 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6817,5 +6831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1472 "parser.yy"
+#line 1473 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6824,5 +6838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1474 "parser.yy"
+#line 1475 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6831,5 +6845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1480 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6838,5 +6852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
+#line 1482 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6845,5 +6859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1483 "parser.yy"
+#line 1484 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6852,5 +6866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
+#line 1494 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), nullptr, nullptr, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6859,5 +6873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
+#line 1496 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6869,5 +6883,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1500 "parser.yy"
+#line 1501 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6876,5 +6890,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
+#line 1503 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), nullptr, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -6883,5 +6897,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
+#line 1505 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), nullptr, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -6890,5 +6904,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1506 "parser.yy"
+#line 1507 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -6897,5 +6911,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
+#line 1512 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -6904,5 +6918,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1513 "parser.yy"
+#line 1514 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -6911,5 +6925,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
+#line 1519 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6918,5 +6932,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1520 "parser.yy"
+#line 1521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -6925,5 +6939,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+#line 1527 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -6932,5 +6946,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1529 "parser.yy"
+#line 1530 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -6943,5 +6957,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1539 "parser.yy"
+#line 1540 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6950,5 +6964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1541 "parser.yy"
+#line 1542 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -6957,5 +6971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1543 "parser.yy"
+#line 1544 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -6964,5 +6978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1548 "parser.yy"
+#line 1549 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6971,5 +6985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1550 "parser.yy"
+#line 1551 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -6978,5 +6992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
+#line 1556 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -6985,5 +6999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1557 "parser.yy"
+#line 1558 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -6992,5 +7006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1561 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -6999,5 +7013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1563 "parser.yy"
+#line 1564 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7006,5 +7020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+#line 1570 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7013,5 +7027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
+#line 1572 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7020,5 +7034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
+#line 1577 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7027,5 +7041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1585 "parser.yy"
+#line 1586 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7034,5 +7048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1587 "parser.yy"
+#line 1588 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7044,5 +7058,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1592 "parser.yy"
+#line 1593 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7051,5 +7065,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1594 "parser.yy"
+#line 1595 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7058,5 +7072,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1599 "parser.yy"
+#line 1600 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7065,5 +7079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
+#line 1602 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7072,5 +7086,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1606 "parser.yy"
+#line 1607 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7079,5 +7093,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
+#line 1609 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7086,5 +7100,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1615 "parser.yy"
+#line 1616 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7093,5 +7107,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1623 "parser.yy"
+#line 1624 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7100,5 +7114,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1625 "parser.yy"
+#line 1626 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7107,5 +7121,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1627 "parser.yy"
+#line 1628 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7114,5 +7128,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1635 "parser.yy"
+#line 1636 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7121,5 +7135,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1637 "parser.yy"
+#line 1638 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7128,5 +7142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
+#line 1640 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7135,5 +7149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1645 "parser.yy"
+#line 1646 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7142,5 +7156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1650 "parser.yy"
+#line 1651 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7149,5 +7163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1657 "parser.yy"
+#line 1658 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7156,5 +7170,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1664 "parser.yy"
+#line 1665 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7163,5 +7177,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1666 "parser.yy"
+#line 1667 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7170,5 +7184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1675 "parser.yy"
+#line 1676 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7177,5 +7191,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1678 "parser.yy"
+#line 1679 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7184,5 +7198,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
+#line 1681 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7191,5 +7205,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1690 "parser.yy"
+#line 1691 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7198,5 +7212,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1696 "parser.yy"
+#line 1697 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7208,5 +7222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1701 "parser.yy"
+#line 1702 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7218,5 +7232,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1710 "parser.yy"
+#line 1711 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7225,5 +7239,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1719 "parser.yy"
+#line 1720 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7232,5 +7246,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
+#line 1722 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7239,5 +7253,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+#line 1747 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7246,5 +7260,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1754 "parser.yy"
+#line 1755 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7253,5 +7267,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1759 "parser.yy"
+#line 1760 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7260,5 +7274,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
+#line 1762 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7267,5 +7281,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1763 "parser.yy"
+#line 1764 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7274,5 +7288,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
+#line 1768 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7281,5 +7295,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1768 "parser.yy"
+#line 1769 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7288,5 +7302,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1773 "parser.yy"
+#line 1774 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7295,5 +7309,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
+#line 1776 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7302,5 +7316,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1776 "parser.yy"
+#line 1777 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7309,5 +7323,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1778 "parser.yy"
+#line 1779 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7316,5 +7330,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1794 "parser.yy"
+#line 1795 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
@@ -7323,5 +7337,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
+#line 1801 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -7330,5 +7344,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+#line 1807 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7337,5 +7351,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1809 "parser.yy"
+#line 1810 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7344,5 +7358,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1811 "parser.yy"
+#line 1812 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7351,5 +7365,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1813 "parser.yy"
+#line 1814 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
@@ -7358,5 +7372,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+#line 1816 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7365,5 +7379,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+#line 1840 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7372,5 +7386,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1841 "parser.yy"
+#line 1842 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7379,5 +7393,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1843 "parser.yy"
+#line 1844 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7386,5 +7400,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1849 "parser.yy"
+#line 1850 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7393,5 +7407,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
+#line 1852 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7400,5 +7414,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1857 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7407,5 +7421,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1863 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7414,5 +7428,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
+#line 1868 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7421,5 +7435,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1869 "parser.yy"
+#line 1870 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7428,5 +7442,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+#line 1876 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Otype; }
     break;
@@ -7435,5 +7449,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
+#line 1878 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7442,5 +7456,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
+#line 1880 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7449,5 +7463,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
+#line 1885 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7456,5 +7470,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1886 "parser.yy"
+#line 1887 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7463,5 +7477,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1892 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7473,5 +7487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1896 "parser.yy"
+#line 1897 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7480,5 +7494,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+#line 1899 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7487,5 +7501,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1903 "parser.yy"
+#line 1904 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
@@ -7494,5 +7508,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1906 "parser.yy"
+#line 1907 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
@@ -7501,5 +7515,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1908 "parser.yy"
+#line 1909 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7508,5 +7522,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+#line 1914 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7515,5 +7529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1915 "parser.yy"
+#line 1916 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7522,5 +7536,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1917 "parser.yy"
+#line 1918 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7529,5 +7543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1922 "parser.yy"
+#line 1923 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7536,5 +7550,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1924 "parser.yy"
+#line 1925 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7543,5 +7557,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1929 "parser.yy"
+#line 1930 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7553,5 +7567,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1934 "parser.yy"
+#line 1935 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7563,5 +7577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1942 "parser.yy"
+#line 1943 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7573,5 +7587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+#line 1948 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7583,5 +7597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1952 "parser.yy"
+#line 1953 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7594,5 +7608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1962 "parser.yy"
+#line 1963 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7601,5 +7615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+#line 1973 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7611,5 +7625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1977 "parser.yy"
+#line 1978 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7621,5 +7635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1982 "parser.yy"
+#line 1983 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7631,5 +7645,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
+#line 1991 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7641,5 +7655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+#line 1996 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7651,5 +7665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2005 "parser.yy"
+#line 2006 "parser.yy"
     {}
     break;
@@ -7658,5 +7672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2007 "parser.yy"
+#line 2008 "parser.yy"
     { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
     break;
@@ -7665,5 +7679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+#line 2014 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7672,5 +7686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2018 "parser.yy"
+#line 2019 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7679,5 +7693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2026 "parser.yy"
+#line 2027 "parser.yy"
     {}
     break;
@@ -7686,5 +7700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2028 "parser.yy"
+#line 2029 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7696,5 +7710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2033 "parser.yy"
+#line 2034 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7707,5 +7721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+#line 2040 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7718,5 +7732,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2054 "parser.yy"
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7729,5 +7743,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2060 "parser.yy"
+#line 2061 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7740,5 +7754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2069 "parser.yy"
+#line 2070 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7751,5 +7765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2075 "parser.yy"
+#line 2076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7762,5 +7776,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2081 "parser.yy"
+#line 2082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7773,5 +7787,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2087 "parser.yy"
+#line 2088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7784,5 +7798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2093 "parser.yy"
+#line 2094 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7795,5 +7809,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2101 "parser.yy"
+#line 2102 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7806,5 +7820,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
+#line 2108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7817,5 +7831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2115 "parser.yy"
+#line 2116 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7828,5 +7842,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+#line 2122 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7839,5 +7853,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+#line 2137 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7846,5 +7860,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2141 "parser.yy"
+#line 2142 "parser.yy"
     { delete (yyvsp[(3) - (5)].str); }
     break;
@@ -7853,5 +7867,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2146 "parser.yy"
+#line 2147 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7860,5 +7874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2153 "parser.yy"
+#line 2154 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7867,5 +7881,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+#line 2160 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7874,5 +7888,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2170 "parser.yy"
+#line 2171 "parser.yy"
     { delete (yyvsp[(3) - (4)].en); }
     break;
@@ -7881,16 +7895,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2174 "parser.yy"
+#line 2175 "parser.yy"
     { delete (yyvsp[(1) - (1)].tok); }
     break;
 
   case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2175 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
-  case 563:
 
 /* Line 1806 of yacc.c  */
@@ -7899,5 +7906,5 @@
     break;
 
-  case 564:
+  case 563:
 
 /* Line 1806 of yacc.c  */
@@ -7906,8 +7913,15 @@
     break;
 
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2178 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
   case 565:
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2213 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7916,5 +7930,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2215 "parser.yy"
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7923,5 +7937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2218 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7930,5 +7944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+#line 2223 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -7940,5 +7954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+#line 2228 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7947,5 +7961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2232 "parser.yy"
+#line 2233 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -7954,5 +7968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -7961,5 +7975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7968,5 +7982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2241 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7975,5 +7989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7982,5 +7996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+#line 2246 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7989,5 +8003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2247 "parser.yy"
+#line 2248 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7996,5 +8010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8003,5 +8017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8010,5 +8024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+#line 2264 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8017,5 +8031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
+#line 2267 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8024,5 +8038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8031,5 +8045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2273 "parser.yy"
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8038,5 +8052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2275 "parser.yy"
+#line 2276 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8045,5 +8059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2280 "parser.yy"
+#line 2281 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8052,5 +8066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2282 "parser.yy"
+#line 2283 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8059,5 +8073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2284 "parser.yy"
+#line 2285 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8066,5 +8080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
+#line 2290 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8073,5 +8087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2291 "parser.yy"
+#line 2292 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8080,5 +8094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+#line 2294 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8087,5 +8101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2308 "parser.yy"
+#line 2309 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8094,5 +8108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2310 "parser.yy"
+#line 2311 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8101,5 +8115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2312 "parser.yy"
+#line 2313 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8108,5 +8122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2317 "parser.yy"
+#line 2318 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8115,5 +8129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2319 "parser.yy"
+#line 2320 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8122,5 +8136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2321 "parser.yy"
+#line 2322 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8129,5 +8143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2326 "parser.yy"
+#line 2327 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8136,5 +8150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
+#line 2329 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8143,5 +8157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+#line 2331 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8150,5 +8164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8157,5 +8171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+#line 2349 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8164,5 +8178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8171,5 +8185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
+#line 2357 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8178,5 +8192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8185,5 +8199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2363 "parser.yy"
+#line 2364 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8192,5 +8206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
+#line 2366 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8199,5 +8213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8206,5 +8220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2372 "parser.yy"
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8213,5 +8227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2374 "parser.yy"
+#line 2375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8220,5 +8234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
+#line 2377 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8227,5 +8241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2381 "parser.yy"
+#line 2382 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8234,5 +8248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2383 "parser.yy"
+#line 2384 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8241,5 +8255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
+#line 2386 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8248,5 +8262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2395 "parser.yy"
+#line 2396 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8255,5 +8269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8262,5 +8276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8269,5 +8283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2405 "parser.yy"
+#line 2406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8276,5 +8290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2407 "parser.yy"
+#line 2408 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8283,5 +8297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
+#line 2410 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8290,5 +8304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2414 "parser.yy"
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8297,5 +8311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2416 "parser.yy"
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8304,5 +8318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2418 "parser.yy"
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8311,5 +8325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+#line 2421 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8318,5 +8332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+#line 2426 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8325,5 +8339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2427 "parser.yy"
+#line 2428 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8332,5 +8346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2429 "parser.yy"
+#line 2430 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8339,5 +8353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8346,5 +8360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2463 "parser.yy"
+#line 2464 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8353,5 +8367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2466 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8360,5 +8374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+#line 2471 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8370,5 +8384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2475 "parser.yy"
+#line 2476 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8380,5 +8394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+#line 2484 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8387,5 +8401,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2485 "parser.yy"
+#line 2486 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8394,5 +8408,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+#line 2488 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8401,5 +8415,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2492 "parser.yy"
+#line 2493 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8408,5 +8422,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
+#line 2495 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8415,5 +8429,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
+#line 2500 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8422,5 +8436,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+#line 2502 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8429,5 +8443,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
+#line 2517 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8436,5 +8450,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+#line 2519 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8443,5 +8457,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
+#line 2524 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8450,5 +8464,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+#line 2526 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8457,5 +8471,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+#line 2528 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8464,5 +8478,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+#line 2530 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8471,5 +8485,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+#line 2532 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8478,5 +8492,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+#line 2538 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8485,5 +8499,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
+#line 2540 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8492,5 +8506,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+#line 2542 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8499,5 +8513,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
+#line 2547 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
@@ -8506,5 +8520,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
+#line 2549 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8513,5 +8527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
+#line 2551 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8520,5 +8534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
+#line 2557 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8527,5 +8541,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
+#line 2559 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8534,5 +8548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
+#line 2565 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8541,5 +8555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2566 "parser.yy"
+#line 2567 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8548,5 +8562,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2568 "parser.yy"
+#line 2569 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8555,5 +8569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+#line 2571 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8562,5 +8576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
+#line 2586 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8569,5 +8583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8576,5 +8590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+#line 2593 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8583,5 +8597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
+#line 2595 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8590,5 +8604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
+#line 2597 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8597,5 +8611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+#line 2599 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8604,5 +8618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8611,5 +8625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2606 "parser.yy"
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8618,5 +8632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
+#line 2609 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8625,5 +8639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2610 "parser.yy"
+#line 2611 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8632,5 +8646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2615 "parser.yy"
+#line 2616 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
@@ -8639,5 +8653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2617 "parser.yy"
+#line 2618 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8646,5 +8660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8653,5 +8667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
+#line 2627 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8660,5 +8674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2637 "parser.yy"
+#line 2638 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8667,5 +8681,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2640 "parser.yy"
+#line 2641 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8674,5 +8688,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
+#line 2643 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8681,5 +8695,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
+#line 2646 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8688,5 +8702,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
+#line 2648 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8695,5 +8709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
+#line 2650 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -8702,5 +8716,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8709,5 +8723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8716,5 +8730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
+#line 2671 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8723,5 +8737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2672 "parser.yy"
+#line 2673 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8730,5 +8744,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2674 "parser.yy"
+#line 2675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8737,5 +8751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
+#line 2677 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8744,5 +8758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
+#line 2679 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8751,5 +8765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2684 "parser.yy"
+#line 2685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8758,5 +8772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
+#line 2687 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8765,5 +8779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+#line 2689 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8772,5 +8786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2693 "parser.yy"
+#line 2694 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8779,5 +8793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2695 "parser.yy"
+#line 2696 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8786,5 +8800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
+#line 2706 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8793,5 +8807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
+#line 2716 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8800,5 +8814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+#line 2718 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8807,5 +8821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
+#line 2720 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8814,5 +8828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8821,5 +8835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8828,5 +8842,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+#line 2726 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8835,5 +8849,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
+#line 2733 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8842,5 +8856,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
+#line 2735 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8849,5 +8863,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2736 "parser.yy"
+#line 2737 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8856,5 +8870,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2738 "parser.yy"
+#line 2739 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8863,5 +8877,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2740 "parser.yy"
+#line 2741 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8870,5 +8884,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+#line 2744 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8877,5 +8891,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+#line 2746 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8884,5 +8898,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2747 "parser.yy"
+#line 2748 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8891,5 +8905,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2749 "parser.yy"
+#line 2750 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8898,5 +8912,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2751 "parser.yy"
+#line 2752 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8905,5 +8919,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+#line 2757 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8912,5 +8926,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+#line 2759 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8919,5 +8933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2763 "parser.yy"
+#line 2764 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -8926,5 +8940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2765 "parser.yy"
+#line 2766 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -8933,5 +8947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
+#line 2793 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8940,5 +8954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2803 "parser.yy"
+#line 2804 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8947,5 +8961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2806 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8954,5 +8968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
+#line 2808 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8961,5 +8975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
+#line 2810 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8968,5 +8982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
+#line 2812 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8975,5 +8989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2813 "parser.yy"
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8982,5 +8996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
+#line 2821 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -8989,5 +9003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2822 "parser.yy"
+#line 2823 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -8996,5 +9010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
+#line 2825 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9003,5 +9017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2826 "parser.yy"
+#line 2827 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9010,5 +9024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2828 "parser.yy"
+#line 2829 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9017,5 +9031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2830 "parser.yy"
+#line 2831 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9024,5 +9038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2835 "parser.yy"
+#line 2836 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9031,5 +9045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2842 "parser.yy"
+#line 2843 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
@@ -9038,5 +9052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
+#line 2845 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
@@ -9045,5 +9059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2868 "parser.yy"
+#line 2869 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9052,5 +9066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2870 "parser.yy"
+#line 2871 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9059,5 +9073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9062 "Parser/parser.cc"
+#line 9076 "Parser/parser.cc"
       default: break;
     }
@@ -9290,5 +9304,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2873 "parser.yy"
+#line 2874 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 1b299967c6b00690fea8f261aa12be0524f73546)
+++ src/Parser/parser.yy	(revision b6fd7517dcd49accffbb4e92357f4fec8890b879)
@@ -199,6 +199,5 @@
 
 %type<decl> field_declaration field_declaration_list field_declarator field_declaring_list
-%type<en> field field_list
-%type<tok> field_name
+%type<en> field field_list field_name
 
 %type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
@@ -384,8 +383,11 @@
 		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
 	| postfix_expression REALFRACTIONconstant			// CFA, tuple index
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_constantInteger( *$2 ) ) ); }
 	| postfix_expression ARROW no_attr_identifier
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
+			{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
 	| postfix_expression ICR
 	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
@@ -421,26 +423,25 @@
 field:													// CFA, tuple field selector
 	field_name
+	| REALDECIMALconstant field
+		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
+	| REALDECIMALconstant '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_constantInteger( *$1 ) ), build_tuple( $4 ) ) ); }
+	| field_name '.' field
+		{ $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
+	| field_name '.' '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
+	| field_name ARROW field
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
+	| field_name ARROW '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
+	;
+
+field_name: // ... use $2
+	INTEGERconstant	fraction_constants
+		{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| FLOATINGconstant fraction_constants
+		{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| no_attr_identifier fraction_constants
 		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
-	| REALDECIMALconstant field
-		{ $$ = new ExpressionNode( build_fieldSel( $2, build_varref( $1 ) ) ); }
-	| REALDECIMALconstant '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_fieldSel( $4, build_varref( $1 ) ) ); }
-	| field_name '.' field
-		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
-	| field_name '.' '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
-	| field_name ARROW field
-		{ $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
-	| field_name ARROW '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
-	;
-
-field_name:
-	INTEGERconstant	fraction_constants
-		{ $$ = $1; }
-	| FLOATINGconstant fraction_constants
-		{ $$ = $1; }
-	| no_attr_identifier fraction_constants
-		{ $$ = $1; }
 	;
 
