Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/ExpressionNode.cc	(revision a1e67ddc023331e04cc5481931be1d0923efc441)
@@ -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 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/ParseNode.h	(revision a1e67ddc023331e04cc5481931be1d0923efc441)
@@ -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 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/TypeData.cc	(revision a1e67ddc023331e04cc5481931be1d0923efc441)
@@ -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 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/parser.cc	(revision a1e67ddc023331e04cc5481931be1d0923efc441)
@@ -1023,80 +1023,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   302,   302,   306,   313,   314,   315,   319,   320,   321,
-     325,   326,   330,   331,   335,   336,   340,   344,   345,   356,
-     358,   360,   362,   367,   368,   374,   378,   380,   381,   382,
-     384,   385,   387,   389,   391,   400,   401,   407,   408,   412,
-     413,   417,   421,   423,   425,   427,   432,   434,   438,   441,
-     443,   445,   450,   463,   465,   467,   469,   471,   473,   475,
-     477,   479,   481,   483,   490,   491,   497,   498,   499,   500,
-     504,   505,   507,   512,   513,   515,   517,   522,   523,   525,
-     530,   531,   533,   538,   539,   541,   543,   545,   550,   551,
-     553,   558,   559,   564,   565,   570,   571,   576,   577,   582,
-     583,   588,   589,   592,   594,   599,   604,   605,   607,   613,
-     614,   618,   619,   620,   621,   622,   623,   624,   625,   626,
-     627,   628,   629,   635,   637,   639,   641,   646,   647,   652,
-     653,   659,   660,   666,   667,   668,   669,   670,   671,   672,
-     673,   674,   684,   691,   693,   703,   704,   709,   711,   717,
-     719,   723,   724,   729,   734,   737,   739,   741,   751,   753,
-     764,   765,   767,   771,   773,   777,   778,   783,   784,   788,
-     793,   794,   798,   800,   806,   807,   811,   813,   815,   817,
-     823,   824,   828,   830,   835,   837,   839,   844,   846,   851,
-     853,   857,   860,   864,   867,   871,   873,   875,   877,   882,
-     884,   886,   891,   893,   895,   897,   899,   904,   906,   908,
-     910,   915,   927,   928,   933,   935,   940,   944,   946,   948,
-     950,   952,   958,   959,   965,   966,   970,   971,   976,   978,
-     984,   985,   987,   992,   997,  1007,  1009,  1013,  1014,  1019,
-    1021,  1025,  1026,  1030,  1032,  1036,  1037,  1041,  1042,  1046,
-    1047,  1062,  1063,  1064,  1065,  1066,  1070,  1075,  1082,  1092,
-    1097,  1102,  1110,  1115,  1120,  1125,  1130,  1138,  1160,  1165,
-    1172,  1174,  1181,  1186,  1191,  1202,  1207,  1212,  1217,  1222,
-    1231,  1236,  1244,  1245,  1246,  1247,  1253,  1258,  1266,  1267,
-    1268,  1269,  1273,  1274,  1275,  1276,  1281,  1282,  1291,  1292,
-    1297,  1298,  1303,  1305,  1307,  1309,  1311,  1314,  1313,  1325,
-    1326,  1328,  1338,  1339,  1344,  1346,  1348,  1350,  1352,  1355,
-    1357,  1360,  1365,  1367,  1369,  1371,  1373,  1375,  1377,  1379,
-    1381,  1383,  1385,  1387,  1389,  1395,  1396,  1398,  1400,  1402,
-    1407,  1408,  1414,  1415,  1417,  1419,  1424,  1426,  1428,  1430,
-    1435,  1436,  1438,  1440,  1445,  1446,  1448,  1453,  1454,  1456,
-    1458,  1463,  1465,  1467,  1472,  1473,  1477,  1479,  1485,  1484,
-    1488,  1490,  1495,  1497,  1503,  1504,  1509,  1510,  1512,  1513,
-    1522,  1523,  1525,  1527,  1532,  1534,  1540,  1541,  1543,  1546,
-    1549,  1554,  1555,  1560,  1565,  1569,  1571,  1577,  1576,  1583,
-    1585,  1591,  1592,  1600,  1601,  1605,  1606,  1607,  1609,  1611,
-    1618,  1619,  1621,  1623,  1628,  1629,  1635,  1636,  1640,  1641,
-    1646,  1647,  1648,  1650,  1658,  1659,  1661,  1664,  1666,  1670,
-    1671,  1672,  1674,  1676,  1680,  1685,  1693,  1694,  1703,  1705,
-    1710,  1711,  1712,  1716,  1717,  1718,  1722,  1723,  1724,  1728,
-    1729,  1730,  1735,  1736,  1737,  1738,  1744,  1745,  1747,  1752,
-    1753,  1758,  1759,  1760,  1761,  1762,  1777,  1778,  1783,  1784,
-    1790,  1792,  1795,  1797,  1799,  1822,  1823,  1825,  1827,  1832,
-    1833,  1835,  1840,  1845,  1846,  1852,  1851,  1855,  1859,  1861,
-    1863,  1869,  1870,  1875,  1880,  1882,  1887,  1889,  1890,  1892,
-    1897,  1899,  1901,  1906,  1908,  1913,  1918,  1926,  1932,  1931,
-    1945,  1946,  1951,  1952,  1956,  1961,  1966,  1974,  1979,  1990,
-    1991,  1996,  1997,  2003,  2004,  2008,  2009,  2010,  2013,  2012,
-    2023,  2032,  2038,  2044,  2053,  2059,  2065,  2071,  2077,  2085,
-    2091,  2099,  2105,  2114,  2115,  2116,  2120,  2124,  2126,  2131,
-    2132,  2136,  2137,  2142,  2148,  2149,  2152,  2154,  2155,  2159,
-    2160,  2161,  2162,  2196,  2198,  2199,  2201,  2206,  2211,  2216,
-    2218,  2220,  2225,  2227,  2229,  2231,  2236,  2238,  2247,  2249,
-    2250,  2255,  2257,  2259,  2264,  2266,  2268,  2273,  2275,  2277,
-    2286,  2287,  2288,  2292,  2294,  2296,  2301,  2303,  2305,  2310,
-    2312,  2314,  2329,  2331,  2332,  2334,  2339,  2340,  2345,  2347,
-    2349,  2354,  2356,  2358,  2360,  2365,  2367,  2369,  2379,  2381,
-    2382,  2384,  2389,  2391,  2393,  2398,  2400,  2402,  2404,  2409,
-    2411,  2413,  2444,  2446,  2447,  2449,  2454,  2459,  2467,  2469,
-    2471,  2476,  2478,  2483,  2485,  2499,  2500,  2502,  2507,  2509,
-    2511,  2513,  2515,  2520,  2521,  2523,  2525,  2530,  2532,  2534,
-    2540,  2542,  2544,  2548,  2550,  2552,  2554,  2568,  2569,  2571,
-    2576,  2578,  2580,  2582,  2584,  2589,  2590,  2592,  2594,  2599,
-    2601,  2603,  2609,  2610,  2612,  2621,  2624,  2626,  2629,  2631,
-    2633,  2646,  2647,  2649,  2654,  2656,  2658,  2660,  2662,  2667,
-    2668,  2670,  2672,  2677,  2679,  2687,  2688,  2689,  2694,  2695,
-    2699,  2701,  2703,  2705,  2707,  2709,  2716,  2718,  2720,  2722,
-    2724,  2727,  2729,  2731,  2733,  2735,  2740,  2742,  2744,  2749,
-    2775,  2776,  2778,  2782,  2783,  2787,  2789,  2791,  2793,  2795,
-    2797,  2804,  2806,  2808,  2810,  2812,  2814,  2819,  2824,  2826,
-    2828,  2846,  2848,  2853,  2854
+       0,   301,   301,   305,   312,   313,   314,   318,   319,   320,
+     324,   325,   329,   330,   334,   335,   339,   343,   344,   355,
+     357,   359,   361,   366,   367,   373,   377,   379,   381,   383,
+     385,   387,   389,   391,   393,   402,   403,   409,   410,   414,
+     415,   419,   422,   424,   426,   428,   433,   436,   441,   444,
+     446,   448,   453,   466,   468,   470,   472,   474,   476,   478,
+     480,   482,   484,   486,   493,   494,   500,   501,   502,   503,
+     507,   508,   510,   515,   516,   518,   520,   525,   526,   528,
+     533,   534,   536,   541,   542,   544,   546,   548,   553,   554,
+     556,   561,   562,   567,   568,   573,   574,   579,   580,   585,
+     586,   591,   592,   595,   597,   602,   607,   608,   610,   616,
+     617,   621,   622,   623,   624,   625,   626,   627,   628,   629,
+     630,   631,   632,   638,   640,   642,   644,   649,   650,   655,
+     656,   662,   663,   669,   670,   671,   672,   673,   674,   675,
+     676,   677,   687,   694,   696,   706,   707,   712,   714,   720,
+     722,   726,   727,   732,   737,   740,   742,   744,   754,   756,
+     767,   768,   770,   774,   776,   780,   781,   786,   787,   791,
+     796,   797,   801,   803,   809,   810,   814,   816,   818,   820,
+     826,   827,   831,   833,   838,   840,   842,   847,   849,   854,
+     856,   860,   863,   867,   870,   874,   876,   878,   880,   885,
+     887,   889,   894,   896,   898,   900,   902,   907,   909,   911,
+     913,   918,   930,   931,   936,   938,   943,   947,   949,   951,
+     953,   955,   961,   962,   968,   969,   973,   974,   979,   981,
+     987,   988,   990,   995,  1000,  1010,  1012,  1016,  1017,  1022,
+    1024,  1028,  1029,  1033,  1035,  1039,  1040,  1044,  1045,  1049,
+    1050,  1065,  1066,  1067,  1068,  1069,  1073,  1078,  1085,  1095,
+    1100,  1105,  1113,  1118,  1123,  1128,  1133,  1141,  1163,  1168,
+    1175,  1177,  1184,  1189,  1194,  1205,  1210,  1215,  1220,  1225,
+    1234,  1239,  1247,  1248,  1249,  1250,  1256,  1261,  1269,  1270,
+    1271,  1272,  1276,  1277,  1278,  1279,  1284,  1285,  1294,  1295,
+    1300,  1301,  1306,  1308,  1310,  1312,  1314,  1317,  1316,  1328,
+    1329,  1331,  1341,  1342,  1347,  1349,  1351,  1353,  1355,  1358,
+    1360,  1363,  1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,
+    1384,  1386,  1388,  1390,  1392,  1398,  1399,  1401,  1403,  1405,
+    1410,  1411,  1417,  1418,  1420,  1422,  1427,  1429,  1431,  1433,
+    1438,  1439,  1441,  1443,  1448,  1449,  1451,  1456,  1457,  1459,
+    1461,  1466,  1468,  1470,  1475,  1476,  1480,  1482,  1488,  1487,
+    1491,  1493,  1498,  1500,  1506,  1507,  1512,  1513,  1515,  1516,
+    1525,  1526,  1528,  1530,  1535,  1537,  1543,  1544,  1546,  1549,
+    1552,  1557,  1558,  1563,  1568,  1572,  1574,  1580,  1579,  1586,
+    1588,  1594,  1595,  1603,  1604,  1608,  1609,  1610,  1612,  1614,
+    1621,  1622,  1624,  1626,  1631,  1632,  1638,  1639,  1643,  1644,
+    1649,  1650,  1651,  1653,  1661,  1662,  1664,  1667,  1669,  1673,
+    1674,  1675,  1677,  1679,  1683,  1688,  1696,  1697,  1706,  1708,
+    1713,  1714,  1715,  1719,  1720,  1721,  1725,  1726,  1727,  1731,
+    1732,  1733,  1738,  1739,  1740,  1741,  1747,  1748,  1750,  1755,
+    1756,  1761,  1762,  1763,  1764,  1765,  1780,  1781,  1786,  1787,
+    1793,  1795,  1798,  1800,  1802,  1825,  1826,  1828,  1830,  1835,
+    1836,  1838,  1843,  1848,  1849,  1855,  1854,  1858,  1862,  1864,
+    1866,  1872,  1873,  1878,  1883,  1885,  1890,  1892,  1893,  1895,
+    1900,  1902,  1904,  1909,  1911,  1916,  1921,  1929,  1935,  1934,
+    1948,  1949,  1954,  1955,  1959,  1964,  1969,  1977,  1982,  1993,
+    1994,  1999,  2000,  2006,  2007,  2011,  2012,  2013,  2016,  2015,
+    2026,  2035,  2041,  2047,  2056,  2062,  2068,  2074,  2080,  2088,
+    2094,  2102,  2108,  2117,  2118,  2119,  2123,  2127,  2129,  2134,
+    2135,  2139,  2140,  2145,  2151,  2152,  2155,  2157,  2158,  2162,
+    2163,  2164,  2165,  2199,  2201,  2202,  2204,  2209,  2214,  2219,
+    2221,  2223,  2228,  2230,  2232,  2234,  2239,  2241,  2250,  2252,
+    2253,  2258,  2260,  2262,  2267,  2269,  2271,  2276,  2278,  2280,
+    2289,  2290,  2291,  2295,  2297,  2299,  2304,  2306,  2308,  2313,
+    2315,  2317,  2332,  2334,  2335,  2337,  2342,  2343,  2348,  2350,
+    2352,  2357,  2359,  2361,  2363,  2368,  2370,  2372,  2382,  2384,
+    2385,  2387,  2392,  2394,  2396,  2401,  2403,  2405,  2407,  2412,
+    2414,  2416,  2447,  2449,  2450,  2452,  2457,  2462,  2470,  2472,
+    2474,  2479,  2481,  2486,  2488,  2502,  2503,  2505,  2510,  2512,
+    2514,  2516,  2518,  2523,  2524,  2526,  2528,  2533,  2535,  2537,
+    2543,  2545,  2547,  2551,  2553,  2555,  2557,  2571,  2572,  2574,
+    2579,  2581,  2583,  2585,  2587,  2592,  2593,  2595,  2597,  2602,
+    2604,  2606,  2612,  2613,  2615,  2624,  2627,  2629,  2632,  2634,
+    2636,  2649,  2650,  2652,  2657,  2659,  2661,  2663,  2665,  2670,
+    2671,  2673,  2675,  2680,  2682,  2690,  2691,  2692,  2697,  2698,
+    2702,  2704,  2706,  2708,  2710,  2712,  2719,  2721,  2723,  2725,
+    2727,  2730,  2732,  2734,  2736,  2738,  2743,  2745,  2747,  2752,
+    2778,  2779,  2781,  2785,  2786,  2790,  2792,  2794,  2796,  2798,
+    2800,  2807,  2809,  2811,  2813,  2815,  2817,  2822,  2827,  2829,
+    2831,  2849,  2851,  2856,  2857
 };
 #endif
