Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/CodeGen/CodeGenerator.cc	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:16:21 2016
-// Update Count     : 351
+// Last Modified On : Thu Aug  4 13:35:30 2016
+// Update Count     : 352
 //
 
@@ -492,4 +492,10 @@
 	}
 
+	void CodeGenerator::visit( RangeExpr * rangeExpr ) {
+		rangeExpr->get_low()->accept( *this );
+		output << " ... ";
+		rangeExpr->get_high()->accept( *this );
+	}
+
 	void CodeGenerator::visit( NameExpr * nameExpr ) {
 		extension( nameExpr );
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/CodeGen/CodeGenerator.h	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 30 11:10:42 2016
-// Update Count     : 37
+// Last Modified On : Thu Aug  4 13:37:07 2016
+// Update Count     : 38
 //
 
@@ -54,4 +54,5 @@
 		virtual void visit( ApplicationExpr *applicationExpr );
 		virtual void visit( UntypedExpr *untypedExpr );
+		virtual void visit( RangeExpr * rangeExpr );
 		virtual void visit( NameExpr *nameExpr );
 		virtual void visit( AddressExpr *addressExpr );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/Parser/ExpressionNode.cc	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  2 15:10:23 2016
-// Update Count     : 322
+// Last Modified On : Thu Aug  4 16:11:23 2016
+// Update Count     : 338
 //
 
@@ -258,5 +258,5 @@
 OperatorNode::~OperatorNode() {}
 
-OperatorNode::Type OperatorNode::get_type( void ) const{
+OperatorNode::Type OperatorNode::get_type( void ) const {
 	return type;
 }
@@ -311,5 +311,64 @@
 }
 
-#include "Common/utility.h"
+
+Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
+	DeclarationNode *decl_node = arg->get_decl();
+
+	Type *targetType = decl_node->buildType();
+	if ( dynamic_cast< VoidType* >( targetType ) ) {
+		delete targetType;
+		return new CastExpr( maybeBuild<Expression>(expr_node) );
+	} else {
+		return new CastExpr( maybeBuild<Expression>(expr_node), targetType );
+	} // if
+}
+
+Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
+	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
+	assert( memberExpr );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), maybeBuild<Expression>(expr_node) );
+	delete member;
+	return ret;
+}
+
+Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member ) {
+	NameExpr* memberExpr = dynamic_cast<NameExpr*> ( maybeBuild<Expression>( member) );
+	assert( memberExpr );
+	UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
+	deref->get_args().push_back( maybeBuild<Expression>(expr_node) );
+	UntypedMemberExpr *ret = new UntypedMemberExpr( memberExpr->get_name(), deref );
+	delete member;
+	return ret;
+}
+
+Expression *build_addressOf( ExpressionNode *expr_node ) {
+		return new AddressExpr( maybeBuild<Expression>(expr_node) );
+}
+Expression *build_sizeOf( ExpressionNode *expr_node ) {
+	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
+		return new SizeofExpr( arg->get_decl()->buildType() );
+	} else {
+		return new SizeofExpr( maybeBuild<Expression>(expr_node) );
+	} // if
+}
+Expression *build_alignOf( ExpressionNode *expr_node ) {
+	if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( expr_node ) ) {
+		return new AlignofExpr( arg->get_decl()->buildType() );
+	} else {
+		return new AlignofExpr( maybeBuild<Expression>(expr_node) );
+	} // if
+}
+Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member ) {
+	NameExpr *memberExpr = dynamic_cast<NameExpr *>( maybeBuild<Expression>( member ) );
+	assert( memberExpr );
+	return new UntypedOffsetofExpr( arg->get_decl()->buildType(), memberExpr->get_name() );
+}
+
+CompositeExprNode2::CompositeExprNode2( Expression *expr ) : expr( expr ) {}
+CompositeExprNode2::CompositeExprNode2( const CompositeExprNode2 &other ) : expr( other.expr->clone() ) {}
+CompositeExprNode2::~CompositeExprNode2() { delete expr; }
+void CompositeExprNode2::print( std::ostream &, int indent ) const { assert( false ); }
+void CompositeExprNode2::printOneLine( std::ostream &, int indent ) const { assert( false ); }
+
 
 Expression *CompositeExprNode::build() const {
@@ -388,86 +447,4 @@
 	  case OperatorNode::LabelAddress:
 		return new UntypedExpr( new NameExpr( opName[ op->get_type() ] ), args );
-	  case OperatorNode::AddressOf:
-		assert( args.size() == 1 );
-		assert( args.front() );
-
-		return new AddressExpr( args.front() );
-	  case OperatorNode::Cast:
-		{
-			TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args());
-			assert( arg );
-
-			DeclarationNode *decl_node = arg->get_decl();
-			ExpressionNode *expr_node = dynamic_cast<ExpressionNode *>( arg->get_link());
-
-			Type *targetType = decl_node->buildType();
-			if ( dynamic_cast< VoidType* >( targetType ) ) {
-				delete targetType;
-				return new CastExpr( maybeBuild<Expression>(expr_node), maybeBuild< Expression >( get_argName() ) );
-			} else {
-				return new CastExpr( maybeBuild<Expression>(expr_node),targetType, maybeBuild< Expression >( get_argName() ) );
-			} // if
-		}
-	  case OperatorNode::FieldSel:
-		{
-			assert( args.size() == 2 );
-
-			NameExpr *member = dynamic_cast<NameExpr *>( args.back());
-			// TupleExpr *memberTup = dynamic_cast<TupleExpr *>( args.back());
-
-			if ( member != 0 ) {
-				UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), args.front());
-				delete member;
-				return ret;
-				/* else if ( memberTup != 0 )
-				   {
-				   UntypedMemberExpr *ret = new UntypedMemberExpr( memberTup->get_name(), args.front());
-				   delete member;
-				   return ret;
-				   } */
-			} else
-				assert( false );
-		}
-	  case OperatorNode::PFieldSel:
-		{
-			assert( args.size() == 2 );
-
-			NameExpr *member = dynamic_cast<NameExpr *>( args.back());  // modify for Tuples   xxx
-			assert( member != 0 );
-
-			UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) );
-			deref->get_args().push_back( args.front() );
-
-			UntypedMemberExpr *ret = new UntypedMemberExpr( member->get_name(), deref );
-			delete member;
-			return ret;
-		}
-	  case OperatorNode::SizeOf:
-		{
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
-				return new SizeofExpr( arg->get_decl()->buildType());
-			} else {
-				return new SizeofExpr( args.front());
-			} // if
-		}
-	  case OperatorNode::AlignOf:
-		{
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args()) ) {
-				return new AlignofExpr( arg->get_decl()->buildType());
-			} else {
-				return new AlignofExpr( args.front());
-			} // if
-		}
-	  case OperatorNode::OffsetOf:
-		{
-			assert( args.size() == 2 );
-
-			if ( TypeValueNode * arg = dynamic_cast<TypeValueNode *>( get_args() ) ) {
-				NameExpr *member = dynamic_cast<NameExpr *>( args.back() );
-				assert( member != 0 );
-
-				return new UntypedOffsetofExpr( arg->get_decl()->buildType(), member->get_name() );
-			} else assert( false );
-		}
 	  case OperatorNode::Attr:
 		{
@@ -774,5 +751,4 @@
 }
 