@@ -4977,5 +4977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 302 "parser.yy"
+#line 301 "parser.yy"
     { typedefTable.enterScope(); }
     break;
@@ -4984,5 +4984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
+#line 305 "parser.yy"
     { typedefTable.leaveScope(); }
     break;
@@ -4991,19 +4991,19 @@
 
 /* Line 1806 of yacc.c  */
+#line 312 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
+    break;
+
+  case 5:
+
+/* Line 1806 of yacc.c  */
 #line 313 "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  */
 #line 314 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
-    break;
-
-  case 6:
-
-/* Line 1806 of yacc.c  */
-#line 315 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5012,5 +5012,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
+#line 339 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
     break;
@@ -5019,5 +5019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 343 "parser.yy"
     { (yyval.str) = (yyvsp[(1) - (1)].tok); }
     break;
@@ -5026,5 +5026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 345 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
@@ -5037,5 +5037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 357 "parser.yy"
+#line 356 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5044,5 +5044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 359 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5051,5 +5051,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 361 "parser.yy"
+#line 360 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5058,5 +5058,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 363 "parser.yy"
+#line 362 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -5065,5 +5065,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 373 "parser.yy"
+#line 372 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5072,5 +5072,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 375 "parser.yy"
+#line 374 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5079,19 +5079,40 @@
 
 /* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+#line 378 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
+  case 27:
+
+/* Line 1806 of yacc.c  */
+#line 380 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 28:
+
+/* Line 1806 of yacc.c  */
+#line 382 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_constantInteger( *(yyvsp[(3) - (3)].tok) ) ) ); }
+    break;
+
   case 29:
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 384 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
+  case 30:
+
+/* Line 1806 of yacc.c  */
+#line 386 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
   case 31:
 
 /* Line 1806 of yacc.c  */