-
 ExpressionNode *flattenCommas( ExpressionNode *list ) {
 	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/Parser/ParseNode.h	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul 24 02:17:00 2016
-// Update Count     : 269
+// Last Modified On : Thu Aug  4 16:34:16 2016
+// Update Count     : 277
 //
 
@@ -225,4 +225,12 @@
 };
 
+Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node );
+Expression *build_fieldSel( ExpressionNode *expr_node, VarRefNode *member );
+Expression *build_pfieldSel( ExpressionNode *expr_node, VarRefNode *member );
+Expression *build_addressOf( ExpressionNode *expr_node );
+Expression *build_sizeOf( ExpressionNode *expr_node );
+Expression *build_alignOf( ExpressionNode *expr_node );
+Expression *build_offsetOf( TypeValueNode * arg, VarRefNode *member );
+
 class CompositeExprNode : public ExpressionNode {
   public:
@@ -250,4 +258,19 @@
 	ExpressionNode *function;
 	ExpressionNode *arguments;
+};
+
+class CompositeExprNode2 : public ExpressionNode {
+  public:
+	CompositeExprNode2( Expression *expr );
+	CompositeExprNode2( const CompositeExprNode2 &other );
+	virtual ~CompositeExprNode2();
+
+	virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
+	virtual Expression *build() const { return expr->clone(); }
+
+	virtual void print( std::ostream &, int indent = 0) const;
+	virtual void printOneLine( std::ostream &, int indent = 0) const;
+  private:
+	Expression *expr;
 };
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/Parser/parser.cc	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -354,4 +354,5 @@
 	LabelNode *label;
 	InitializerNode *in;
+	OperatorNode::Type op;
 	bool flag;
 
@@ -359,5 +360,5 @@
 
 /* Line 293 of yacc.c  */
-#line 362 "Parser/parser.cc"
+#line 363 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -371,5 +372,5 @@
 
 /* Line 343 of yacc.c  */
-#line 374 "Parser/parser.cc"
+#line 375 "Parser/parser.cc"
 
 #ifdef short
@@ -1016,80 +1017,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
-     317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
-     343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
-     369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
-     402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
-     429,   431,   436,   438,   440,   442,   444,   446,   448,   450,
-     452,   454,   456,   463,   464,   466,   470,   471,   472,   473,
-     477,   478,   480,   485,   486,   488,   490,   495,   496,   498,
-     503,   504,   506,   511,   512,   514,   516,   518,   523,   524,
-     526,   531,   532,   537,   538,   543,   544,   549,   550,   555,
-     556,   561,   562,   564,   566,   571,   576,   577,   579,   581,
-     587,   588,   594,   596,   598,   600,   605,   606,   611,   612,
-     613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
-     631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
-     646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
-     695,   696,   701,   706,   709,   711,   713,   723,   725,   736,
-     737,   739,   743,   744,   748,   749,   754,   755,   759,   764,
-     765,   769,   771,   777,   778,   782,   784,   786,   788,   794,
-     795,   799,   801,   806,   808,   810,   815,   817,   822,   824,
-     828,   831,   835,   838,   842,   844,   848,   850,   857,   859,
-     861,   870,   872,   874,   876,   878,   883,   885,   887,   889,
-     894,   907,   908,   913,   915,   920,   924,   926,   928,   930,
-     932,   938,   939,   945,   946,   950,   951,   956,   958,   964,
-     965,   967,   972,   974,   981,   983,   987,   988,   993,   995,
-     999,  1000,  1004,  1006,  1010,  1011,  1015,  1016,  1020,  1021,
-    1036,  1037,  1038,  1039,  1040,  1044,  1049,  1056,  1066,  1071,
-    1076,  1084,  1089,  1094,  1099,  1104,  1112,  1134,  1139,  1146,
-    1148,  1155,  1160,  1165,  1176,  1181,  1186,  1191,  1196,  1205,
-    1210,  1218,  1219,  1220,  1221,  1227,  1232,  1240,  1241,  1242,
-    1243,  1247,  1248,  1249,  1250,  1255,  1256,  1265,  1266,  1271,
-    1272,  1277,  1279,  1281,  1283,  1285,  1288,  1287,  1299,  1300,
-    1302,  1312,  1313,  1318,  1322,  1324,  1326,  1328,  1330,  1332,
-    1334,  1336,  1341,  1343,  1345,  1347,  1349,  1351,  1353,  1355,
-    1357,  1359,  1361,  1363,  1365,  1371,  1372,  1374,  1376,  1378,
-    1383,  1384,  1390,  1391,  1393,  1395,  1400,  1402,  1404,  1406,
-    1411,  1412,  1414,  1416,  1421,  1422,  1424,  1429,  1430,  1432,
-    1434,  1439,  1441,  1443,  1448,  1449,  1453,  1455,  1461,  1460,
-    1464,  1466,  1471,  1473,  1479,  1480,  1485,  1486,  1488,  1489,
-    1498,  1499,  1501,  1503,  1508,  1510,  1516,  1517,  1519,  1522,
-    1525,  1530,  1531,  1536,  1541,  1545,  1547,  1553,  1552,  1559,
-    1561,  1567,  1568,  1576,  1577,  1581,  1582,  1583,  1585,  1587,
-    1594,  1595,  1597,  1599,  1604,  1605,  1611,  1612,  1616,  1617,
-    1622,  1623,  1624,  1626,  1634,  1635,  1637,  1640,  1642,  1646,
-    1647,  1648,  1650,  1652,  1656,  1661,  1669,  1670,  1679,  1681,
-    1686,  1687,  1688,  1692,  1693,  1694,  1698,  1699,  1700,  1704,
-    1705,  1706,  1711,  1712,  1713,  1714,  1720,  1721,  1723,  1728,
-    1729,  1734,  1735,  1736,  1737,  1738,  1753,  1754,  1759,  1760,
-    1768,  1770,  1772,  1775,  1777,  1779,  1802,  1803,  1805,  1807,
-    1812,  1813,  1815,  1820,  1825,  1826,  1832,  1831,  1835,  1839,
-    1841,  1843,  1849,  1850,  1855,  1860,  1862,  1867,  1869,  1870,
-    1872,  1877,  1879,  1881,  1886,  1888,  1893,  1898,  1906,  1912,
-    1911,  1925,  1926,  1931,  1932,  1936,  1941,  1946,  1954,  1959,
-    1970,  1971,  1982,  1983,  1989,  1990,  1994,  1995,  1996,  1999,
-    1998,  2009,  2018,  2024,  2030,  2039,  2045,  2051,  2057,  2063,
-    2071,  2077,  2085,  2091,  2100,  2101,  2102,  2106,  2110,  2112,
-    2117,  2118,  2122,  2123,  2128,  2134,  2135,  2138,  2140,  2141,
-    2145,  2146,  2147,  2148,  2182,  2184,  2185,  2187,  2192,  2197,
-    2202,  2204,  2206,  2211,  2213,  2215,  2217,  2222,  2224,  2233,
-    2235,  2236,  2241,  2243,  2245,  2250,  2252,  2254,  2259,  2261,
-    2263,  2272,  2273,  2274,  2278,  2280,  2282,  2287,  2289,  2291,
-    2296,  2298,  2300,  2315,  2317,  2318,  2320,  2325,  2326,  2331,
-    2333,  2335,  2340,  2342,  2344,  2346,  2351,  2353,  2355,  2365,
-    2367,  2368,  2370,  2375,  2377,  2379,  2384,  2386,  2388,  2390,
-    2395,  2397,  2399,  2430,  2432,  2433,  2435,  2440,  2445,  2453,
-    2455,  2457,  2462,  2464,  2469,  2471,  2485,  2486,  2488,  2493,
-    2495,  2497,  2499,  2501,  2506,  2507,  2509,  2511,  2516,  2518,
-    2520,  2526,  2528,  2530,  2534,  2536,  2538,  2540,  2554,  2555,
-    2557,  2562,  2564,  2566,  2568,  2570,  2575,  2576,  2578,  2580,
-    2585,  2587,  2589,  2595,  2596,  2598,  2607,  2610,  2612,  2615,
-    2617,  2619,  2632,  2633,  2635,  2640,  2642,  2644,  2646,  2648,
-    2653,  2654,  2656,  2658,  2663,  2665,  2673,  2674,  2675,  2680,
-    2681,  2685,  2687,  2689,  2691,  2693,  2695,  2702,  2704,  2706,
-    2708,  2710,  2712,  2714,  2716,  2718,  2720,  2725,  2727,  2729,
-    2734,  2760,  2761,  2763,  2767,  2768,  2772,  2774,  2776,  2778,
-    2780,  2782,  2789,  2791,  2793,  2795,  2797,  2799,  2804,  2809,
-    2811,  2813,  2831,  2833,  2838,  2839
+       0,   292,   292,   298,   307,   308,   309,   313,   314,   315,
+     319,   320,   324,   325,   329,   330,   334,   335,   341,   343,
+     345,   347,   352,   353,   359,   363,   365,   366,   368,   369,
+     371,   373,   375,   383,   384,   390,   391,   392,   397,   399,
+     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
+     431,   433,   438,   440,   442,   444,   446,   448,   450,   452,
+     454,   456,   458,   465,   466,   468,   472,   473,   474,   475,
+     479,   480,   482,   487,   488,   490,   492,   497,   498,   500,
+     505,   506,   508,   513,   514,   516,   518,   520,   525,   526,
+     528,   533,   534,   539,   540,   545,   546,   551,   552,   557,
+     558,   563,   564,   566,   568,   573,   578,   579,   581,   583,
+     589,   590,   596,   598,   600,   602,   607,   608,   613,   614,
+     615,   616,   617,   618,   619,   620,   621,   622,   626,   627,
+     633,   634,   640,   641,   642,   643,   644,   645,   646,   647,
+     648,   658,   665,   667,   677,   678,   683,   685,   691,   693,
+     697,   698,   703,   708,   711,   713,   715,   725,   727,   738,
+     739,   741,   745,   747,   751,   752,   757,   758,   762,   767,
+     768,   772,   774,   780,   781,   785,   787,   789,   791,   797,
+     798,   802,   804,   809,   811,   813,   818,   820,   825,   827,
+     831,   834,   838,   841,   845,   847,   851,   853,   860,   862,
+     864,   873,   875,   877,   879,   881,   886,   888,   890,   892,
+     897,   910,   911,   916,   918,   923,   927,   929,   931,   933,
+     935,   941,   942,   948,   949,   953,   954,   959,   961,   967,
+     968,   970,   975,   977,   984,   986,   990,   991,   996,   998,
+    1002,  1003,  1007,  1009,  1013,  1014,  1018,  1019,  1023,  1024,
+    1039,  1040,  1041,  1042,  1043,  1047,  1052,  1059,  1069,  1074,
+    1079,  1087,  1092,  1097,  1102,  1107,  1115,  1137,  1142,  1149,
+    1151,  1158,  1163,  1168,  1179,  1184,  1189,  1194,  1199,  1208,
+    1213,  1221,  1222,  1223,  1224,  1230,  1235,  1243,  1244,  1245,
+    1246,  1250,  1251,  1252,  1253,  1258,  1259,  1268,  1269,  1274,
+    1275,  1280,  1282,  1284,  1286,  1288,  1291,  1290,  1302,  1303,
+    1305,  1315,  1316,  1321,  1325,  1327,  1329,  1331,  1333,  1335,
+    1337,  1339,  1344,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
+    1360,  1362,  1364,  1366,  1368,  1374,  1375,  1377,  1379,  1381,
+    1386,  1387,  1393,  1394,  1396,  1398,  1403,  1405,  1407,  1409,
+    1414,  1415,  1417,  1419,  1424,  1425,  1427,  1432,  1433,  1435,
+    1437,  1442,  1444,  1446,  1451,  1452,  1456,  1458,  1464,  1463,
+    1467,  1469,  1474,  1476,  1482,  1483,  1488,  1489,  1491,  1492,
+    1501,  1502,  1504,  1506,  1511,  1513,  1519,  1520,  1522,  1525,
+    1528,  1533,  1534,  1539,  1544,  1548,  1550,  1556,  1555,  1562,
+    1564,  1570,  1571,  1579,  1580,  1584,  1585,  1586,  1588,  1590,
+    1597,  1598,  1600,  1602,  1607,  1608,  1614,  1615,  1619,  1620,
+    1625,  1626,  1627,  1629,  1637,  1638,  1640,  1643,  1645,  1649,
+    1650,  1651,  1653,  1655,  1659,  1664,  1672,  1673,  1682,  1684,
+    1689,  1690,  1691,  1695,  1696,  1697,  1701,  1702,  1703,  1707,
+    1708,  1709,  1714,  1715,  1716,  1717,  1723,  1724,  1726,  1731,
+    1732,  1737,  1738,  1739,  1740,  1741,  1756,  1757,  1762,  1763,
+    1771,  1773,  1775,  1778,  1780,  1782,  1805,  1806,  1808,  1810,
+    1815,  1816,  1818,  1823,  1828,  1829,  1835,  1834,  1838,  1842,
+    1844,  1846,  1852,  1853,  1858,  1863,  1865,  1870,  1872,  1873,
+    1875,  1880,  1882,  1884,  1889,  1891,  1896,  1901,  1909,  1915,
+    1914,  1928,  1929,  1934,  1935,  1939,  1944,  1949,  1957,  1962,
+    1973,  1974,  1985,  1986,  1992,  1993,  1997,  1998,  1999,  2002,
+    2001,  2012,  2021,  2027,  2033,  2042,  2048,  2054,  2060,  2066,
+    2074,  2080,  2088,  2094,  2103,  2104,  2105,  2109,  2113,  2115,
+    2120,  2121,  2125,  2126,  2131,  2137,  2138,  2141,  2143,  2144,
+    2148,  2149,  2150,  2151,  2185,  2187,  2188,  2190,  2195,  2200,
+    2205,  2207,  2209,  2214,  2216,  2218,  2220,  2225,  2227,  2236,
+    2238,  2239,  2244,  2246,  2248,  2253,  2255,  2257,  2262,  2264,
+    2266,  2275,  2276,  2277,  2281,  2283,  2285,  2290,  2292,  2294,
+    2299,  2301,  2303,  2318,  2320,  2321,  2323,  2328,  2329,  2334,
+    2336,  2338,  2343,  2345,  2347,  2349,  2354,  2356,  2358,  2368,
+    2370,  2371,  2373,  2378,  2380,  2382,  2387,  2389,  2391,  2393,
+    2398,  2400,  2402,  2433,  2435,  2436,  2438,  2443,  2448,  2456,
+    2458,  2460,  2465,  2467,  2472,  2474,  2488,  2489,  2491,  2496,
+    2498,  2500,  2502,  2504,  2509,  2510,  2512,  2514,  2519,  2521,
+    2523,  2529,  2531,  2533,  2537,  2539,  2541,  2543,  2557,  2558,
+    2560,  2565,  2567,  2569,  2571,  2573,  2578,  2579,  2581,  2583,
+    2588,  2590,  2592,  2598,  2599,  2601,  2610,  2613,  2615,  2618,
+    2620,  2622,  2635,  2636,  2638,  2643,  2645,  2647,  2649,  2651,
+    2656,  2657,  2659,  2661,  2666,  2668,  2676,  2677,  2678,  2683,
+    2684,  2688,  2690,  2692,  2694,  2696,  2698,  2705,  2707,  2709,
+    2711,  2713,  2715,  2717,  2719,  2721,  2723,  2728,  2730,  2732,
+    2737,  2763,  2764,  2766,  2770,  2771,  2775,  2777,  2779,  2781,
+    2783,  2785,  2792,  2794,  2796,  2798,  2800,  2802,  2807,  2812,
+    2814,  2816,  2834,  2836,  2841,  2842
 };
 #endif