-#line 386 "parser.yy"
+#line 388 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5100,5 +5121,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 390 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5107,5 +5128,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 390 "parser.yy"
+#line 392 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5114,5 +5135,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 392 "parser.yy"
+#line 394 "parser.yy"
     {
 			Token fn;
@@ -5125,5 +5146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 402 "parser.yy"
+#line 404 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5132,5 +5153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 407 "parser.yy"
+#line 409 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5139,41 +5160,48 @@
 
 /* Line 1806 of yacc.c  */
-#line 413 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 41:
-
-/* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
+  case 42:
+
+/* Line 1806 of yacc.c  */
+#line 423 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
+    break;
+
+  case 43:
+
+/* Line 1806 of yacc.c  */
+#line 425 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 44:
+
+/* Line 1806 of yacc.c  */
+#line 427 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
+    break;
+
+  case 45:
+
+/* Line 1806 of yacc.c  */
+#line 429 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 46:
+
+/* Line 1806 of yacc.c  */
+#line 434 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 42:
-
-/* Line 1806 of yacc.c  */
-#line 422 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
-    break;
-
-  case 43:
-
-/* Line 1806 of yacc.c  */
-#line 424 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
-    break;
-
-  case 44:
-
-/* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
-    break;
-
-  case 45:
-
-/* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
+  case 47:
+
+/* Line 1806 of yacc.c  */
+#line 437 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
 
@@ -5181,5 +5209,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
+#line 445 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5188,5 +5216,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 444 "parser.yy"
+#line 447 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5195,5 +5223,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 446 "parser.yy"
+#line 449 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5202,5 +5230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
+#line 454 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5220,5 +5248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
+#line 467 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5227,5 +5255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 469 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5234,5 +5262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
+#line 471 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5241,5 +5269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
+#line 473 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5248,5 +5276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
+#line 475 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5255,5 +5283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
+#line 477 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5262,5 +5290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
+#line 479 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5269,5 +5297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 478 "parser.yy"
+#line 481 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5276,5 +5304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 480 "parser.yy"
+#line 483 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5283,5 +5311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 482 "parser.yy"
+#line 485 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5290,5 +5318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 484 "parser.yy"
+#line 487 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5297,5 +5325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 490 "parser.yy"
+#line 493 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5304,5 +5332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5311,5 +5339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 500 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5318,5 +5346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 498 "parser.yy"
+#line 501 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5325,5 +5353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5332,5 +5360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
+#line 503 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5339,5 +5367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 506 "parser.yy"
+#line 509 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5346,5 +5374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
+#line 511 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5353,5 +5381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 514 "parser.yy"
+#line 517 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5360,5 +5388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
+#line 519 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5367,5 +5395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
+#line 521 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5374,5 +5402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 524 "parser.yy"
+#line 527 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5381,5 +5409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 526 "parser.yy"
+#line 529 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5388,5 +5416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 532 "parser.yy"
+#line 535 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5395,5 +5423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 534 "parser.yy"
+#line 537 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5402,5 +5430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 540 "parser.yy"
+#line 543 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5409,5 +5437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 542 "parser.yy"
+#line 545 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5416,5 +5444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 544 "parser.yy"
+#line 547 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5423,5 +5451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 546 "parser.yy"
+#line 549 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5430,5 +5458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 552 "parser.yy"
+#line 555 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5437,5 +5465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 554 "parser.yy"
+#line 557 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5444,5 +5472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 560 "parser.yy"
+#line 563 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5451,5 +5479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 566 "parser.yy"
+#line 569 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5458,5 +5486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 572 "parser.yy"
+#line 575 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5465,5 +5493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+#line 581 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5472,5 +5500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 584 "parser.yy"
+#line 587 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5479,5 +5507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 590 "parser.yy"
+#line 593 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5486,5 +5514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 596 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5493,5 +5521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+#line 598 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5500,5 +5528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 606 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5507,5 +5535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 611 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5514,5 +5542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5521,5 +5549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
+#line 621 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5528,5 +5556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
+#line 622 "parser.yy"
     { (yyval.op) = OperKinds::AtAssn; }
     break;
@@ -5535,5 +5563,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
+#line 623 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5542,5 +5570,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
+#line 624 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5549,5 +5577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
+#line 625 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5556,5 +5584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
+#line 626 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5563,5 +5591,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
+#line 627 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5570,5 +5598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 625 "parser.yy"
+#line 628 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5577,5 +5605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 626 "parser.yy"
+#line 629 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5584,5 +5612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 630 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5591,5 +5619,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 628 "parser.yy"
+#line 631 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5598,5 +5626,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 629 "parser.yy"
+#line 632 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5605,5 +5633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
+#line 639 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple() ); }
     break;
@@ -5612,5 +5640,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 638 "parser.yy"
+#line 641 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
@@ -5619,5 +5647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 643 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5626,5 +5654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 642 "parser.yy"
+#line 645 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5633,5 +5661,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 648 "parser.yy"
+#line 651 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5640,5 +5668,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 654 "parser.yy"
+#line 657 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5647,5 +5675,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 659 "parser.yy"
+#line 662 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5654,5 +5682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 668 "parser.yy"
+#line 671 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5661,5 +5689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 675 "parser.yy"
+#line 678 "parser.yy"
     {
 			Token fn;
@@ -5672,5 +5700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 685 "parser.yy"
+#line 688 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5681,5 +5709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 692 "parser.yy"
+#line 695 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
@@ -5688,5 +5716,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 699 "parser.yy"
+#line 702 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     break;
@@ -5695,5 +5723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 705 "parser.yy"
+#line 708 "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;
@@ -5702,5 +5730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 713 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5709,5 +5737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
+#line 715 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -5720,5 +5748,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 718 "parser.yy"
+#line 721 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5727,5 +5755,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
+#line 728 "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;
@@ -5734,5 +5762,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 730 "parser.yy"
+#line 733 "parser.yy"
     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5741,5 +5769,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 736 "parser.yy"
+#line 739 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
@@ -5748,5 +5776,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 738 "parser.yy"
+#line 741 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
@@ -5755,5 +5783,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 740 "parser.yy"
+#line 743 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5762,5 +5790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 742 "parser.yy"
+#line 745 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5777,5 +5805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 752 "parser.yy"
+#line 755 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5784,5 +5812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
+#line 757 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5794,5 +5822,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 764 "parser.yy"
+#line 767 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5801,5 +5829,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 766 "parser.yy"
+#line 769 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5808,5 +5836,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
+#line 774 "parser.yy"
     { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
@@ -5815,5 +5843,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 776 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
@@ -5822,5 +5850,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 777 "parser.yy"
+#line 780 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5829,5 +5857,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 781 "parser.yy"
     { (yyval.sn) = new StatementNode( build_default() ); }
     break;
@@ -5836,5 +5864,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 784 "parser.yy"
+#line 787 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5843,5 +5871,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 788 "parser.yy"
+#line 791 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5850,5 +5878,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+#line 796 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5857,5 +5885,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 799 "parser.yy"
+#line 802 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
@@ -5864,5 +5892,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 801 "parser.yy"
+#line 804 "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;
@@ -5871,5 +5899,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
+#line 809 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5878,5 +5906,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
+#line 815 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5885,5 +5913,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 814 "parser.yy"
+#line 817 "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;
@@ -5892,5 +5920,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 819 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5899,5 +5927,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 818 "parser.yy"
+#line 821 "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;
@@ -5906,5 +5934,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5913,5 +5941,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 829 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5920,5 +5948,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5927,5 +5955,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 836 "parser.yy"
+#line 839 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5934,5 +5962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 838 "parser.yy"
+#line 841 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
     break;
@@ -5941,5 +5969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
+#line 843 "parser.yy"
     { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
@@ -5948,5 +5976,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+#line 848 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5955,5 +5983,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
+#line 850 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5962,5 +5990,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 852 "parser.yy"
+#line 855 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
@@ -5969,5 +5997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 856 "parser.yy"
+#line 859 "parser.yy"
     { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5976,5 +6004,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 862 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
     break;
@@ -5983,5 +6011,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+#line 866 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
     break;
@@ -5990,5 +6018,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 869 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
@@ -5997,5 +6025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 870 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
     break;
@@ -6004,5 +6032,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
+#line 875 "parser.yy"
     { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -6011,5 +6039,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+#line 877 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -6018,5 +6046,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 876 "parser.yy"
+#line 879 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -6025,5 +6053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 878 "parser.yy"
+#line 881 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
@@ -6032,5 +6060,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
+#line 886 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     break;
@@ -6039,5 +6067,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
+#line 888 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     break;
@@ -6046,5 +6074,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+#line 890 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     break;
@@ -6053,5 +6081,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
+#line 897 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -6060,5 +6088,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 899 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -6067,5 +6095,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 901 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
@@ -6074,5 +6102,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 903 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
@@ -6081,5 +6109,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
+#line 908 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -6088,5 +6116,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -6095,5 +6123,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 912 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
@@ -6102,5 +6130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 911 "parser.yy"
+#line 914 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
@@ -6109,5 +6137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 916 "parser.yy"
+#line 919 "parser.yy"
     {
 			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
@@ -6118,5 +6146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
+#line 932 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6128,5 +6156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 934 "parser.yy"
+#line 937 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6135,5 +6163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 936 "parser.yy"
+#line 939 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6145,5 +6173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 945 "parser.yy"
+#line 948 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     break;
@@ -6152,5 +6180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 947 "parser.yy"
+#line 950 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     break;
@@ -6159,5 +6187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 949 "parser.yy"
+#line 952 "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;
@@ -6166,5 +6194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
+#line 954 "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;
@@ -6173,5 +6201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 953 "parser.yy"
+#line 956 "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;
@@ -6180,5 +6208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 958 "parser.yy"
+#line 961 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6187,5 +6215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 963 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6194,5 +6222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 965 "parser.yy"
+#line 968 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6201,5 +6229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
+#line 975 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6208,5 +6236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 977 "parser.yy"
+#line 980 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6215,5 +6243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
+#line 982 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6222,5 +6250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 984 "parser.yy"
+#line 987 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6229,5 +6257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 986 "parser.yy"
+#line 989 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6236,5 +6264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 991 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6243,5 +6271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 993 "parser.yy"
+#line 996 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6253,5 +6281,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 998 "parser.yy"
+#line 1001 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6263,5 +6291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1008 "parser.yy"
+#line 1011 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6270,5 +6298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1015 "parser.yy"
+#line 1018 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6277,5 +6305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1020 "parser.yy"
+#line 1023 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6284,5 +6312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1027 "parser.yy"
+#line 1030 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6291,5 +6319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1041 "parser.yy"
+#line 1044 "parser.yy"
     {}
     break;
@@ -6298,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1042 "parser.yy"
+#line 1045 "parser.yy"
     {}
     break;
@@ -6305,5 +6333,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1071 "parser.yy"
+#line 1074 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6315,5 +6343,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1078 "parser.yy"
+#line 1081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6325,5 +6353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1083 "parser.yy"
+#line 1086 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6335,5 +6363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1093 "parser.yy"
+#line 1096 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6345,5 +6373,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1098 "parser.yy"
+#line 1101 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6355,5 +6383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1103 "parser.yy"
+#line 1106 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6365,5 +6393,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1111 "parser.yy"
+#line 1114 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6375,5 +6403,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1116 "parser.yy"
+#line 1119 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6385,5 +6413,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1121 "parser.yy"
+#line 1124 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6395,5 +6423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1126 "parser.yy"
+#line 1129 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6405,5 +6433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1131 "parser.yy"
+#line 1134 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6415,5 +6443,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1139 "parser.yy"
+#line 1142 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6424,5 +6452,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+#line 1165 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6433,5 +6461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+#line 1169 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6442,5 +6470,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1173 "parser.yy"
+#line 1176 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6449,5 +6477,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1177 "parser.yy"
+#line 1180 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6456,5 +6484,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1182 "parser.yy"
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6466,5 +6494,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1187 "parser.yy"
+#line 1190 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6476,5 +6504,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+#line 1195 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6486,5 +6514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1203 "parser.yy"
+#line 1206 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6496,5 +6524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1208 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6506,5 +6534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1213 "parser.yy"
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6516,5 +6544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1218 "parser.yy"
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6526,5 +6554,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1223 "parser.yy"
+#line 1226 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6536,5 +6564,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1232 "parser.yy"
+#line 1235 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6546,5 +6574,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1237 "parser.yy"
+#line 1240 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6556,5 +6584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1254 "parser.yy"
+#line 1257 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6566,5 +6594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1259 "parser.yy"
+#line 1262 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6576,5 +6604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1281 "parser.yy"
+#line 1284 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6583,5 +6611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1293 "parser.yy"
+#line 1296 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6590,5 +6618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1304 "parser.yy"
+#line 1307 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6597,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1306 "parser.yy"
+#line 1309 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6604,5 +6632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1308 "parser.yy"
+#line 1311 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6611,5 +6639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1310 "parser.yy"
+#line 1313 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6618,5 +6646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1312 "parser.yy"
+#line 1315 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6625,5 +6653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+#line 1317 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6634,5 +6662,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1318 "parser.yy"
+#line 1321 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6644,5 +6672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
+#line 1330 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6651,5 +6679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1332 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6658,5 +6686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1340 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6665,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+#line 1348 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6672,5 +6700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1347 "parser.yy"
+#line 1350 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6679,5 +6707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1352 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6686,5 +6714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1351 "parser.yy"
+#line 1354 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6693,5 +6721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
+#line 1357 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
     break;
@@ -6700,5 +6728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
+#line 1359 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6707,5 +6735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1359 "parser.yy"
+#line 1362 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
     break;
@@ -6714,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1361 "parser.yy"
+#line 1364 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6721,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1369 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6728,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
+#line 1371 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6735,5 +6763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
+#line 1373 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6742,5 +6770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+#line 1375 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6749,5 +6777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+#line 1377 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
     break;
@@ -6756,5 +6784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+#line 1379 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
     break;
@@ -6763,5 +6791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+#line 1381 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
     break;
@@ -6770,5 +6798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
+#line 1383 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
     break;
@@ -6777,5 +6805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
+#line 1385 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6784,5 +6812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1384 "parser.yy"
+#line 1387 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6791,5 +6819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1386 "parser.yy"
+#line 1389 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
     break;
@@ -6798,5 +6826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
+#line 1391 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
     break;
@@ -6805,5 +6833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
+#line 1393 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6812,5 +6840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+#line 1400 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6819,5 +6847,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+#line 1402 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6826,5 +6854,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+#line 1404 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6833,5 +6861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+#line 1406 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6840,5 +6868,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+#line 1412 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6847,5 +6875,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+#line 1419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6854,5 +6882,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1421 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6861,5 +6889,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+#line 1423 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6868,5 +6896,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
+#line 1428 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6875,5 +6903,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
+#line 1430 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6882,5 +6910,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
+#line 1432 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6889,5 +6917,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
+#line 1434 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6896,5 +6924,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
+#line 1440 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6903,5 +6931,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1439 "parser.yy"
+#line 1442 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6910,5 +6938,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1441 "parser.yy"
+#line 1444 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6917,5 +6945,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+#line 1450 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6924,5 +6952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+#line 1452 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6931,5 +6959,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1455 "parser.yy"
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6938,5 +6966,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1457 "parser.yy"
+#line 1460 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6945,5 +6973,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1459 "parser.yy"
+#line 1462 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6952,5 +6980,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1464 "parser.yy"
+#line 1467 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6959,5 +6987,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
+#line 1469 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6966,5 +6994,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+#line 1471 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6973,5 +7001,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
+#line 1481 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), nullptr, nullptr, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6980,5 +7008,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+#line 1483 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6990,5 +7018,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
+#line 1488 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6997,5 +7025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1490 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), nullptr, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -7004,5 +7032,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+#line 1492 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), nullptr, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -7011,5 +7039,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1491 "parser.yy"
+#line 1494 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7018,5 +7046,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1496 "parser.yy"
+#line 1499 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7025,5 +7053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1498 "parser.yy"
+#line 1501 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7032,5 +7060,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1503 "parser.yy"
+#line 1506 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7039,5 +7067,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1505 "parser.yy"
+#line 1508 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7046,5 +7074,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
+#line 1514 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7053,5 +7081,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1514 "parser.yy"
+#line 1517 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7064,5 +7092,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
+#line 1527 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7071,5 +7099,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+#line 1529 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7078,5 +7106,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1528 "parser.yy"
+#line 1531 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7085,5 +7113,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
+#line 1536 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7092,5 +7120,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
+#line 1538 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7099,5 +7127,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1540 "parser.yy"
+#line 1543 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7106,16 +7134,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
+#line 1545 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
   case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 389:
 
 /* Line 1806 of yacc.c  */
@@ -7124,8 +7145,15 @@
     break;
 
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1551 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
   case 391:
 
 /* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+#line 1557 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7134,5 +7162,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1556 "parser.yy"
+#line 1559 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7141,5 +7169,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
+#line 1564 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7148,5 +7176,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1570 "parser.yy"
+#line 1573 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7155,5 +7183,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+#line 1575 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7165,5 +7193,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+#line 1580 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7172,5 +7200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1579 "parser.yy"
+#line 1582 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7179,5 +7207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+#line 1587 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7186,5 +7214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1586 "parser.yy"
+#line 1589 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7193,5 +7221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+#line 1594 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7200,5 +7228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
+#line 1596 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7207,5 +7235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
+#line 1603 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7214,5 +7242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
+#line 1611 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7221,5 +7249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
+#line 1613 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7228,5 +7256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
+#line 1615 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7235,5 +7263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1620 "parser.yy"
+#line 1623 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7242,5 +7270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
+#line 1625 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7249,5 +7277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
+#line 1627 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7256,5 +7284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1630 "parser.yy"
+#line 1633 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7263,5 +7291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1635 "parser.yy"
+#line 1638 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7270,5 +7298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
+#line 1645 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7277,5 +7305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1649 "parser.yy"
+#line 1652 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7284,16 +7312,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1654 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1660 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 426:
 
 /* Line 1806 of yacc.c  */
@@ -7302,8 +7323,15 @@
     break;
 
+  case 426:
+
+/* Line 1806 of yacc.c  */
+#line 1666 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
   case 427:
 
 /* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+#line 1668 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7312,5 +7340,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1675 "parser.yy"
+#line 1678 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7319,5 +7347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+#line 1684 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7329,5 +7357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+#line 1689 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7339,5 +7367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+#line 1698 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7346,5 +7374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1704 "parser.yy"
+#line 1707 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7353,5 +7381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1706 "parser.yy"
+#line 1709 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7360,5 +7388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1731 "parser.yy"
+#line 1734 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7367,5 +7395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1739 "parser.yy"
+#line 1742 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7374,5 +7402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+#line 1747 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7381,5 +7409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+#line 1749 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7388,5 +7416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1748 "parser.yy"
+#line 1751 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7395,5 +7423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1752 "parser.yy"
+#line 1755 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7402,5 +7430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1753 "parser.yy"
+#line 1756 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7409,5 +7437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1758 "parser.yy"
+#line 1761 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7416,5 +7444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
+#line 1763 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7423,5 +7451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
+#line 1764 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7430,5 +7458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1763 "parser.yy"
+#line 1766 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7437,5 +7465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1779 "parser.yy"
+#line 1782 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
@@ -7444,5 +7472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1785 "parser.yy"
+#line 1788 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -7451,5 +7479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
+#line 1794 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7458,5 +7486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1794 "parser.yy"
+#line 1797 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7465,5 +7493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1796 "parser.yy"
+#line 1799 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7472,5 +7500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1798 "parser.yy"
+#line 1801 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
@@ -7479,5 +7507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
+#line 1803 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7486,5 +7514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1824 "parser.yy"
+#line 1827 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7493,5 +7521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1826 "parser.yy"
+#line 1829 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7500,5 +7528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1828 "parser.yy"
+#line 1831 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7507,5 +7535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+#line 1837 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7514,5 +7542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1836 "parser.yy"
+#line 1839 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7521,5 +7549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1841 "parser.yy"
+#line 1844 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7528,5 +7556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1847 "parser.yy"
+#line 1850 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7535,5 +7563,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1852 "parser.yy"
+#line 1855 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7542,5 +7570,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1854 "parser.yy"
+#line 1857 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7549,5 +7577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1860 "parser.yy"
+#line 1863 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Otype; }
     break;
@@ -7556,5 +7584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1865 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7563,5 +7591,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1864 "parser.yy"
+#line 1867 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7570,5 +7598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1869 "parser.yy"
+#line 1872 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7577,5 +7605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1871 "parser.yy"
+#line 1874 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7584,5 +7612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1876 "parser.yy"
+#line 1879 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7594,5 +7622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1881 "parser.yy"
+#line 1884 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7601,5 +7629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+#line 1886 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7608,5 +7636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1888 "parser.yy"
+#line 1891 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
@@ -7615,5 +7643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1894 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
@@ -7622,5 +7650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+#line 1896 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7629,5 +7657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+#line 1901 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7636,5 +7664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1903 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7643,5 +7671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1902 "parser.yy"
+#line 1905 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7650,5 +7678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1907 "parser.yy"
+#line 1910 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7657,5 +7685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1909 "parser.yy"
+#line 1912 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7664,5 +7692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1914 "parser.yy"
+#line 1917 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7674,5 +7702,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1919 "parser.yy"
+#line 1922 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7684,5 +7712,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1927 "parser.yy"
+#line 1930 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7694,5 +7722,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1932 "parser.yy"
+#line 1935 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7704,5 +7732,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1937 "parser.yy"
+#line 1940 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7715,5 +7743,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+#line 1950 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7722,5 +7750,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1957 "parser.yy"
+#line 1960 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7732,5 +7760,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1962 "parser.yy"
+#line 1965 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7742,5 +7770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1967 "parser.yy"
+#line 1970 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7752,5 +7780,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1975 "parser.yy"
+#line 1978 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7762,5 +7790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1980 "parser.yy"
+#line 1983 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7772,5 +7800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
+#line 1993 "parser.yy"
     {}
     break;
@@ -7779,5 +7807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1992 "parser.yy"
+#line 1995 "parser.yy"
     { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
     break;
@@ -7786,5 +7814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1998 "parser.yy"
+#line 2001 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7793,5 +7821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2003 "parser.yy"
+#line 2006 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7800,5 +7828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2011 "parser.yy"
+#line 2014 "parser.yy"
     {}
     break;
@@ -7807,5 +7835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+#line 2016 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7817,5 +7845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2018 "parser.yy"
+#line 2021 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7828,5 +7856,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2024 "parser.yy"
+#line 2027 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7839,5 +7867,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7850,5 +7878,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2045 "parser.yy"
+#line 2048 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7861,5 +7889,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2054 "parser.yy"
+#line 2057 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7872,5 +7900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2060 "parser.yy"
+#line 2063 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7883,5 +7911,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2066 "parser.yy"
+#line 2069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7894,5 +7922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7905,5 +7933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+#line 2081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7916,5 +7944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2086 "parser.yy"
+#line 2089 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7927,5 +7955,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+#line 2095 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7938,5 +7966,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2100 "parser.yy"
+#line 2103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7949,5 +7977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2106 "parser.yy"
+#line 2109 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7960,5 +7988,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+#line 2124 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7967,5 +7995,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2126 "parser.yy"
+#line 2129 "parser.yy"
     { delete (yyvsp[(3) - (5)].str); }
     break;
@@ -7974,5 +8002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2131 "parser.yy"
+#line 2134 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7981,5 +8009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2138 "parser.yy"
+#line 2141 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7988,5 +8016,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2144 "parser.yy"
+#line 2147 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7995,5 +8023,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2155 "parser.yy"
+#line 2158 "parser.yy"
     { delete (yyvsp[(3) - (4)].en); }
     break;
@@ -8002,5 +8030,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+#line 2162 "parser.yy"
     { delete (yyvsp[(1) - (1)].tok); }
     break;
@@ -8009,5 +8037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2160 "parser.yy"
+#line 2163 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
@@ -8016,5 +8044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
+#line 2164 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
@@ -8023,16 +8051,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2162 "parser.yy"
+#line 2165 "parser.yy"
     { delete (yyvsp[(1) - (1)].decl); }
     break;
 
   case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 565:
 
 /* Line 1806 of yacc.c  */
@@ -8041,8 +8062,15 @@
     break;
 
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2203 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 566:
 
 /* Line 1806 of yacc.c  */
-#line 2202 "parser.yy"
+#line 2205 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8051,5 +8079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+#line 2210 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8061,5 +8089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2215 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8068,5 +8096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2220 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8075,5 +8103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2219 "parser.yy"
+#line 2222 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8082,5 +8110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2221 "parser.yy"
+#line 2224 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8089,5 +8117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8096,5 +8124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2228 "parser.yy"
+#line 2231 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8103,5 +8131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2230 "parser.yy"
+#line 2233 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8110,5 +8138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2232 "parser.yy"
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8117,5 +8145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+#line 2240 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8124,16 +8152,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2239 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 580:
 
 /* Line 1806 of yacc.c  */
@@ -8142,8 +8163,15 @@
     break;
 
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2254 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 581:
 
 /* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+#line 2259 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8152,5 +8180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+#line 2261 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8159,5 +8187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+#line 2263 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8166,5 +8194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
+#line 2268 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8173,5 +8201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+#line 2270 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8180,5 +8208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8187,5 +8215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2274 "parser.yy"
+#line 2277 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8194,5 +8222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+#line 2279 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8201,5 +8229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
+#line 2281 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8208,5 +8236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+#line 2296 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8215,5 +8243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+#line 2298 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8222,5 +8250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
+#line 2300 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8229,5 +8257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+#line 2305 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8236,5 +8264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+#line 2307 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8243,5 +8271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2306 "parser.yy"
+#line 2309 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8250,5 +8278,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+#line 2314 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8257,5 +8285,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+#line 2316 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8264,16 +8292,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2315 "parser.yy"
+#line 2318 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 604:
 
 /* Line 1806 of yacc.c  */
@@ -8282,8 +8303,15 @@
     break;
 
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2336 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 605:
 
 /* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
+#line 2338 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8292,5 +8320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
+#line 2344 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8299,5 +8327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
+#line 2349 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8306,5 +8334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8313,5 +8341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
+#line 2353 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8320,5 +8348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8327,5 +8355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2357 "parser.yy"
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8334,5 +8362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8341,5 +8369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+#line 2364 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8348,5 +8376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+#line 2369 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8355,5 +8383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8362,16 +8390,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 620:
 
 /* Line 1806 of yacc.c  */
@@ -8380,8 +8401,15 @@
     break;
 
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2386 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 621:
 
 /* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
+#line 2388 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8390,5 +8418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+#line 2393 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8397,5 +8425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
+#line 2395 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8404,5 +8432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2394 "parser.yy"
+#line 2397 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8411,5 +8439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
+#line 2402 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8418,5 +8446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8425,5 +8453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+#line 2406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8432,5 +8460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2405 "parser.yy"
+#line 2408 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8439,5 +8467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
+#line 2413 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8446,5 +8474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2412 "parser.yy"
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8453,16 +8481,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2414 "parser.yy"
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 634:
 
 /* Line 1806 of yacc.c  */
@@ -8471,8 +8492,15 @@
     break;
 
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2451 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 635:
 
 /* Line 1806 of yacc.c  */
-#line 2450 "parser.yy"
+#line 2453 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8481,5 +8509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2455 "parser.yy"
+#line 2458 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8491,5 +8519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2463 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8501,5 +8529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2468 "parser.yy"
+#line 2471 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8508,5 +8536,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+#line 2473 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8515,5 +8543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8522,5 +8550,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2480 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8529,5 +8557,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+#line 2482 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8536,5 +8564,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2484 "parser.yy"
+#line 2487 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8543,5 +8571,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2486 "parser.yy"
+#line 2489 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8550,5 +8578,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+#line 2504 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8557,5 +8585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+#line 2506 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8564,5 +8592,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2511 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8571,5 +8599,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+#line 2513 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8578,5 +8606,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+#line 2515 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8585,5 +8613,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+#line 2517 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8592,5 +8620,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
+#line 2519 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8599,5 +8627,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2522 "parser.yy"
+#line 2525 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8606,5 +8634,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2524 "parser.yy"
+#line 2527 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8613,5 +8641,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2526 "parser.yy"
+#line 2529 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8620,5 +8648,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+#line 2534 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
@@ -8627,5 +8655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+#line 2536 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8634,5 +8662,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+#line 2538 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8641,5 +8669,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+#line 2544 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8648,5 +8676,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+#line 2546 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8655,5 +8683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+#line 2552 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8662,5 +8690,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
+#line 2554 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8669,5 +8697,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
+#line 2556 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8676,5 +8704,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2555 "parser.yy"
+#line 2558 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8683,5 +8711,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+#line 2573 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8690,5 +8718,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
+#line 2575 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8697,5 +8725,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
+#line 2580 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8704,5 +8732,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
+#line 2582 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8711,5 +8739,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+#line 2584 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8718,5 +8746,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
+#line 2586 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8725,5 +8753,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8732,5 +8760,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2591 "parser.yy"
+#line 2594 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8739,5 +8767,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2593 "parser.yy"
+#line 2596 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8746,5 +8774,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2595 "parser.yy"
+#line 2598 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8753,5 +8781,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+#line 2603 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
@@ -8760,5 +8788,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2602 "parser.yy"
+#line 2605 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8767,5 +8795,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2604 "parser.yy"
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8774,5 +8802,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+#line 2614 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8781,5 +8809,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+#line 2625 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8788,5 +8816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2625 "parser.yy"
+#line 2628 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8795,5 +8823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
+#line 2630 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8802,5 +8830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2630 "parser.yy"
+#line 2633 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8809,5 +8837,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
+#line 2635 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8816,5 +8844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
+#line 2637 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -8823,5 +8851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2648 "parser.yy"
+#line 2651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8830,5 +8858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8837,5 +8865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2658 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8844,5 +8872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+#line 2660 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8851,5 +8879,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+#line 2662 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8858,5 +8886,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8865,5 +8893,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8872,5 +8900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+#line 2672 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8879,5 +8907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+#line 2674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8886,5 +8914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
+#line 2676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8893,5 +8921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
+#line 2681 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8900,5 +8928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2680 "parser.yy"
+#line 2683 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8907,5 +8935,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+#line 2693 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8914,5 +8942,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+#line 2703 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8921,5 +8949,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+#line 2705 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8928,5 +8956,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
+#line 2707 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8935,5 +8963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2706 "parser.yy"
+#line 2709 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8942,5 +8970,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2708 "parser.yy"
+#line 2711 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8949,5 +8977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2710 "parser.yy"
+#line 2713 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8956,5 +8984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+#line 2720 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8963,5 +8991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8970,5 +8998,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8977,5 +9005,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
+#line 2726 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8984,5 +9012,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+#line 2728 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8991,5 +9019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
+#line 2731 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8998,5 +9026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2730 "parser.yy"
+#line 2733 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9005,5 +9033,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
+#line 2735 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9012,5 +9040,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2734 "parser.yy"
+#line 2737 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9019,5 +9047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2736 "parser.yy"
+#line 2739 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9026,5 +9054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+#line 2744 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9033,5 +9061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+#line 2746 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9040,5 +9068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2748 "parser.yy"
+#line 2751 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9047,5 +9075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2750 "parser.yy"
+#line 2753 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9054,5 +9082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2777 "parser.yy"
+#line 2780 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9061,5 +9089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2788 "parser.yy"
+#line 2791 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9068,5 +9096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2790 "parser.yy"
+#line 2793 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9075,5 +9103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
+#line 2795 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9082,5 +9110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2794 "parser.yy"
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9089,5 +9117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9096,5 +9124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
+#line 2801 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9103,5 +9131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2808 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9110,5 +9138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
+#line 2810 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9117,5 +9145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
+#line 2812 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9124,5 +9152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9131,5 +9159,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2813 "parser.yy"
+#line 2816 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
@@ -9138,5 +9166,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2815 "parser.yy"
+#line 2818 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9145,5 +9173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
+#line 2823 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9152,5 +9180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2825 "parser.yy"
+#line 2828 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), (yyvsp[(4) - (5)].decl), nullptr ); }
     break;
@@ -9159,5 +9187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2827 "parser.yy"
+#line 2830 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
@@ -9166,5 +9194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
+#line 2832 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
@@ -9173,5 +9201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2853 "parser.yy"
+#line 2856 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9180,5 +9208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2855 "parser.yy"
+#line 2858 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9187,5 +9215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9190 "Parser/parser.cc"
+#line 9218 "Parser/parser.cc"
       default: break;
     }
@@ -9418,5 +9446,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2858 "parser.yy"
+#line 2861 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/parser.yy	(revision a1e67ddc023331e04cc5481931be1d0923efc441)
@@ -195,6 +195,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
@@ -379,8 +378,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 '.' INTEGERconstant
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_constantInteger( *$3 ) ) ); }
 	| 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 ) ); }
@@ -418,19 +420,20 @@
 		// ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
-		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 	| field_name '.' field
-		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
 	| field_name '.' '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_fieldSel( $5, build_varref( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
 	| field_name ARROW field
-		{ $$ = new ExpressionNode( build_pfieldSel( $3, build_varref( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
 	| field_name ARROW '[' push field_list pop ']'
-		{ $$ = new ExpressionNode( build_pfieldSel( $5, build_varref( $1 ) ) ); }
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
 	;
 
 field_name:
 	no_attr_identifier
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
 		// x.1, x.[0, 0.0]
 	| INTEGERconstant
+		{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
 	;
 