@@ -5216,5 +5217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 290 "parser.yy"
+#line 292 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5225,5 +5226,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 298 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5234,5 +5235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 307 "parser.yy"
     { (yyval.constant) = makeConstantInteger( *(yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5241,5 +5242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
+#line 308 "parser.yy"
     { (yyval.constant) = makeConstantFloat( *(yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5248,5 +5249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
+#line 309 "parser.yy"
     { (yyval.constant) = makeConstantChar( *(yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5255,5 +5256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 332 "parser.yy"
+#line 334 "parser.yy"
     { (yyval.constant) = makeConstantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5262,16 +5263,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 333 "parser.yy"
+#line 335 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     break;
 
   case 18:
-
-/* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
-    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 19:
 
 /* Line 1806 of yacc.c  */
@@ -5280,8 +5274,15 @@
     break;
 
+  case 19:
+
+/* Line 1806 of yacc.c  */
+#line 344 "parser.yy"
+    { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
   case 20:
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 346 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5290,5 +5291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 348 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5297,5 +5298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 356 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     break;
@@ -5304,5 +5305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
+#line 360 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5311,6 +5312,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
+#line 364 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5318,6 +5319,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
+#line 367 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5325,5 +5326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
+#line 370 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5332,5 +5333,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
+#line 372 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5339,5 +5340,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
+#line 374 "parser.yy"
     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
     break;
@@ -5346,5 +5347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 376 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "?{}" ); // location undefined
@@ -5356,5 +5357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 385 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5363,5 +5364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 390 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5370,5 +5371,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 393 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5377,5 +5378,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
+#line 398 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5384,5 +5385,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 400 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     break;
@@ -5391,5 +5392,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
+#line 405 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5398,5 +5399,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
+#line 410 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5405,6 +5406,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
+#line 414 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5412,6 +5413,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
+#line 416 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5419,6 +5420,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
+#line 418 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5426,16 +5427,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
+#line 420 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
   case 48:
-
-/* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
-    break;
-
-  case 49:
 
 /* Line 1806 of yacc.c  */
@@ -5444,8 +5438,15 @@
     break;
 
+  case 49:
+
+/* Line 1806 of yacc.c  */
+#line 430 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].constant); }
+    break;
+
   case 50:
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 432 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5454,19 +5455,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 434 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (2)].op) == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( (yyvsp[(2) - (2)].en) ) ) : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( (yyvsp[(1) - (2)].op) ), (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 52:
+
+/* Line 1806 of yacc.c  */
+#line 439 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 52:
-
-/* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
-    break;
-
   case 53:
 
 /* Line 1806 of yacc.c  */
-#line 439 "parser.yy"
+#line 441 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5475,5 +5476,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
+#line 443 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5482,6 +5483,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
+#line 445 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5489,6 +5490,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
+#line 447 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5496,6 +5497,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 447 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
+#line 449 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
@@ -5503,5 +5504,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 449 "parser.yy"
+#line 451 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     break;
@@ -5510,5 +5511,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
+#line 453 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5517,5 +5518,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 453 "parser.yy"
+#line 455 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5524,6 +5525,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 455 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
+#line 457 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5531,6 +5532,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 457 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
+#line 459 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5538,6 +5539,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 463 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::PointTo ); }
+#line 465 "parser.yy"
+    { (yyval.op) = OperatorNode::PointTo; }
     break;
 
@@ -5545,6 +5546,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
+#line 466 "parser.yy"
+    { (yyval.op) = OperatorNode::AddressOf; }
     break;
 
@@ -5552,6 +5553,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
-    { (yyval.en) = new OperatorNode( OperatorNode::And ); }
+#line 468 "parser.yy"
+    { (yyval.op) = OperatorNode::And; }
     break;
 
@@ -5559,5 +5560,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
+#line 472 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     break;
@@ -5566,5 +5567,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 471 "parser.yy"
+#line 473 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     break;
@@ -5573,5 +5574,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 472 "parser.yy"
+#line 474 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::Neg ); }
     break;
@@ -5580,5 +5581,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 473 "parser.yy"
+#line 475 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     break;
@@ -5587,6 +5588,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 479 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
+#line 481 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5594,6 +5595,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 481 "parser.yy"
-    { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
+#line 483 "parser.yy"
+    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5601,5 +5602,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 489 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5608,5 +5609,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
+#line 491 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5615,5 +5616,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 493 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5622,5 +5623,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 499 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5629,5 +5630,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 501 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5636,5 +5637,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 507 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5643,5 +5644,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 507 "parser.yy"
+#line 509 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5650,5 +5651,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
+#line 515 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5657,5 +5658,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 515 "parser.yy"
+#line 517 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5664,5 +5665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 517 "parser.yy"
+#line 519 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5671,5 +5672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 519 "parser.yy"
+#line 521 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5678,5 +5679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 525 "parser.yy"
+#line 527 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5685,5 +5686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 527 "parser.yy"
+#line 529 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5692,5 +5693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 533 "parser.yy"
+#line 535 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5699,5 +5700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
+#line 541 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5706,5 +5707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 545 "parser.yy"
+#line 547 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5713,5 +5714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 551 "parser.yy"
+#line 553 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5720,5 +5721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 557 "parser.yy"
+#line 559 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5727,5 +5728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
+#line 565 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5734,5 +5735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 565 "parser.yy"
+#line 567 "parser.yy"
     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5741,5 +5742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
+#line 569 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5748,5 +5749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+#line 580 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5755,5 +5756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
+#line 582 "parser.yy"
     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5762,5 +5763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
+#line 584 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5769,5 +5770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
+#line 589 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5776,5 +5777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+#line 597 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     break;
@@ -5783,5 +5784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 597 "parser.yy"
+#line 599 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     break;
@@ -5790,5 +5791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+#line 601 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5797,5 +5798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 601 "parser.yy"
+#line 603 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5804,5 +5805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5811,5 +5812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 613 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     break;
@@ -5818,5 +5819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     break;
@@ -5825,5 +5826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     break;
@@ -5832,5 +5833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     break;
@@ -5839,5 +5840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
+#line 617 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     break;
@@ -5846,5 +5847,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
+#line 618 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     break;
@@ -5853,5 +5854,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
+#line 619 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     break;
@@ -5860,5 +5861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 618 "parser.yy"
+#line 620 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     break;
@@ -5867,5 +5868,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 619 "parser.yy"
+#line 621 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     break;
@@ -5874,5 +5875,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
+#line 622 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     break;
@@ -5881,5 +5882,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 626 "parser.yy"
+#line 628 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5888,5 +5889,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 631 "parser.yy"
+#line 633 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5895,5 +5896,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 642 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5902,5 +5903,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+#line 649 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
@@ -5913,5 +5914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 657 "parser.yy"
+#line 659 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5922,5 +5923,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 664 "parser.yy"
+#line 666 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5929,5 +5930,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 671 "parser.yy"
+#line 673 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5936,5 +5937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 677 "parser.yy"
+#line 679 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5943,5 +5944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
+#line 684 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5950,5 +5951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 684 "parser.yy"
+#line 686 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5961,5 +5962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 690 "parser.yy"
+#line 692 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5968,5 +5969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 697 "parser.yy"
+#line 699 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5975,5 +5976,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
+#line 704 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5982,5 +5983,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 708 "parser.yy"
+#line 710 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5989,5 +5990,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 712 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5996,5 +5997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
+#line 714 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6003,5 +6004,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 714 "parser.yy"
+#line 716 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -6018,5 +6019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 724 "parser.yy"
+#line 726 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6025,5 +6026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
+#line 728 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -6035,5 +6036,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 736 "parser.yy"
+#line 738 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -6042,5 +6043,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 738 "parser.yy"
+#line 740 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6049,5 +6050,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
+#line 745 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
@@ -6056,5 +6057,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 744 "parser.yy"
+#line 747 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
@@ -6063,5 +6064,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
+#line 751 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -6070,5 +6071,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
+#line 752 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -6077,5 +6078,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 755 "parser.yy"
+#line 758 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -6084,5 +6085,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+#line 762 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -6091,5 +6092,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 764 "parser.yy"
+#line 767 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6098,5 +6099,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -6105,5 +6106,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
+#line 775 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -6112,5 +6113,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 777 "parser.yy"
+#line 780 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6119,5 +6120,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 786 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -6126,5 +6127,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 785 "parser.yy"
+#line 788 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -6133,5 +6134,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
+#line 790 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -6140,5 +6141,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
@@ -6147,5 +6148,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 794 "parser.yy"
+#line 797 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -6154,5 +6155,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+#line 803 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6161,5 +6162,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
+#line 805 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6168,5 +6169,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 807 "parser.yy"
+#line 810 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6175,5 +6176,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
+#line 812 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -6182,5 +6183,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 811 "parser.yy"
+#line 814 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -6189,5 +6190,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 819 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -6196,5 +6197,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 818 "parser.yy"
+#line 821 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -6203,5 +6204,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6210,5 +6211,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
+#line 830 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6217,5 +6218,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+#line 833 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -6224,5 +6225,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 834 "parser.yy"
+#line 837 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6231,5 +6232,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+#line 840 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -6238,5 +6239,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 841 "parser.yy"
+#line 844 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6245,5 +6246,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
+#line 846 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6252,5 +6253,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+#line 848 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6259,5 +6260,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
+#line 852 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6266,5 +6267,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
+#line 854 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6273,5 +6274,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 858 "parser.yy"
+#line 861 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6280,5 +6281,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
+#line 863 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6287,5 +6288,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
+#line 865 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6297,5 +6298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
+#line 876 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6304,5 +6305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
+#line 878 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6311,5 +6312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 880 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6318,5 +6319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 879 "parser.yy"
+#line 882 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6325,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 884 "parser.yy"
+#line 887 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6332,5 +6333,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 886 "parser.yy"
+#line 889 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6339,5 +6340,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 888 "parser.yy"
+#line 891 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6346,5 +6347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
+#line 893 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6353,5 +6354,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 895 "parser.yy"
+#line 898 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6363,5 +6364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 912 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6373,5 +6374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
+#line 917 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6380,5 +6381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 916 "parser.yy"
+#line 919 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6390,5 +6391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 925 "parser.yy"
+#line 928 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6397,5 +6398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+#line 930 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6404,5 +6405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
+#line 932 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
@@ -6411,5 +6412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+#line 934 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
@@ -6418,5 +6419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 933 "parser.yy"
+#line 936 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6425,5 +6426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
+#line 941 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6432,5 +6433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 940 "parser.yy"
+#line 943 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6439,5 +6440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 945 "parser.yy"
+#line 948 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6446,5 +6447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 952 "parser.yy"
+#line 955 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6453,5 +6454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
+#line 960 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6460,5 +6461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 959 "parser.yy"
+#line 962 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6467,5 +6468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+#line 967 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6474,5 +6475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 966 "parser.yy"
+#line 969 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6481,5 +6482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
+#line 971 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6488,5 +6489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 973 "parser.yy"
+#line 976 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6495,5 +6496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 975 "parser.yy"
+#line 978 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6502,5 +6503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
+#line 985 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6509,5 +6510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
+#line 992 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6516,5 +6517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 994 "parser.yy"
+#line 997 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6523,5 +6524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
+#line 1004 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6530,5 +6531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1015 "parser.yy"
+#line 1018 "parser.yy"
     {}
     break;
@@ -6537,5 +6538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+#line 1019 "parser.yy"
     {}
     break;
@@ -6544,5 +6545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1045 "parser.yy"
+#line 1048 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6554,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1052 "parser.yy"
+#line 1055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6564,5 +6565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1057 "parser.yy"
+#line 1060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6574,5 +6575,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+#line 1070 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6584,5 +6585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1075 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6594,5 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+#line 1080 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6604,5 +6605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1085 "parser.yy"
+#line 1088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6614,5 +6615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1090 "parser.yy"
+#line 1093 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6624,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+#line 1098 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6634,5 +6635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+#line 1103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6644,5 +6645,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+#line 1108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6654,5 +6655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1113 "parser.yy"
+#line 1116 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6663,5 +6664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1136 "parser.yy"
+#line 1139 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6672,5 +6673,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1140 "parser.yy"
+#line 1143 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6681,5 +6682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1147 "parser.yy"
+#line 1150 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6688,5 +6689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1151 "parser.yy"
+#line 1154 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6695,5 +6696,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1156 "parser.yy"
+#line 1159 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6705,5 +6706,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1161 "parser.yy"
+#line 1164 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6715,5 +6716,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+#line 1169 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6725,5 +6726,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1177 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6735,5 +6736,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1182 "parser.yy"
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6745,5 +6746,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1187 "parser.yy"
+#line 1190 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6755,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+#line 1195 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6765,5 +6766,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1200 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6775,5 +6776,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1206 "parser.yy"
+#line 1209 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6785,5 +6786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1211 "parser.yy"
+#line 1214 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6795,5 +6796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1228 "parser.yy"
+#line 1231 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6805,5 +6806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1233 "parser.yy"
+#line 1236 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6815,5 +6816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1255 "parser.yy"
+#line 1258 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6822,5 +6823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
+#line 1270 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6829,5 +6830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1278 "parser.yy"
+#line 1281 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6836,5 +6837,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1280 "parser.yy"
+#line 1283 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6843,5 +6844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+#line 1285 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6850,5 +6851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
+#line 1287 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6857,5 +6858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
+#line 1289 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6864,5 +6865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
+#line 1291 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6873,5 +6874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
+#line 1295 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6883,5 +6884,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+#line 1304 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6890,5 +6891,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+#line 1306 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6897,5 +6898,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+#line 1317 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6904,5 +6905,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1323 "parser.yy"
+#line 1326 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6911,5 +6912,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1325 "parser.yy"
+#line 1328 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6918,5 +6919,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1327 "parser.yy"
+#line 1330 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6925,5 +6926,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1332 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6932,5 +6933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
+#line 1334 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6939,5 +6940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+#line 1336 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6946,5 +6947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+#line 1338 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6953,5 +6954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1340 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6960,5 +6961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6967,5 +6968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6974,5 +6975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
+#line 1349 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6981,5 +6982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
+#line 1351 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6988,5 +6989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
+#line 1353 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6995,5 +6996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
+#line 1355 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -7002,5 +7003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
+#line 1357 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -7009,5 +7010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
+#line 1359 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -7016,5 +7017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
+#line 1361 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -7023,5 +7024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+#line 1363 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -7030,5 +7031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+#line 1365 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -7037,5 +7038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+#line 1367 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -7044,5 +7045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1369 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -7051,5 +7052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1373 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7058,5 +7059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1375 "parser.yy"
+#line 1378 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7065,5 +7066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1377 "parser.yy"
+#line 1380 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7072,5 +7073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
+#line 1382 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7079,5 +7080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7086,5 +7087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
+#line 1395 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7093,5 +7094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
+#line 1397 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7100,5 +7101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1396 "parser.yy"
+#line 1399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7107,5 +7108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+#line 1404 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -7114,5 +7115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+#line 1406 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7121,5 +7122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+#line 1408 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7128,5 +7129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+#line 1410 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7135,5 +7136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7142,5 +7143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7149,5 +7150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
+#line 1420 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7156,5 +7157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1423 "parser.yy"
+#line 1426 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7163,5 +7164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
+#line 1428 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7170,5 +7171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
+#line 1434 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7177,5 +7178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1433 "parser.yy"
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7184,5 +7185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1435 "parser.yy"
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7191,5 +7192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+#line 1443 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7198,5 +7199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
+#line 1445 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7205,5 +7206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1444 "parser.yy"
+#line 1447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7212,5 +7213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+#line 1457 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -7219,5 +7220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+#line 1459 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7229,5 +7230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1461 "parser.yy"
+#line 1464 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7236,5 +7237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1463 "parser.yy"
+#line 1466 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -7243,5 +7244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1465 "parser.yy"
+#line 1468 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -7250,5 +7251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1467 "parser.yy"
+#line 1470 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7257,5 +7258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1472 "parser.yy"
+#line 1475 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7264,5 +7265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1474 "parser.yy"
+#line 1477 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7271,5 +7272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1482 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7278,5 +7279,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
+#line 1484 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7285,5 +7286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1490 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7292,5 +7293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1490 "parser.yy"
+#line 1493 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7303,5 +7304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1500 "parser.yy"
+#line 1503 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7310,5 +7311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
+#line 1505 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7317,5 +7318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
+#line 1507 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7324,5 +7325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
+#line 1512 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7331,5 +7332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
+#line 1514 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7338,5 +7339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
+#line 1519 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7345,16 +7346,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
+#line 1521 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
   case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 389:
 
 /* Line 1806 of yacc.c  */
@@ -7363,8 +7357,15 @@
     break;
 
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1527 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
   case 391:
 
 /* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
+#line 1533 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7373,5 +7374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
+#line 1535 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7380,5 +7381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1537 "parser.yy"
+#line 1540 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7387,5 +7388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1546 "parser.yy"
+#line 1549 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7394,5 +7395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1548 "parser.yy"
+#line 1551 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7404,5 +7405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1553 "parser.yy"
+#line 1556 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7411,5 +7412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
+#line 1558 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7418,5 +7419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1563 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7425,5 +7426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
+#line 1565 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7432,5 +7433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
+#line 1570 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7439,5 +7440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+#line 1572 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7446,5 +7447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
+#line 1579 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7453,5 +7454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+#line 1587 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7460,5 +7461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1586 "parser.yy"
+#line 1589 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7467,5 +7468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1588 "parser.yy"
+#line 1591 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7474,5 +7475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1596 "parser.yy"
+#line 1599 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7481,5 +7482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
+#line 1601 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7488,5 +7489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
+#line 1603 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7495,5 +7496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1606 "parser.yy"
+#line 1609 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7502,5 +7503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1611 "parser.yy"
+#line 1614 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7509,5 +7510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1618 "parser.yy"
+#line 1621 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7516,5 +7517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1625 "parser.yy"
+#line 1628 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7523,16 +7524,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1627 "parser.yy"
+#line 1630 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 425:
-
-/* Line 1806 of yacc.c  */
-#line 1636 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 426:
 
 /* Line 1806 of yacc.c  */
@@ -7541,8 +7535,15 @@
     break;
 
+  case 426:
+
+/* Line 1806 of yacc.c  */
+#line 1642 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
   case 427:
 
 /* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
+#line 1644 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7551,5 +7552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1654 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7558,5 +7559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1657 "parser.yy"
+#line 1660 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7568,5 +7569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1662 "parser.yy"
+#line 1665 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7578,5 +7579,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1671 "parser.yy"
+#line 1674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7585,5 +7586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
+#line 1683 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7592,5 +7593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1682 "parser.yy"
+#line 1685 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7599,5 +7600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1707 "parser.yy"
+#line 1710 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7606,5 +7607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1715 "parser.yy"
+#line 1718 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7613,5 +7614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1720 "parser.yy"
+#line 1723 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7620,5 +7621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1722 "parser.yy"
+#line 1725 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7627,5 +7628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1724 "parser.yy"
+#line 1727 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7634,5 +7635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1728 "parser.yy"
+#line 1731 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7641,5 +7642,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1729 "parser.yy"
+#line 1732 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7648,5 +7649,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
+#line 1737 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7655,5 +7656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
+#line 1739 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7662,5 +7663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
+#line 1740 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7669,5 +7670,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1739 "parser.yy"
+#line 1742 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7676,5 +7677,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1755 "parser.yy"
+#line 1758 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
@@ -7683,5 +7684,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
+#line 1764 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
@@ -7690,5 +7691,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1769 "parser.yy"
+#line 1772 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -7697,5 +7698,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1771 "parser.yy"
+#line 1774 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7704,5 +7705,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
+#line 1777 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7711,5 +7712,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1776 "parser.yy"
+#line 1779 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7718,5 +7719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1778 "parser.yy"
+#line 1781 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     break;
@@ -7725,5 +7726,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
+#line 1783 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
@@ -7732,5 +7733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1804 "parser.yy"
+#line 1807 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7739,5 +7740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+#line 1809 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7746,5 +7747,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
+#line 1811 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7753,5 +7754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1814 "parser.yy"
+#line 1817 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7760,5 +7761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1816 "parser.yy"
+#line 1819 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7767,5 +7768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1821 "parser.yy"
+#line 1824 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7774,5 +7775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+#line 1830 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7781,5 +7782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1832 "parser.yy"
+#line 1835 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7788,5 +7789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+#line 1837 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7795,5 +7796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1840 "parser.yy"
+#line 1843 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7802,5 +7803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1842 "parser.yy"
+#line 1845 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7809,5 +7810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
+#line 1847 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7816,5 +7817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1849 "parser.yy"
+#line 1852 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7823,5 +7824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
+#line 1854 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7830,5 +7831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1859 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7840,5 +7841,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1861 "parser.yy"
+#line 1864 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7847,5 +7848,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1866 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7854,5 +7855,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
+#line 1871 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -7861,5 +7862,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1871 "parser.yy"
+#line 1874 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
@@ -7868,5 +7869,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+#line 1876 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7875,5 +7876,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1878 "parser.yy"
+#line 1881 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7882,5 +7883,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1880 "parser.yy"
+#line 1883 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7889,5 +7890,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
+#line 1885 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7896,5 +7897,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1887 "parser.yy"
+#line 1890 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7903,5 +7904,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1889 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7910,5 +7911,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1894 "parser.yy"
+#line 1897 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7920,5 +7921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1899 "parser.yy"
+#line 1902 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7930,5 +7931,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1907 "parser.yy"
+#line 1910 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7940,5 +7941,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1912 "parser.yy"
+#line 1915 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7950,5 +7951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1917 "parser.yy"
+#line 1920 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7961,5 +7962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1927 "parser.yy"
+#line 1930 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7968,5 +7969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1937 "parser.yy"
+#line 1940 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7978,5 +7979,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1942 "parser.yy"
+#line 1945 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7988,5 +7989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+#line 1950 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7998,5 +7999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1955 "parser.yy"
+#line 1958 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8008,5 +8009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1960 "parser.yy"
+#line 1963 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -8018,5 +8019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+#line 1973 "parser.yy"
     {}
     break;
@@ -8025,5 +8026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+#line 1975 "parser.yy"
     {
 			if ( theTree ) {
@@ -8038,5 +8039,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1984 "parser.yy"
+#line 1987 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -8045,5 +8046,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1989 "parser.yy"
+#line 1992 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8052,5 +8053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1997 "parser.yy"
+#line 2000 "parser.yy"
     {}
     break;
@@ -8059,5 +8060,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1999 "parser.yy"
+#line 2002 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -8069,5 +8070,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2004 "parser.yy"
+#line 2007 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -8080,5 +8081,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+#line 2013 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -8091,5 +8092,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+#line 2028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8102,5 +8103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+#line 2034 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8113,5 +8114,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2040 "parser.yy"
+#line 2043 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8124,5 +8125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+#line 2049 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8135,5 +8136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2052 "parser.yy"
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8146,5 +8147,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2058 "parser.yy"
+#line 2061 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8157,5 +8158,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+#line 2067 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8168,5 +8169,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8179,5 +8180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+#line 2081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8190,5 +8191,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2086 "parser.yy"
+#line 2089 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8201,5 +8202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+#line 2095 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8212,5 +8213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
+#line 2110 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -8219,5 +8220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2117 "parser.yy"
+#line 2120 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8226,5 +8227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2124 "parser.yy"
+#line 2127 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8233,30 +8234,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2130 "parser.yy"
+#line 2133 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
   case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2145 "parser.yy"
-    {}
-    break;
-
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2146 "parser.yy"
-    {}
-    break;
-
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2147 "parser.yy"
-    {}
-    break;
-
-  case 563:
 
 /* Line 1806 of yacc.c  */
@@ -8265,12 +8245,26 @@
     break;
 
+  case 561:
+
+/* Line 1806 of yacc.c  */
+#line 2149 "parser.yy"
+    {}
+    break;
+
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2150 "parser.yy"
+    {}
+    break;
+
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2151 "parser.yy"
+    {}
+    break;
+
   case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2183 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 566:
 
 /* Line 1806 of yacc.c  */
@@ -8279,8 +8273,15 @@
     break;
 
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2189 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 567:
 
 /* Line 1806 of yacc.c  */
-#line 2188 "parser.yy"
+#line 2191 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8289,5 +8290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2193 "parser.yy"
+#line 2196 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8299,5 +8300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2198 "parser.yy"
+#line 2201 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8306,5 +8307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2203 "parser.yy"
+#line 2206 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8313,5 +8314,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+#line 2208 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8320,5 +8321,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+#line 2210 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8327,5 +8328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2215 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8334,5 +8335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+#line 2217 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8341,5 +8342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+#line 2219 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8348,5 +8349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+#line 2221 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8355,5 +8356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+#line 2226 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8362,16 +8363,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+#line 2228 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 581:
 
 /* Line 1806 of yacc.c  */
@@ -8380,8 +8374,15 @@
     break;
 
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2240 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 582:
 
 /* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+#line 2245 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8390,5 +8391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2244 "parser.yy"
+#line 2247 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8397,5 +8398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+#line 2249 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8404,5 +8405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
+#line 2254 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8411,5 +8412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
+#line 2256 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8418,5 +8419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
+#line 2258 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8425,5 +8426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+#line 2263 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8432,5 +8433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
+#line 2265 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8439,5 +8440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
+#line 2267 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8446,5 +8447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
+#line 2282 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8453,5 +8454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2281 "parser.yy"
+#line 2284 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8460,5 +8461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
+#line 2286 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8467,5 +8468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2288 "parser.yy"
+#line 2291 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8474,5 +8475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
+#line 2293 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8481,5 +8482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
+#line 2295 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8488,5 +8489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
+#line 2300 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8495,5 +8496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
+#line 2302 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8502,16 +8503,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2301 "parser.yy"
+#line 2304 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 605:
 
 /* Line 1806 of yacc.c  */
@@ -8520,8 +8514,15 @@
     break;
 
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2322 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 606:
 
 /* Line 1806 of yacc.c  */
-#line 2321 "parser.yy"
+#line 2324 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8530,5 +8531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+#line 2330 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8537,5 +8538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+#line 2335 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8544,5 +8545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2334 "parser.yy"
+#line 2337 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8551,5 +8552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2336 "parser.yy"
+#line 2339 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8558,5 +8559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
+#line 2344 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8565,5 +8566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8572,5 +8573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
+#line 2348 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8579,5 +8580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8586,5 +8587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
+#line 2355 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8593,5 +8594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
+#line 2357 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8600,16 +8601,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
+#line 2359 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 621:
 
 /* Line 1806 of yacc.c  */
@@ -8618,8 +8612,15 @@
     break;
 
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2372 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 622:
 
 /* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
+#line 2374 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8628,5 +8629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
+#line 2379 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8635,5 +8636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
+#line 2381 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8642,5 +8643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+#line 2383 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8649,5 +8650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
+#line 2388 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8656,5 +8657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8663,5 +8664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
+#line 2392 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8670,5 +8671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
+#line 2394 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8677,5 +8678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8684,5 +8685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8691,16 +8692,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2431 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
 
 /* Line 1806 of yacc.c  */
@@ -8709,8 +8703,15 @@
     break;
 
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2437 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 636:
 
 /* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
+#line 2439 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8719,5 +8720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2441 "parser.yy"
+#line 2444 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8729,5 +8730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2446 "parser.yy"
+#line 2449 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8739,5 +8740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2454 "parser.yy"
+#line 2457 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8746,5 +8747,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2456 "parser.yy"
+#line 2459 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8753,5 +8754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8760,5 +8761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2463 "parser.yy"
+#line 2466 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8767,5 +8768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2468 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8774,5 +8775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+#line 2473 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8781,5 +8782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8788,5 +8789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+#line 2490 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8795,5 +8796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+#line 2492 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8802,5 +8803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
+#line 2497 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8809,5 +8810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2496 "parser.yy"
+#line 2499 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8816,5 +8817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+#line 2501 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8823,5 +8824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+#line 2503 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8830,5 +8831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2502 "parser.yy"
+#line 2505 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8837,5 +8838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2511 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8844,5 +8845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+#line 2513 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8851,5 +8852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+#line 2515 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8858,5 +8859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2517 "parser.yy"
+#line 2520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8865,5 +8866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+#line 2522 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8872,5 +8873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+#line 2524 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8879,5 +8880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+#line 2530 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8886,5 +8887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+#line 2532 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8893,5 +8894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+#line 2538 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8900,5 +8901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+#line 2540 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8907,5 +8908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
+#line 2542 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8914,5 +8915,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+#line 2544 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8921,5 +8922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
+#line 2559 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8928,5 +8929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
+#line 2561 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8935,5 +8936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2563 "parser.yy"
+#line 2566 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8942,5 +8943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
+#line 2568 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8949,5 +8950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+#line 2570 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8956,5 +8957,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+#line 2572 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8963,5 +8964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2571 "parser.yy"
+#line 2574 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8970,5 +8971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
+#line 2580 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8977,5 +8978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8984,5 +8985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+#line 2584 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8991,5 +8992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2586 "parser.yy"
+#line 2589 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8998,5 +8999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+#line 2591 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -9005,5 +9006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+#line 2593 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9012,5 +9013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
+#line 2600 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9019,5 +9020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
+#line 2611 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -9026,5 +9027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+#line 2614 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9033,5 +9034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2613 "parser.yy"
+#line 2616 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -9040,5 +9041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
+#line 2619 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9047,5 +9048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2618 "parser.yy"
+#line 2621 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -9054,5 +9055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
+#line 2623 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -9061,5 +9062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
+#line 2637 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9068,5 +9069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2636 "parser.yy"
+#line 2639 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9075,5 +9076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2641 "parser.yy"
+#line 2644 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -9082,5 +9083,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
+#line 2646 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9089,5 +9090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
+#line 2648 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9096,5 +9097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -9103,5 +9104,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
+#line 2652 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9110,5 +9111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2658 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -9117,5 +9118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+#line 2660 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -9124,5 +9125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+#line 2662 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9131,5 +9132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2664 "parser.yy"
+#line 2667 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -9138,5 +9139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9145,5 +9146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
+#line 2679 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9152,5 +9153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
+#line 2689 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9159,5 +9160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+#line 2691 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9166,5 +9167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+#line 2693 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9173,5 +9174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+#line 2695 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9180,5 +9181,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+#line 2697 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9187,5 +9188,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
+#line 2699 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9194,5 +9195,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2703 "parser.yy"
+#line 2706 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9201,5 +9202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
+#line 2708 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9208,5 +9209,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
+#line 2710 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9215,5 +9216,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
+#line 2712 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9222,5 +9223,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
+#line 2714 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9229,5 +9230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
+#line 2716 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9236,5 +9237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
+#line 2718 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9243,5 +9244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+#line 2720 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9250,5 +9251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9257,5 +9258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9264,5 +9265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2726 "parser.yy"
+#line 2729 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9271,5 +9272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
+#line 2731 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9278,5 +9279,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2733 "parser.yy"
+#line 2736 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9285,5 +9286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+#line 2738 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9292,5 +9293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+#line 2765 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9299,5 +9300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
+#line 2776 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9306,5 +9307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2775 "parser.yy"
+#line 2778 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9313,5 +9314,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2777 "parser.yy"
+#line 2780 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9320,5 +9321,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2779 "parser.yy"
+#line 2782 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9327,5 +9328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2781 "parser.yy"
+#line 2784 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9334,5 +9335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2783 "parser.yy"
+#line 2786 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9341,5 +9342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2790 "parser.yy"
+#line 2793 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9348,5 +9349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
+#line 2795 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9355,5 +9356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2794 "parser.yy"
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9362,5 +9363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2796 "parser.yy"
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9369,5 +9370,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2798 "parser.yy"
+#line 2801 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9376,5 +9377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
+#line 2803 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9383,5 +9384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2808 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9390,5 +9391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2810 "parser.yy"
+#line 2813 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9397,5 +9398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2812 "parser.yy"
+#line 2815 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9404,5 +9405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2814 "parser.yy"
+#line 2817 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9411,5 +9412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2838 "parser.yy"
+#line 2841 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9418,5 +9419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2840 "parser.yy"
+#line 2843 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9425,5 +9426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9428 "Parser/parser.cc"
+#line 9429 "Parser/parser.cc"
       default: break;
     }
@@ -9656,5 +9657,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2843 "parser.yy"
+#line 2846 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/Parser/parser.h	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -274,4 +274,5 @@
 	LabelNode *label;
 	InitializerNode *in;
+	OperatorNode::Type op;
 	bool flag;
 
@@ -279,5 +280,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 282 "Parser/parser.h"
+#line 283 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 76e8c55c6d650ecf639cf8cc657c2c1c0b2bfb3c)
+++ src/Parser/parser.yy	(revision 064e3ff2b3dfcd555b84c4fe38cfd9dc42a8728a)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:28:18 2016
-// Update Count     : 1672
+// Last Modified On : Thu Aug  4 16:56:28 2016
+// Update Count     : 1694
 //
 
@@ -119,4 +119,5 @@
 	LabelNode *label;
 	InitializerNode *in;
+	OperatorNode::Type op;
 	bool flag;
 }
@@ -129,5 +130,6 @@
 %type<constant> constant
 %type<en> tuple							tuple_expression_list
-%type<en> ptrref_operator				unary_operator				assignment_operator
+%type<op> ptrref_operator
+%type<en> unary_operator				assignment_operator
 %type<en> primary_expression			postfix_expression			unary_expression
 %type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
@@ -360,8 +362,8 @@
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), $1, new VarRefNode( $3 )); }
+		{ $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), $1, new VarRefNode( $3 )); }
+		{ $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
@@ -410,11 +412,11 @@
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $3 ); }
+		{ $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( $1 ), $5 ); }
+		{ $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $3 ); }
+		{ $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( $1 ), $5 ); }
+		{ $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
 	;
 
@@ -430,5 +432,5 @@
 		{ $$ = $2->set_extension( true ); }
 	| ptrref_operator cast_expression					// CFA
-		{ $$ = new CompositeExprNode( $1, $2 ); }
+	{ $$ = $1 == OperatorNode::AddressOf ? (ExpressionNode*) new CompositeExprNode2( build_addressOf( $2 ) ) : (ExpressionNode*)new CompositeExprNode( new OperatorNode ( $1 ), $2 ); }
 		// '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
 		//		{ * X; }	 // dereference X
@@ -441,9 +443,9 @@
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), $2 ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), $2 ); }
+		{ $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
+		{ $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
+		{ $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
 	| ATTR_IDENTIFIER
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
@@ -453,7 +455,7 @@
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 ), $3 ); }
 	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), $2 ); }
+		{ $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
 	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( $3 ) ); }
+		{ $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
 //		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
@@ -461,8 +463,8 @@
 
 ptrref_operator:
-	'*'											{ $$ = new OperatorNode( OperatorNode::PointTo ); }
-	| '&'										{ $$ = new OperatorNode( OperatorNode::AddressOf ); }
+	'*'											{ $$ = OperatorNode::PointTo; }
+	| '&'										{ $$ = OperatorNode::AddressOf; }
 		// GCC, address of label must be handled by semantic check for ref,ref,label
-	| ANDAND									{ $$ = new OperatorNode( OperatorNode::And ); }
+	| ANDAND									{ $$ = OperatorNode::And; }
 	;
 
@@ -477,7 +479,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
+		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( $2 ), $4 ); }
+		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	;
 
@@ -742,4 +744,5 @@
 case_value_list:										// CFA
 	case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
+		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
 	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode( StatementNode::Case, $3, 0 ) ) ); }
 	;
