Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 71a3593146d24665b26d962ad83af645b8cb9505)
+++ src/Parser/ExpressionNode.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 11:39:25 2016
-// Update Count     : 391
+// Last Modified On : Fri Aug  5 15:07:19 2016
+// Update Count     : 409
 //
 
@@ -238,77 +238,21 @@
 //##############################################################################
 
-static const char *opName[] = {
-	"TupleC", "Comma", "TupleFieldSel", // "TuplePFieldSel", // n-adic
-	// triadic
-	"Cond", "NCond",
+static const char *OperName[] = {
 	// diadic
 	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
-	"?[?]", "FieldSel", "PFieldSel", "...",
+	"?[?]", "...",
 	// monadic
 	"+?", "-?", "AddressOf", "*?", "!?", "~?", "++?", "?++", "--?", "?--", "&&"
 };
 
-OperatorNode::OperatorNode( Type t ) : type( t ) {}
-
-OperatorNode::OperatorNode( const OperatorNode &other ) : ExpressionNode( other ), type( other.type ) {
-}
-
-OperatorNode::~OperatorNode() {}
-
-OperatorNode::Type OperatorNode::get_type( void ) const {
-	return type;
-}
-
-void OperatorNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << opName[ type ] << ' ';
-}
-
-void OperatorNode::print( std::ostream &os, int indent ) const{
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Operator: " << opName[type] << endl;
-	return;
-}
-
-const char *OperatorNode::get_typename( void ) const{
-	return opName[ type ];
-}
-
-//##############################################################################
-
-CompositeExprNode::CompositeExprNode() : ExpressionNode(), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( const string *name_ ) : ExpressionNode( name_ ), function( 0 ), arguments( 0 ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *args ):
-	function( f ), arguments( args ) {
-}
-
-CompositeExprNode::CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 ):
-	function( f ), arguments( arg1 ) {
-	arguments->set_link( arg2 );
-}
-
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : ExpressionNode( other ), function( maybeClone( other.function ) ), arguments( 0 ) {
-	ParseNode *cur = other.arguments;
-	while ( cur ) {
-		if ( arguments ) {
-			arguments->set_link( cur->clone() );
-		} else {
-			arguments = ( ExpressionNode*)cur->clone();
-		} // if
-		cur = cur->get_link();
-	}
-}
-
-CompositeExprNode::~CompositeExprNode() {
-	delete function;
-	delete arguments;
-}
-
+//##############################################################################
+
+CompositeExprNode::CompositeExprNode( Expression *expr ) : expr( expr ) {}
+CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
+CompositeExprNode::~CompositeExprNode() { delete expr; }
+void CompositeExprNode::print( std::ostream &, int indent ) const { assert( false ); }
+void CompositeExprNode::printOneLine( std::ostream &, int indent ) const { assert( false ); }
 
 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
@@ -369,25 +313,25 @@
 }
 
-Expression *build_unary_val( OperatorNode::Type op, ExpressionNode *expr_node ) {
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node ) {
 	std::list<Expression *> args;
 	args.push_back( maybeBuild<Expression>(expr_node) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
-}
-Expression *build_unary_ptr( OperatorNode::Type op, ExpressionNode *expr_node ) {
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node ) {
 	std::list<Expression *> args;
 	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node) ) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
-}
-Expression *build_binary_val( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
 	std::list<Expression *> args;
 	args.push_back( maybeBuild<Expression>(expr_node1) );
 	args.push_back( maybeBuild<Expression>(expr_node2) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
-}
-Expression *build_binary_ptr( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
+}
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 ) {
 	std::list<Expression *> args;
 	args.push_back( new AddressExpr( maybeBuild<Expression>(expr_node1) ) );
 	args.push_back( maybeBuild<Expression>(expr_node2) );
-	return new UntypedExpr( new NameExpr( opName[ op ] ), args );
+	return new UntypedExpr( new NameExpr( OperName[ (int)op ] ), args );
 }
 
@@ -421,69 +365,8 @@
 }
 
-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 {
-	OperatorNode *op;
-	std::list<Expression *> args;
-
-	buildList( get_args(), args );
-
-	if ( ! ( op = dynamic_cast<OperatorNode *>( function ) ) ) { // function as opposed to operator
-		return new UntypedExpr( maybeBuild<Expression>(function), args, maybeBuild< Expression >( get_argName() ));
-	} // if
-
-	assert( ((void)"CompositeExprNode::build", false) );
-	return nullptr;
-}
-
-void CompositeExprNode::printOneLine( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << "( ";
-	function->printOneLine( os, indent );
-	for ( ExpressionNode *cur = arguments; cur != 0; cur = dynamic_cast< ExpressionNode* >( cur->get_link() ) ) {
-		cur->printOneLine( os, indent );
-	} // for
-	os << ") ";
-}
-
-void CompositeExprNode::print( std::ostream &os, int indent ) const {
-	printDesignation( os );
-	os << string( indent, ' ' ) << "Application of: " << endl;
-	function->print( os, indent + ParseNode::indent_by );
-
-	os << string( indent, ' ' ) ;
-	if ( arguments ) {
-		os << "... on arguments: " << endl;
-		arguments->printList( os, indent + ParseNode::indent_by );
-	} else
-		os << "... on no arguments: " << endl;
-}
-
-void CompositeExprNode::set_function( ExpressionNode *f ) {
-	function = f;
-}
-
-void CompositeExprNode::set_args( ExpressionNode *args ) {
-	arguments = args;
-}
-
-ExpressionNode *CompositeExprNode::get_function( void ) const {
-	return function;
-}
-
-ExpressionNode *CompositeExprNode::get_args( void ) const {
-	return arguments;
-}
-
-void CompositeExprNode::add_arg( ExpressionNode *arg ) {
-	if ( arguments )
-		arguments->set_link( arg );
-	else
-		set_args( arg );
+Expression *build_range( ExpressionNode * low, ExpressionNode *high ) {
+	Expression *low_cexpr = maybeBuild<Expression>( low );
+	Expression *high_cexpr = maybeBuild<Expression>( high );
+	return new RangeExpr( low_cexpr, high_cexpr );
 }
 
@@ -676,29 +559,4 @@
 }
 
-ExpressionNode *flattenCommas( ExpressionNode *list ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( list ) ) {
-		OperatorNode *op;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::Comma ) ) {
-			if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-				composite->add_arg( next );
-			return flattenCommas( composite->get_args() );
-		} // if
-	} // if
-
-	if ( ExpressionNode *next = dynamic_cast< ExpressionNode * >( list->get_link() ) )
-		list->set_next( flattenCommas( next ) );
-
-	return list;
-}
-
-ExpressionNode *tupleContents( ExpressionNode *tuple ) {
-	if ( CompositeExprNode *composite = dynamic_cast< CompositeExprNode * >( tuple ) ) {
-		OperatorNode *op = 0;
-		if ( ( op = dynamic_cast< OperatorNode * >( composite->get_function() )) && ( op->get_type() == OperatorNode::TupleC ) )
-			return composite->get_args();
-	} // if
-	return tuple;
-}
-
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 71a3593146d24665b26d962ad83af645b8cb9505)
+++ src/Parser/ParseNode.h	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 11:42:50 2016
-// Update Count     : 293
+// Last Modified On : Fri Aug  5 13:40:15 2016
+// Update Count     : 307
 //
 
@@ -193,34 +193,13 @@
 };
 
-class OperatorNode : public ExpressionNode {
-  public:
-	enum Type { TupleC, Comma, TupleFieldSel, // n-adic
-				// triadic
-				Cond, NCond,
-				// diadic
-				SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
-				BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
-				Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
-				Index, FieldSel, PFieldSel, Range,
-				// monadic
-				UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
-				Ctor, Dtor,
-	};
-
-	OperatorNode( Type t );
-	OperatorNode( const OperatorNode &other );
-	virtual ~OperatorNode();
-
-	virtual OperatorNode *clone() const { return new OperatorNode( *this ); }
-
-	Type get_type() const;
-	const char *get_typename() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	virtual Expression *build() const { return 0; }
-  private:
-	Type type;
+enum class OperKinds {
+	// diadic
+	SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
+	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
+	Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
+	Index, Range,
+	// monadic
+	UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
+	Ctor, Dtor,
 };
 
@@ -234,8 +213,8 @@
 Expression *build_and( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_and_or( ExpressionNode *expr_node1, ExpressionNode *expr_node2, bool kind );
-Expression *build_unary_val( OperatorNode::Type op, ExpressionNode *expr_node );
-Expression *build_unary_ptr( OperatorNode::Type op, ExpressionNode *expr_node );
-Expression *build_binary_val( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
-Expression *build_binary_ptr( OperatorNode::Type op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_unary_val( OperKinds op, ExpressionNode *expr_node );
+Expression *build_unary_ptr( OperKinds op, ExpressionNode *expr_node );
+Expression *build_binary_val( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
+Expression *build_binary_ptr( OperKinds op, ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
 Expression *build_cond( ExpressionNode *expr_node1, ExpressionNode *expr_node2, ExpressionNode *expr_node3 );
 Expression *build_comma( ExpressionNode *expr_node1, ExpressionNode *expr_node2 );
@@ -243,12 +222,13 @@
 Expression *build_tuple( ExpressionNode * expr = 0 );
 Expression *build_func( ExpressionNode * function, ExpressionNode * expr );
-
-class CompositeExprNode2 : public ExpressionNode {
-  public:
-	CompositeExprNode2( Expression *expr );
-	CompositeExprNode2( const CompositeExprNode2 &other );
-	virtual ~CompositeExprNode2();
-
-	virtual CompositeExprNode2 *clone() const { return new CompositeExprNode2( *this ); }
+Expression *build_range( ExpressionNode * low, ExpressionNode *high );
+
+class CompositeExprNode : public ExpressionNode {
+  public:
+	CompositeExprNode( Expression *expr );
+	CompositeExprNode( const CompositeExprNode &other );
+	virtual ~CompositeExprNode();
+
+	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
 	virtual Expression *build() const { return expr->clone(); }
 
@@ -257,31 +237,4 @@
   private:
 	Expression *expr;
-};
-
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode();
-	CompositeExprNode( const std::string * );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *args = 0 );
-	CompositeExprNode( ExpressionNode *f, ExpressionNode *arg1, ExpressionNode *arg2 );
-	CompositeExprNode( const CompositeExprNode &other );
-	virtual ~CompositeExprNode();
-
-	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	void set_function( ExpressionNode * );
-	void set_args( ExpressionNode * );
-
-	void add_arg( ExpressionNode * );
-
-	ExpressionNode *get_function() const;
-	ExpressionNode *get_args() const;
-  private:
-	ExpressionNode *function;
-	ExpressionNode *arguments;
 };
 
@@ -636,8 +589,4 @@
 void buildTypeList( const DeclarationNode *firstNode, std::list< Type * > &outputList );
 
-// in ExpressionNode.cc
-ExpressionNode *flattenCommas( ExpressionNode *list );
-ExpressionNode *tupleContents( ExpressionNode *tuple );
-
 #endif // PARSENODE_H
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 71a3593146d24665b26d962ad83af645b8cb9505)
+++ src/Parser/parser.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
@@ -354,5 +354,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
@@ -1026,70 +1026,70 @@
      517,   519,   524,   525,   527,   529,   531,   536,   537,   539,
      544,   545,   550,   551,   556,   557,   562,   563,   568,   569,
-     574,   575,   577,   579,   584,   589,   590,   592,   598,   599,
-     603,   604,   605,   606,   607,   608,   609,   610,   611,   612,
-     613,   619,   621,   623,   625,   630,   631,   636,   637,   643,
-     644,   650,   651,   652,   653,   654,   655,   656,   657,   658,
-     667,   674,   676,   686,   687,   692,   694,   700,   702,   706,
-     707,   712,   717,   720,   722,   724,   734,   736,   747,   748,
-     750,   754,   756,   760,   761,   766,   767,   771,   776,   777,
-     781,   783,   789,   790,   794,   796,   798,   800,   806,   807,
-     811,   813,   818,   820,   822,   827,   829,   834,   836,   840,
-     843,   847,   850,   854,   856,   860,   862,   869,   871,   873,
-     882,   884,   886,   888,   890,   895,   897,   899,   901,   906,
-     919,   920,   925,   927,   932,   936,   938,   940,   942,   944,
-     950,   951,   957,   958,   962,   963,   968,   970,   976,   977,
-     979,   984,   986,   993,   995,   999,  1000,  1005,  1007,  1011,
-    1012,  1016,  1018,  1022,  1023,  1027,  1028,  1032,  1033,  1048,
-    1049,  1050,  1051,  1052,  1056,  1061,  1068,  1078,  1083,  1088,
-    1096,  1101,  1106,  1111,  1116,  1124,  1146,  1151,  1158,  1160,
-    1167,  1172,  1177,  1188,  1193,  1198,  1203,  1208,  1217,  1222,
-    1230,  1231,  1232,  1233,  1239,  1244,  1252,  1253,  1254,  1255,
-    1259,  1260,  1261,  1262,  1267,  1268,  1277,  1278,  1283,  1284,
-    1289,  1291,  1293,  1295,  1297,  1300,  1299,  1311,  1312,  1314,
-    1324,  1325,  1330,  1334,  1336,  1338,  1340,  1342,  1344,  1346,
-    1348,  1353,  1355,  1357,  1359,  1361,  1363,  1365,  1367,  1369,
-    1371,  1373,  1375,  1377,  1383,  1384,  1386,  1388,  1390,  1395,
-    1396,  1402,  1403,  1405,  1407,  1412,  1414,  1416,  1418,  1423,
-    1424,  1426,  1428,  1433,  1434,  1436,  1441,  1442,  1444,  1446,
-    1451,  1453,  1455,  1460,  1461,  1465,  1467,  1473,  1472,  1476,
-    1478,  1483,  1485,  1491,  1492,  1497,  1498,  1500,  1501,  1510,
-    1511,  1513,  1515,  1520,  1522,  1528,  1529,  1531,  1534,  1537,
-    1542,  1543,  1548,  1553,  1557,  1559,  1565,  1564,  1571,  1573,
-    1579,  1580,  1588,  1589,  1593,  1594,  1595,  1597,  1599,  1606,
-    1607,  1609,  1611,  1616,  1617,  1623,  1624,  1628,  1629,  1634,
-    1635,  1636,  1638,  1646,  1647,  1649,  1652,  1654,  1658,  1659,
-    1660,  1662,  1664,  1668,  1673,  1681,  1682,  1691,  1693,  1698,
-    1699,  1700,  1704,  1705,  1706,  1710,  1711,  1712,  1716,  1717,
-    1718,  1723,  1724,  1725,  1726,  1732,  1733,  1735,  1740,  1741,
-    1746,  1747,  1748,  1749,  1750,  1765,  1766,  1771,  1772,  1780,
-    1782,  1784,  1787,  1789,  1791,  1814,  1815,  1817,  1819,  1824,
-    1825,  1827,  1832,  1837,  1838,  1844,  1843,  1847,  1851,  1853,
-    1855,  1861,  1862,  1867,  1872,  1874,  1879,  1881,  1882,  1884,
-    1889,  1891,  1893,  1898,  1900,  1905,  1910,  1918,  1924,  1923,
-    1937,  1938,  1943,  1944,  1948,  1953,  1958,  1966,  1971,  1982,
-    1983,  1994,  1995,  2001,  2002,  2006,  2007,  2008,  2011,  2010,
-    2021,  2030,  2036,  2042,  2051,  2057,  2063,  2069,  2075,  2083,
-    2089,  2097,  2103,  2112,  2113,  2114,  2118,  2122,  2124,  2129,
-    2130,  2134,  2135,  2140,  2146,  2147,  2150,  2152,  2153,  2157,
-    2158,  2159,  2160,  2194,  2196,  2197,  2199,  2204,  2209,  2214,
-    2216,  2218,  2223,  2225,  2227,  2229,  2234,  2236,  2245,  2247,
-    2248,  2253,  2255,  2257,  2262,  2264,  2266,  2271,  2273,  2275,
-    2284,  2285,  2286,  2290,  2292,  2294,  2299,  2301,  2303,  2308,
-    2310,  2312,  2327,  2329,  2330,  2332,  2337,  2338,  2343,  2345,
-    2347,  2352,  2354,  2356,  2358,  2363,  2365,  2367,  2377,  2379,
-    2380,  2382,  2387,  2389,  2391,  2396,  2398,  2400,  2402,  2407,
-    2409,  2411,  2442,  2444,  2445,  2447,  2452,  2457,  2465,  2467,
-    2469,  2474,  2476,  2481,  2483,  2497,  2498,  2500,  2505,  2507,
-    2509,  2511,  2513,  2518,  2519,  2521,  2523,  2528,  2530,  2532,
-    2538,  2540,  2542,  2546,  2548,  2550,  2552,  2566,  2567,  2569,
-    2574,  2576,  2578,  2580,  2582,  2587,  2588,  2590,  2592,  2597,
-    2599,  2601,  2607,  2608,  2610,  2619,  2622,  2624,  2627,  2629,
-    2631,  2644,  2645,  2647,  2652,  2654,  2656,  2658,  2660,  2665,
-    2666,  2668,  2670,  2675,  2677,  2685,  2686,  2687,  2692,  2693,
-    2697,  2699,  2701,  2703,  2705,  2707,  2714,  2716,  2718,  2720,
-    2722,  2724,  2726,  2728,  2730,  2732,  2737,  2739,  2741,  2746,
-    2772,  2773,  2775,  2779,  2780,  2784,  2786,  2788,  2790,  2792,
-    2794,  2801,  2803,  2805,  2807,  2809,  2811,  2816,  2821,  2823,
-    2825,  2843,  2845,  2850,  2851
+     574,   575,   578,   580,   585,   590,   591,   593,   599,   600,
+     604,   605,   606,   607,   608,   609,   610,   611,   612,   613,
+     614,   620,   622,   624,   626,   631,   632,   637,   638,   644,
+     645,   651,   652,   653,   654,   655,   656,   657,   658,   659,
+     669,   676,   678,   688,   689,   694,   696,   702,   704,   708,
+     709,   714,   719,   722,   724,   726,   736,   738,   749,   750,
+     752,   756,   758,   762,   763,   768,   769,   773,   778,   779,
+     783,   785,   791,   792,   796,   798,   800,   802,   808,   809,
+     813,   815,   820,   822,   824,   829,   831,   836,   838,   842,
+     845,   849,   852,   856,   858,   862,   864,   871,   873,   875,
+     884,   886,   888,   890,   892,   897,   899,   901,   903,   908,
+     921,   922,   927,   929,   934,   938,   940,   942,   944,   946,
+     952,   953,   959,   960,   964,   965,   970,   972,   978,   979,
+     981,   986,   988,   995,   997,  1001,  1002,  1007,  1009,  1013,
+    1014,  1018,  1020,  1024,  1025,  1029,  1030,  1034,  1035,  1050,
+    1051,  1052,  1053,  1054,  1058,  1063,  1070,  1080,  1085,  1090,
+    1098,  1103,  1108,  1113,  1118,  1126,  1148,  1153,  1160,  1162,
+    1169,  1174,  1179,  1190,  1195,  1200,  1205,  1210,  1219,  1224,
+    1232,  1233,  1234,  1235,  1241,  1246,  1254,  1255,  1256,  1257,
+    1261,  1262,  1263,  1264,  1269,  1270,  1279,  1280,  1285,  1286,
+    1291,  1293,  1295,  1297,  1299,  1302,  1301,  1313,  1314,  1316,
+    1326,  1327,  1332,  1336,  1338,  1340,  1342,  1344,  1346,  1348,
+    1350,  1355,  1357,  1359,  1361,  1363,  1365,  1367,  1369,  1371,
+    1373,  1375,  1377,  1379,  1385,  1386,  1388,  1390,  1392,  1397,
+    1398,  1404,  1405,  1407,  1409,  1414,  1416,  1418,  1420,  1425,
+    1426,  1428,  1430,  1435,  1436,  1438,  1443,  1444,  1446,  1448,
+    1453,  1455,  1457,  1462,  1463,  1467,  1469,  1475,  1474,  1478,
+    1480,  1485,  1487,  1493,  1494,  1499,  1500,  1502,  1503,  1512,
+    1513,  1515,  1517,  1522,  1524,  1530,  1531,  1533,  1536,  1539,
+    1544,  1545,  1550,  1555,  1559,  1561,  1567,  1566,  1573,  1575,
+    1581,  1582,  1590,  1591,  1595,  1596,  1597,  1599,  1601,  1608,
+    1609,  1611,  1613,  1618,  1619,  1625,  1626,  1630,  1631,  1636,
+    1637,  1638,  1640,  1648,  1649,  1651,  1654,  1656,  1660,  1661,
+    1662,  1664,  1666,  1670,  1675,  1683,  1684,  1693,  1695,  1700,
+    1701,  1702,  1706,  1707,  1708,  1712,  1713,  1714,  1718,  1719,
+    1720,  1725,  1726,  1727,  1728,  1734,  1735,  1737,  1742,  1743,
+    1748,  1749,  1750,  1751,  1752,  1767,  1768,  1773,  1774,  1782,
+    1784,  1786,  1789,  1791,  1793,  1816,  1817,  1819,  1821,  1826,
+    1827,  1829,  1834,  1839,  1840,  1846,  1845,  1849,  1853,  1855,
+    1857,  1863,  1864,  1869,  1874,  1876,  1881,  1883,  1884,  1886,
+    1891,  1893,  1895,  1900,  1902,  1907,  1912,  1920,  1926,  1925,
+    1939,  1940,  1945,  1946,  1950,  1955,  1960,  1968,  1973,  1984,
+    1985,  1996,  1997,  2003,  2004,  2008,  2009,  2010,  2013,  2012,
+    2023,  2032,  2038,  2044,  2053,  2059,  2065,  2071,  2077,  2085,
+    2091,  2099,  2105,  2114,  2115,  2116,  2120,  2124,  2126,  2131,
+    2132,  2136,  2137,  2142,  2148,  2149,  2152,  2154,  2155,  2159,
+    2160,  2161,  2162,  2196,  2198,  2199,  2201,  2206,  2211,  2216,
+    2218,  2220,  2225,  2227,  2229,  2231,  2236,  2238,  2247,  2249,
+    2250,  2255,  2257,  2259,  2264,  2266,  2268,  2273,  2275,  2277,
+    2286,  2287,  2288,  2292,  2294,  2296,  2301,  2303,  2305,  2310,
+    2312,  2314,  2329,  2331,  2332,  2334,  2339,  2340,  2345,  2347,
+    2349,  2354,  2356,  2358,  2360,  2365,  2367,  2369,  2379,  2381,
+    2382,  2384,  2389,  2391,  2393,  2398,  2400,  2402,  2404,  2409,
+    2411,  2413,  2444,  2446,  2447,  2449,  2454,  2459,  2467,  2469,
+    2471,  2476,  2478,  2483,  2485,  2499,  2500,  2502,  2507,  2509,
+    2511,  2513,  2515,  2520,  2521,  2523,  2525,  2530,  2532,  2534,
+    2540,  2542,  2544,  2548,  2550,  2552,  2554,  2568,  2569,  2571,
+    2576,  2578,  2580,  2582,  2584,  2589,  2590,  2592,  2594,  2599,
+    2601,  2603,  2609,  2610,  2612,  2621,  2624,  2626,  2629,  2631,
+    2633,  2646,  2647,  2649,  2654,  2656,  2658,  2660,  2662,  2667,
+    2668,  2670,  2672,  2677,  2679,  2687,  2688,  2689,  2694,  2695,
+    2699,  2701,  2703,  2705,  2707,  2709,  2716,  2718,  2720,  2722,
+    2724,  2726,  2728,  2730,  2732,  2734,  2739,  2741,  2743,  2748,
+    2774,  2775,  2777,  2781,  2782,  2786,  2788,  2790,  2792,  2794,
+    2796,  2803,  2805,  2807,  2809,  2811,  2813,  2818,  2823,  2825,
+    2827,  2845,  2847,  2852,  2853
 };
 #endif
@@ -5074,5 +5074,5 @@
 /* Line 1806 of yacc.c  */
 #line 357 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
 
@@ -5081,5 +5081,5 @@
 /* Line 1806 of yacc.c  */
 #line 359 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5088,5 +5088,5 @@
 /* Line 1806 of yacc.c  */
 #line 363 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5095,5 +5095,5 @@
 /* Line 1806 of yacc.c  */
 #line 366 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
 
@@ -5102,5 +5102,5 @@
 /* Line 1806 of yacc.c  */
 #line 369 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_unary_ptr( OperatorNode::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5109,5 +5109,5 @@
 /* Line 1806 of yacc.c  */
 #line 371 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_unary_ptr( OperatorNode::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
 
@@ -5126,5 +5126,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new CompositeExprNode2( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
+			(yyval.en) = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5162,5 +5162,5 @@
 /* Line 1806 of yacc.c  */
 #line 400 "parser.yy"
-    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode2( build_tuple( (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( (yyvsp[(5) - (9)].en) ) ) ) ); }
+    { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( (yyvsp[(5) - (9)].en) ) ) ) ); }
     break;
 
@@ -5183,5 +5183,5 @@
 /* Line 1806 of yacc.c  */
 #line 414 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5190,5 +5190,5 @@
 /* Line 1806 of yacc.c  */
 #line 416 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5197,5 +5197,5 @@
 /* Line 1806 of yacc.c  */
 #line 418 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
 
@@ -5204,5 +5204,5 @@
 /* Line 1806 of yacc.c  */
 #line 420 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
 
@@ -5234,9 +5234,9 @@
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
-			  case OperatorNode::AddressOf:
-				(yyval.en) = new CompositeExprNode2( build_addressOf( (yyvsp[(2) - (2)].en) ) );
+			  case OperKinds::AddressOf:
+				(yyval.en) = new CompositeExprNode( build_addressOf( (yyvsp[(2) - (2)].en) ) );
 				break;
-			  case OperatorNode::PointTo:
-				(yyval.en) = new CompositeExprNode2( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
+			  case OperKinds::PointTo:
+				(yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) );
 				break;
 			  default:
@@ -5250,5 +5250,5 @@
 /* Line 1806 of yacc.c  */
 #line 450 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5257,5 +5257,5 @@
 /* Line 1806 of yacc.c  */
 #line 452 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_unary_ptr( OperatorNode::Incr, (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5264,5 +5264,5 @@
 /* Line 1806 of yacc.c  */
 #line 454 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_unary_ptr( OperatorNode::Decr, (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5271,5 +5271,5 @@
 /* Line 1806 of yacc.c  */
 #line 456 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5278,5 +5278,5 @@
 /* Line 1806 of yacc.c  */
 #line 458 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5285,5 +5285,5 @@
 /* Line 1806 of yacc.c  */
 #line 460 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
 
@@ -5292,5 +5292,5 @@
 /* Line 1806 of yacc.c  */
 #line 462 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_attr( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ) ); }
     break;
 
@@ -5299,5 +5299,5 @@
 /* Line 1806 of yacc.c  */
 #line 464 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5306,5 +5306,5 @@
 /* Line 1806 of yacc.c  */
 #line 466 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
@@ -5313,5 +5313,5 @@
 /* Line 1806 of yacc.c  */
 #line 468 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5320,5 +5320,5 @@
 /* Line 1806 of yacc.c  */
 #line 470 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
 
@@ -5327,5 +5327,5 @@
 /* Line 1806 of yacc.c  */
 #line 476 "parser.yy"
-    { (yyval.op) = OperatorNode::PointTo; }
+    { (yyval.op) = OperKinds::PointTo; }
     break;
 
@@ -5334,5 +5334,5 @@
 /* Line 1806 of yacc.c  */
 #line 477 "parser.yy"
-    { (yyval.op) = OperatorNode::AddressOf; }
+    { (yyval.op) = OperKinds::AddressOf; }
     break;
 
@@ -5341,5 +5341,5 @@
 /* Line 1806 of yacc.c  */
 #line 483 "parser.yy"
-    { (yyval.op) = OperatorNode::UnPlus; }
+    { (yyval.op) = OperKinds::UnPlus; }
     break;
 
@@ -5348,5 +5348,5 @@
 /* Line 1806 of yacc.c  */
 #line 484 "parser.yy"
-    { (yyval.op) = OperatorNode::UnMinus; }
+    { (yyval.op) = OperKinds::UnMinus; }
     break;
 
@@ -5355,5 +5355,5 @@
 /* Line 1806 of yacc.c  */
 #line 485 "parser.yy"
-    { (yyval.op) = OperatorNode::Neg; }
+    { (yyval.op) = OperKinds::Neg; }
     break;
 
@@ -5362,5 +5362,5 @@
 /* Line 1806 of yacc.c  */
 #line 486 "parser.yy"
-    { (yyval.op) = OperatorNode::BitNeg; }
+    { (yyval.op) = OperKinds::BitNeg; }
     break;
 
@@ -5369,5 +5369,5 @@
 /* Line 1806 of yacc.c  */
 #line 492 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5376,5 +5376,5 @@
 /* Line 1806 of yacc.c  */
 #line 494 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5383,5 +5383,5 @@
 /* Line 1806 of yacc.c  */
 #line 500 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5390,5 +5390,5 @@
 /* Line 1806 of yacc.c  */
 #line 502 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5397,5 +5397,5 @@
 /* Line 1806 of yacc.c  */
 #line 504 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5404,5 +5404,5 @@
 /* Line 1806 of yacc.c  */
 #line 510 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5411,5 +5411,5 @@
 /* Line 1806 of yacc.c  */
 #line 512 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5418,5 +5418,5 @@
 /* Line 1806 of yacc.c  */
 #line 518 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5425,5 +5425,5 @@
 /* Line 1806 of yacc.c  */
 #line 520 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5432,5 +5432,5 @@
 /* Line 1806 of yacc.c  */
 #line 526 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5439,5 +5439,5 @@
 /* Line 1806 of yacc.c  */
 #line 528 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5446,5 +5446,5 @@
 /* Line 1806 of yacc.c  */
 #line 530 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5453,5 +5453,5 @@
 /* Line 1806 of yacc.c  */
 #line 532 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5460,5 +5460,5 @@
 /* Line 1806 of yacc.c  */
 #line 538 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5467,5 +5467,5 @@
 /* Line 1806 of yacc.c  */
 #line 540 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5474,5 +5474,5 @@
 /* Line 1806 of yacc.c  */
 #line 546 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5481,5 +5481,5 @@
 /* Line 1806 of yacc.c  */
 #line 552 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5488,5 +5488,5 @@
 /* Line 1806 of yacc.c  */
 #line 558 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5495,5 +5495,5 @@
 /* Line 1806 of yacc.c  */
 #line 564 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
 
@@ -5502,5 +5502,5 @@
 /* Line 1806 of yacc.c  */
 #line 570 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+    { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
 
@@ -5509,5 +5509,5 @@
 /* Line 1806 of yacc.c  */
 #line 576 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5515,6 +5515,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
+#line 579 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
@@ -5522,6 +5522,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+#line 581 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
 
@@ -5529,6 +5529,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 592 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5536,6 +5536,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode2( build_binary_ptr( OperatorNode::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+#line 594 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
 
@@ -5543,5 +5543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 598 "parser.yy"
+#line 599 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5550,6 +5550,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
-    { (yyval.op) = OperatorNode::Assign; }
+#line 604 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
     break;
 
@@ -5557,6 +5557,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 604 "parser.yy"
-    { (yyval.op) = OperatorNode::MulAssn; }
+#line 605 "parser.yy"
+    { (yyval.op) = OperKinds::MulAssn; }
     break;
 
@@ -5564,6 +5564,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
-    { (yyval.op) = OperatorNode::DivAssn; }
+#line 606 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
     break;
 
@@ -5571,6 +5571,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 606 "parser.yy"
-    { (yyval.op) = OperatorNode::ModAssn; }
+#line 607 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
     break;
 
@@ -5578,6 +5578,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
-    { (yyval.op) = OperatorNode::PlusAssn; }
+#line 608 "parser.yy"
+    { (yyval.op) = OperKinds::PlusAssn; }
     break;
 
@@ -5585,6 +5585,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
-    { (yyval.op) = OperatorNode::MinusAssn; }
+#line 609 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
     break;
 
@@ -5592,6 +5592,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
-    { (yyval.op) = OperatorNode::LSAssn; }
+#line 610 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
     break;
 
@@ -5599,6 +5599,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
-    { (yyval.op) = OperatorNode::RSAssn; }
+#line 611 "parser.yy"
+    { (yyval.op) = OperKinds::RSAssn; }
     break;
 
@@ -5606,6 +5606,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
-    { (yyval.op) = OperatorNode::AndAssn; }
+#line 612 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
     break;
 
@@ -5613,6 +5613,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
-    { (yyval.op) = OperatorNode::ERAssn; }
+#line 613 "parser.yy"
+    { (yyval.op) = OperKinds::ERAssn; }
     break;
 
@@ -5620,6 +5620,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
-    { (yyval.op) = OperatorNode::OrAssn; }
+#line 614 "parser.yy"
+    { (yyval.op) = OperKinds::OrAssn; }
     break;
 
@@ -5627,6 +5627,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_tuple() ); }
+#line 621 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple() ); }
     break;
 
@@ -5634,6 +5634,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
+#line 623 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
 
@@ -5641,6 +5641,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
+#line 625 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5648,6 +5648,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 626 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+#line 627 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5655,5 +5655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 632 "parser.yy"
+#line 633 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5662,6 +5662,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 638 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 639 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5669,5 +5669,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 644 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5676,5 +5676,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
+#line 653 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5683,8 +5683,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 659 "parser.yy"
+#line 660 "parser.yy"
     {
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode2( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			(yyval.sn) = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ), 0 );
 		}
     break;
@@ -5693,5 +5694,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 668 "parser.yy"
+#line 670 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5702,5 +5703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 675 "parser.yy"
+#line 677 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5709,5 +5710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 682 "parser.yy"
+#line 684 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5716,5 +5717,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 688 "parser.yy"
+#line 690 "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;
@@ -5723,5 +5724,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 693 "parser.yy"
+#line 695 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5730,5 +5731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 695 "parser.yy"
+#line 697 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5741,5 +5742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 701 "parser.yy"
+#line 703 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5748,5 +5749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 708 "parser.yy"
+#line 710 "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;
@@ -5755,5 +5756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 713 "parser.yy"
+#line 715 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5762,5 +5763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 721 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5769,5 +5770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 721 "parser.yy"
+#line 723 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5776,5 +5777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 723 "parser.yy"
+#line 725 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5783,5 +5784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
+#line 727 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5798,5 +5799,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 735 "parser.yy"
+#line 737 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5805,5 +5806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 739 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5815,5 +5816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 747 "parser.yy"
+#line 749 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5822,6 +5823,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 751 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -5829,5 +5830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
+#line 756 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
@@ -5836,5 +5837,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 756 "parser.yy"
+#line 758 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
@@ -5843,5 +5844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 760 "parser.yy"
+#line 762 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5850,5 +5851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 763 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5857,5 +5858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 769 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5864,5 +5865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5871,5 +5872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 776 "parser.yy"
+#line 778 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5878,5 +5879,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 782 "parser.yy"
+#line 784 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5885,5 +5886,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 784 "parser.yy"
+#line 786 "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;
@@ -5892,5 +5893,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 791 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5899,5 +5900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
+#line 797 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5906,5 +5907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 797 "parser.yy"
+#line 799 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5913,5 +5914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 799 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5920,5 +5921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 801 "parser.yy"
+#line 803 "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;
@@ -5927,16 +5928,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
+#line 808 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
 
   case 180:
-
-/* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 181:
 
 /* Line 1806 of yacc.c  */
@@ -5945,8 +5939,15 @@
     break;
 
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 816 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
   case 182:
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 821 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5955,5 +5956,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+#line 823 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -5962,5 +5963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 825 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -5969,5 +5970,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 828 "parser.yy"
+#line 830 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5976,5 +5977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5983,5 +5984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 835 "parser.yy"
+#line 837 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5990,5 +5991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 839 "parser.yy"
+#line 841 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5997,5 +5998,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
+#line 844 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -6004,5 +6005,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 846 "parser.yy"
+#line 848 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6011,5 +6012,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
+#line 851 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -6018,5 +6019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 853 "parser.yy"
+#line 855 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6025,5 +6026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 857 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6032,5 +6033,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
+#line 859 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6039,5 +6040,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
+#line 863 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6046,16 +6047,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+#line 865 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
 
   case 197:
-
-/* Line 1806 of yacc.c  */
-#line 870 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
-    break;
-
-  case 198:
 
 /* Line 1806 of yacc.c  */
@@ -6064,8 +6058,15 @@
     break;
 
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 874 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
+    break;
+
   case 199:
 
 /* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+#line 876 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6077,5 +6078,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
+#line 887 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6084,5 +6085,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+#line 889 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6091,5 +6092,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 889 "parser.yy"
+#line 891 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6098,5 +6099,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 893 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6105,5 +6106,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 898 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6112,5 +6113,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 900 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6119,5 +6120,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 902 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6126,5 +6127,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 902 "parser.yy"
+#line 904 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6133,5 +6134,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
+#line 909 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6143,5 +6144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 921 "parser.yy"
+#line 923 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6153,5 +6154,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 926 "parser.yy"
+#line 928 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6160,5 +6161,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 928 "parser.yy"
+#line 930 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6170,5 +6171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 937 "parser.yy"
+#line 939 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6177,5 +6178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 941 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6184,5 +6185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 941 "parser.yy"
+#line 943 "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;
@@ -6191,5 +6192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 943 "parser.yy"
+#line 945 "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;
@@ -6198,5 +6199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 945 "parser.yy"
+#line 947 "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;
@@ -6205,5 +6206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
+#line 952 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6212,5 +6213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 952 "parser.yy"
+#line 954 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6219,5 +6220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
+#line 959 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6226,5 +6227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+#line 966 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6233,5 +6234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 969 "parser.yy"
+#line 971 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6240,5 +6241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 971 "parser.yy"
+#line 973 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6247,5 +6248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
+#line 978 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6254,5 +6255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 978 "parser.yy"
+#line 980 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6261,5 +6262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
+#line 982 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6268,5 +6269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 985 "parser.yy"
+#line 987 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6275,5 +6276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+#line 989 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6282,5 +6283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 994 "parser.yy"
+#line 996 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6289,5 +6290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
+#line 1003 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6296,5 +6297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1006 "parser.yy"
+#line 1008 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6303,5 +6304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1013 "parser.yy"
+#line 1015 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6310,5 +6311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1027 "parser.yy"
+#line 1029 "parser.yy"
     {}
     break;
@@ -6317,5 +6318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1028 "parser.yy"
+#line 1030 "parser.yy"
     {}
     break;
@@ -6324,5 +6325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1057 "parser.yy"
+#line 1059 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6334,5 +6335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1064 "parser.yy"
+#line 1066 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6344,5 +6345,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1069 "parser.yy"
+#line 1071 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6354,5 +6355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1079 "parser.yy"
+#line 1081 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6364,5 +6365,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1084 "parser.yy"
+#line 1086 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6374,5 +6375,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1089 "parser.yy"
+#line 1091 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6384,5 +6385,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1097 "parser.yy"
+#line 1099 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6394,5 +6395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1102 "parser.yy"
+#line 1104 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6404,5 +6405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1107 "parser.yy"
+#line 1109 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6414,5 +6415,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1112 "parser.yy"
+#line 1114 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6424,5 +6425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1117 "parser.yy"
+#line 1119 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6434,5 +6435,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1125 "parser.yy"
+#line 1127 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6443,5 +6444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1148 "parser.yy"
+#line 1150 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6452,5 +6453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1152 "parser.yy"
+#line 1154 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6461,5 +6462,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1159 "parser.yy"
+#line 1161 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6468,5 +6469,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1163 "parser.yy"
+#line 1165 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6475,5 +6476,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1168 "parser.yy"
+#line 1170 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6485,5 +6486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1173 "parser.yy"
+#line 1175 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6495,5 +6496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1178 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6505,5 +6506,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1189 "parser.yy"
+#line 1191 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6515,5 +6516,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1194 "parser.yy"
+#line 1196 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6525,5 +6526,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1199 "parser.yy"
+#line 1201 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6535,5 +6536,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1204 "parser.yy"
+#line 1206 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6545,5 +6546,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1209 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6555,5 +6556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1218 "parser.yy"
+#line 1220 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6565,5 +6566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1223 "parser.yy"
+#line 1225 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6575,5 +6576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1240 "parser.yy"
+#line 1242 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6585,5 +6586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1245 "parser.yy"
+#line 1247 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6595,5 +6596,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
+#line 1269 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6602,5 +6603,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1279 "parser.yy"
+#line 1281 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6609,5 +6610,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
+#line 1292 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6616,5 +6617,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
+#line 1294 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6623,5 +6624,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1294 "parser.yy"
+#line 1296 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6630,5 +6631,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1296 "parser.yy"
+#line 1298 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6637,5 +6638,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1298 "parser.yy"
+#line 1300 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6644,5 +6645,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1300 "parser.yy"
+#line 1302 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6653,5 +6654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1304 "parser.yy"
+#line 1306 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6663,5 +6664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1313 "parser.yy"
+#line 1315 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6670,5 +6671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1315 "parser.yy"
+#line 1317 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6677,5 +6678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+#line 1328 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6684,5 +6685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6691,5 +6692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6698,5 +6699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+#line 1341 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6705,5 +6706,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6712,5 +6713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6719,5 +6720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6726,5 +6727,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1347 "parser.yy"
+#line 1349 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6733,5 +6734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1351 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6740,5 +6741,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
+#line 1356 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6747,5 +6748,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
+#line 1358 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6754,5 +6755,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
+#line 1360 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6761,5 +6762,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+#line 1362 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6768,5 +6769,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+#line 1364 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6775,5 +6776,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+#line 1366 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6782,5 +6783,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1368 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6789,5 +6790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
+#line 1370 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6796,5 +6797,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
+#line 1372 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6803,5 +6804,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+#line 1374 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6810,5 +6811,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6817,5 +6818,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+#line 1378 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -6824,5 +6825,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+#line 1380 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6831,5 +6832,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+#line 1387 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6838,5 +6839,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+#line 1389 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6845,5 +6846,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
+#line 1391 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6852,5 +6853,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+#line 1393 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6859,5 +6860,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+#line 1399 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6866,5 +6867,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1404 "parser.yy"
+#line 1406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6873,5 +6874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1406 "parser.yy"
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6880,5 +6881,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1408 "parser.yy"
+#line 1410 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6887,5 +6888,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+#line 1415 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6894,5 +6895,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+#line 1417 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6901,5 +6902,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
+#line 1419 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6908,5 +6909,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
+#line 1421 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6915,5 +6916,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1425 "parser.yy"
+#line 1427 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6922,5 +6923,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
+#line 1429 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6929,5 +6930,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
+#line 1431 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6936,5 +6937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1435 "parser.yy"
+#line 1437 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6943,5 +6944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
+#line 1439 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6950,5 +6951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1443 "parser.yy"
+#line 1445 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6957,5 +6958,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1445 "parser.yy"
+#line 1447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6964,5 +6965,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+#line 1449 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6971,5 +6972,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1452 "parser.yy"
+#line 1454 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6978,5 +6979,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+#line 1456 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6985,5 +6986,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6992,5 +6993,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
+#line 1468 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6999,5 +7000,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+#line 1470 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7009,5 +7010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1473 "parser.yy"
+#line 1475 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7016,5 +7017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1475 "parser.yy"
+#line 1477 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -7023,5 +7024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1477 "parser.yy"
+#line 1479 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -7030,5 +7031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1481 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7037,5 +7038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1484 "parser.yy"
+#line 1486 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7044,5 +7045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
+#line 1488 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7051,5 +7052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1491 "parser.yy"
+#line 1493 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7058,5 +7059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
+#line 1495 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7065,5 +7066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1499 "parser.yy"
+#line 1501 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7072,5 +7073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
+#line 1504 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7083,5 +7084,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1512 "parser.yy"
+#line 1514 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7090,5 +7091,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1514 "parser.yy"
+#line 1516 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7097,5 +7098,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
+#line 1518 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7104,5 +7105,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
+#line 1523 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7111,5 +7112,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1523 "parser.yy"
+#line 1525 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7118,5 +7119,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1528 "parser.yy"
+#line 1530 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7125,5 +7126,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
+#line 1532 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7132,5 +7133,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
+#line 1535 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7139,5 +7140,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
+#line 1538 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7146,5 +7147,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
+#line 1544 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7153,5 +7154,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1544 "parser.yy"
+#line 1546 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7160,5 +7161,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1549 "parser.yy"
+#line 1551 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7167,5 +7168,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1558 "parser.yy"
+#line 1560 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7174,5 +7175,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1562 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7184,5 +7185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1565 "parser.yy"
+#line 1567 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7191,5 +7192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
+#line 1569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7198,5 +7199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+#line 1574 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7205,5 +7206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1574 "parser.yy"
+#line 1576 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7212,5 +7213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1579 "parser.yy"
+#line 1581 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7219,5 +7220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1581 "parser.yy"
+#line 1583 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7226,5 +7227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1588 "parser.yy"
+#line 1590 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7233,16 +7234,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1596 "parser.yy"
+#line 1598 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 408:
 
 /* Line 1806 of yacc.c  */
@@ -7251,12 +7245,12 @@
     break;
 
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1602 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
   case 410:
-
-/* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 411:
 
 /* Line 1806 of yacc.c  */
@@ -7265,8 +7259,15 @@
     break;
 
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1612 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 412:
 
 /* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
+#line 1614 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7275,5 +7276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1618 "parser.yy"
+#line 1620 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7282,5 +7283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1623 "parser.yy"
+#line 1625 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7289,16 +7290,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1630 "parser.yy"
+#line 1632 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
   case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1637 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 422:
 
 /* Line 1806 of yacc.c  */
@@ -7307,8 +7301,15 @@
     break;
 
+  case 422:
+
+/* Line 1806 of yacc.c  */
+#line 1641 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 424:
 
 /* Line 1806 of yacc.c  */
-#line 1648 "parser.yy"
+#line 1650 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7317,5 +7318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1653 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7324,5 +7325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1653 "parser.yy"
+#line 1655 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7331,5 +7332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+#line 1665 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7338,5 +7339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1669 "parser.yy"
+#line 1671 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7348,5 +7349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1674 "parser.yy"
+#line 1676 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7358,5 +7359,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1683 "parser.yy"
+#line 1685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7365,5 +7366,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1692 "parser.yy"
+#line 1694 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7372,5 +7373,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+#line 1696 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7379,5 +7380,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1719 "parser.yy"
+#line 1721 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7386,5 +7387,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1727 "parser.yy"
+#line 1729 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7393,5 +7394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1732 "parser.yy"
+#line 1734 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7400,5 +7401,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
+#line 1736 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7407,5 +7408,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
+#line 1738 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7414,5 +7415,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1740 "parser.yy"
+#line 1742 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7421,5 +7422,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1741 "parser.yy"
+#line 1743 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7428,5 +7429,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+#line 1748 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7435,5 +7436,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1748 "parser.yy"
+#line 1750 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7442,5 +7443,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1749 "parser.yy"
+#line 1751 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7449,5 +7450,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1751 "parser.yy"
+#line 1753 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7456,5 +7457,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
+#line 1769 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
@@ -7463,5 +7464,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1773 "parser.yy"
+#line 1775 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
@@ -7470,5 +7471,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1781 "parser.yy"
+#line 1783 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -7477,16 +7478,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1783 "parser.yy"
+#line 1785 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
   case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1786 "parser.yy"
-    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
-    break;
-
-  case 472:
 
 /* Line 1806 of yacc.c  */
@@ -7495,9 +7489,16 @@
     break;
 
+  case 472:
+
+/* Line 1806 of yacc.c  */
+#line 1790 "parser.yy"
+    { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
+    break;
+
   case 473:
 
 /* Line 1806 of yacc.c  */
-#line 1790 "parser.yy"
-    { (yyval.en) = new DesignatorNode( new CompositeExprNode2( build_binary_val( OperatorNode::Range, (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
+#line 1792 "parser.yy"
+    { (yyval.en) = new DesignatorNode( new CompositeExprNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
     break;
 
@@ -7505,5 +7506,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1792 "parser.yy"
+#line 1794 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
@@ -7512,5 +7513,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1816 "parser.yy"
+#line 1818 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7519,5 +7520,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1818 "parser.yy"
+#line 1820 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7526,5 +7527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1820 "parser.yy"
+#line 1822 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7533,5 +7534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1826 "parser.yy"
+#line 1828 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7540,5 +7541,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1828 "parser.yy"
+#line 1830 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7547,5 +7548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1833 "parser.yy"
+#line 1835 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7554,5 +7555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+#line 1841 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7561,5 +7562,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
+#line 1846 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7568,5 +7569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+#line 1848 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7575,5 +7576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1852 "parser.yy"
+#line 1854 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7582,5 +7583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1854 "parser.yy"
+#line 1856 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7589,5 +7590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1858 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7596,5 +7597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1861 "parser.yy"
+#line 1863 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7603,5 +7604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1865 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7610,5 +7611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1868 "parser.yy"
+#line 1870 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7620,5 +7621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+#line 1875 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7627,5 +7628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+#line 1877 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7634,5 +7635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1880 "parser.yy"
+#line 1882 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -7641,5 +7642,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+#line 1885 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
@@ -7648,5 +7649,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1885 "parser.yy"
+#line 1887 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7655,5 +7656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1890 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7662,5 +7663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1892 "parser.yy"
+#line 1894 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7669,5 +7670,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1894 "parser.yy"
+#line 1896 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7676,5 +7677,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1899 "parser.yy"
+#line 1901 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7683,5 +7684,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1901 "parser.yy"
+#line 1903 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7690,5 +7691,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1906 "parser.yy"
+#line 1908 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7700,5 +7701,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1911 "parser.yy"
+#line 1913 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7710,5 +7711,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1919 "parser.yy"
+#line 1921 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7720,5 +7721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1924 "parser.yy"
+#line 1926 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7730,5 +7731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1929 "parser.yy"
+#line 1931 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7741,5 +7742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1939 "parser.yy"
+#line 1941 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7748,5 +7749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1949 "parser.yy"
+#line 1951 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7758,5 +7759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1954 "parser.yy"
+#line 1956 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7768,5 +7769,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1959 "parser.yy"
+#line 1961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7778,5 +7779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1967 "parser.yy"
+#line 1969 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7788,5 +7789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+#line 1974 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7798,5 +7799,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1982 "parser.yy"
+#line 1984 "parser.yy"
     {}
     break;
@@ -7805,5 +7806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1984 "parser.yy"
+#line 1986 "parser.yy"
     {
 			if ( theTree ) {
@@ -7818,5 +7819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1996 "parser.yy"
+#line 1998 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7825,5 +7826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2001 "parser.yy"
+#line 2003 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7832,5 +7833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2009 "parser.yy"
+#line 2011 "parser.yy"
     {}
     break;
@@ -7839,5 +7840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2011 "parser.yy"
+#line 2013 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7849,5 +7850,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2016 "parser.yy"
+#line 2018 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7860,5 +7861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2022 "parser.yy"
+#line 2024 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7871,5 +7872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2037 "parser.yy"
+#line 2039 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7882,5 +7883,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2043 "parser.yy"
+#line 2045 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7893,5 +7894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2052 "parser.yy"
+#line 2054 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7904,5 +7905,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2058 "parser.yy"
+#line 2060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7915,5 +7916,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2064 "parser.yy"
+#line 2066 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7926,5 +7927,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2070 "parser.yy"
+#line 2072 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7937,5 +7938,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2076 "parser.yy"
+#line 2078 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7948,5 +7949,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2084 "parser.yy"
+#line 2086 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7959,5 +7960,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2090 "parser.yy"
+#line 2092 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7970,5 +7971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2098 "parser.yy"
+#line 2100 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7981,5 +7982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2104 "parser.yy"
+#line 2106 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7992,6 +7993,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2119 "parser.yy"
-    { (yyval.en) = new CompositeExprNode2( build_binary_val( OperatorNode::Range, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 2121 "parser.yy"
+    { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
@@ -7999,5 +8000,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2129 "parser.yy"
+#line 2131 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8006,5 +8007,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+#line 2138 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8013,23 +8014,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2142 "parser.yy"
+#line 2144 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
   case 559:
-
-/* Line 1806 of yacc.c  */
-#line 2157 "parser.yy"
-    {}
-    break;
-
-  case 560:
-
-/* Line 1806 of yacc.c  */
-#line 2158 "parser.yy"
-    {}
-    break;
-
-  case 561:
 
 /* Line 1806 of yacc.c  */
@@ -8038,5 +8025,5 @@
     break;
 
-  case 562:
+  case 560:
 
 /* Line 1806 of yacc.c  */
@@ -8045,19 +8032,26 @@
     break;
 
+  case 561:
+
+/* Line 1806 of yacc.c  */
+#line 2161 "parser.yy"
+    {}
+    break;
+
+  case 562:
+
+/* Line 1806 of yacc.c  */
+#line 2162 "parser.yy"
+    {}
+    break;
+
   case 563:
 
 /* Line 1806 of yacc.c  */
-#line 2195 "parser.yy"
+#line 2197 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2198 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 566:
 
 /* Line 1806 of yacc.c  */
@@ -8066,8 +8060,15 @@
     break;
 
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2202 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 567:
 
 /* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+#line 2207 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8079,5 +8080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2210 "parser.yy"
+#line 2212 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8086,5 +8087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2215 "parser.yy"
+#line 2217 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8093,5 +8094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2219 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8100,5 +8101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2219 "parser.yy"
+#line 2221 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8107,16 +8108,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
+#line 2226 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 574:
 
 /* Line 1806 of yacc.c  */
@@ -8125,8 +8119,15 @@
     break;
 
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2230 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 575:
 
 /* Line 1806 of yacc.c  */
-#line 2230 "parser.yy"
+#line 2232 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8135,5 +8136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2235 "parser.yy"
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8142,5 +8143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+#line 2239 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8149,5 +8150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+#line 2248 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8156,5 +8157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2249 "parser.yy"
+#line 2251 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8163,5 +8164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+#line 2256 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8170,5 +8171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+#line 2258 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8177,5 +8178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+#line 2260 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8184,5 +8185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+#line 2265 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8191,5 +8192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
+#line 2267 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8198,16 +8199,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+#line 2269 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2272 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 588:
 
 /* Line 1806 of yacc.c  */
@@ -8216,8 +8210,15 @@
     break;
 
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2276 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 589:
 
 /* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+#line 2278 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8226,5 +8227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2291 "parser.yy"
+#line 2293 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8233,5 +8234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+#line 2295 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8240,5 +8241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+#line 2297 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8247,5 +8248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
+#line 2302 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8254,5 +8255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+#line 2304 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8261,16 +8262,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+#line 2306 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 600:
 
 /* Line 1806 of yacc.c  */
@@ -8279,8 +8273,15 @@
     break;
 
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2313 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 601:
 
 /* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+#line 2315 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8289,16 +8290,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
+#line 2330 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2331 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 605:
 
 /* Line 1806 of yacc.c  */
@@ -8307,8 +8301,15 @@
     break;
 
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2335 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 607:
 
 /* Line 1806 of yacc.c  */
-#line 2339 "parser.yy"
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8317,5 +8318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2344 "parser.yy"
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8324,5 +8325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
+#line 2348 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8331,5 +8332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8338,16 +8339,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
+#line 2355 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 613:
 
 /* Line 1806 of yacc.c  */
@@ -8356,8 +8350,15 @@
     break;
 
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2359 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 614:
 
 /* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+#line 2361 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8366,5 +8367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2364 "parser.yy"
+#line 2366 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8373,5 +8374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+#line 2368 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8380,5 +8381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+#line 2370 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8387,16 +8388,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2378 "parser.yy"
+#line 2380 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2381 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 621:
 
 /* Line 1806 of yacc.c  */
@@ -8405,8 +8399,15 @@
     break;
 
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 622:
 
 /* Line 1806 of yacc.c  */
-#line 2388 "parser.yy"
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8415,5 +8416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+#line 2392 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8422,5 +8423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
+#line 2394 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8429,16 +8430,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 627:
 
 /* Line 1806 of yacc.c  */
@@ -8447,8 +8441,15 @@
     break;
 
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 628:
 
 /* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8457,5 +8458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2408 "parser.yy"
+#line 2410 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8464,5 +8465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
+#line 2412 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8471,5 +8472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2412 "parser.yy"
+#line 2414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8478,16 +8479,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2443 "parser.yy"
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
   case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2446 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 635:
 
 /* Line 1806 of yacc.c  */
@@ -8496,8 +8490,15 @@
     break;
 
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2450 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 636:
 
 /* Line 1806 of yacc.c  */
-#line 2453 "parser.yy"
+#line 2455 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8509,5 +8510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+#line 2460 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8519,5 +8520,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2466 "parser.yy"
+#line 2468 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8526,5 +8527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2468 "parser.yy"
+#line 2470 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8533,5 +8534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+#line 2472 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8540,5 +8541,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2475 "parser.yy"
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8547,5 +8548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2479 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8554,5 +8555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2482 "parser.yy"
+#line 2484 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8561,16 +8562,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2484 "parser.yy"
+#line 2486 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
   case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 647:
 
 /* Line 1806 of yacc.c  */
@@ -8579,8 +8573,15 @@
     break;
 
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2503 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 648:
 
 /* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
+#line 2508 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8589,5 +8590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2510 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8596,5 +8597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+#line 2512 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8603,5 +8604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+#line 2514 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8610,16 +8611,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+#line 2516 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2520 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 655:
 
 /* Line 1806 of yacc.c  */
@@ -8628,8 +8622,15 @@
     break;
 
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 656:
 
 /* Line 1806 of yacc.c  */
-#line 2524 "parser.yy"
+#line 2526 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8638,5 +8639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+#line 2531 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8645,5 +8646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+#line 2533 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8652,5 +8653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+#line 2535 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8659,5 +8660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
+#line 2541 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8666,5 +8667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+#line 2543 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8673,5 +8674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+#line 2549 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8680,5 +8681,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+#line 2551 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8687,5 +8688,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
+#line 2553 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8694,16 +8695,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
+#line 2555 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
   case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2568 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 669:
 
 /* Line 1806 of yacc.c  */
@@ -8712,8 +8706,15 @@
     break;
 
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2572 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 670:
 
 /* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
+#line 2577 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8722,5 +8723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
+#line 2579 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8729,5 +8730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
+#line 2581 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8736,5 +8737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+#line 2583 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8743,16 +8744,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
+#line 2585 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2589 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 677:
 
 /* Line 1806 of yacc.c  */
@@ -8761,8 +8755,15 @@
     break;
 
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2593 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 678:
 
 /* Line 1806 of yacc.c  */
-#line 2593 "parser.yy"
+#line 2595 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8771,5 +8772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+#line 2600 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8778,5 +8779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+#line 2602 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8785,5 +8786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2602 "parser.yy"
+#line 2604 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8792,5 +8793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2609 "parser.yy"
+#line 2611 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8799,5 +8800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
+#line 2622 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8806,5 +8807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2623 "parser.yy"
+#line 2625 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8813,5 +8814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2625 "parser.yy"
+#line 2627 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8820,5 +8821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2628 "parser.yy"
+#line 2630 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8827,5 +8828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2630 "parser.yy"
+#line 2632 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8834,16 +8835,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
+#line 2634 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
   case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2646 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 693:
 
 /* Line 1806 of yacc.c  */
@@ -8852,8 +8846,15 @@
     break;
 
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2650 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 694:
 
 /* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
+#line 2655 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8862,5 +8863,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2657 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8869,5 +8870,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8876,5 +8877,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8883,16 +8884,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
+#line 2663 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
   case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 701:
 
 /* Line 1806 of yacc.c  */
@@ -8901,8 +8895,15 @@
     break;
 
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
   case 702:
 
 /* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+#line 2673 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8911,5 +8912,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2676 "parser.yy"
+#line 2678 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8918,5 +8919,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
+#line 2680 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8925,5 +8926,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+#line 2690 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8932,5 +8933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
+#line 2700 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8939,5 +8940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+#line 2702 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8946,5 +8947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+#line 2704 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8953,5 +8954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
+#line 2706 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8960,5 +8961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2706 "parser.yy"
+#line 2708 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8967,5 +8968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2708 "parser.yy"
+#line 2710 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8974,5 +8975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
+#line 2717 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8981,5 +8982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
+#line 2719 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8988,5 +8989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
+#line 2721 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8995,5 +8996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+#line 2723 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9002,5 +9003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2723 "parser.yy"
+#line 2725 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9009,5 +9010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+#line 2727 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9016,5 +9017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2727 "parser.yy"
+#line 2729 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9023,5 +9024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2729 "parser.yy"
+#line 2731 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9030,5 +9031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2731 "parser.yy"
+#line 2733 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9037,5 +9038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2733 "parser.yy"
+#line 2735 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9044,5 +9045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2738 "parser.yy"
+#line 2740 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9051,5 +9052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2740 "parser.yy"
+#line 2742 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9058,5 +9059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+#line 2747 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9065,5 +9066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2747 "parser.yy"
+#line 2749 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9072,5 +9073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2774 "parser.yy"
+#line 2776 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9079,5 +9080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2785 "parser.yy"
+#line 2787 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9086,5 +9087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2787 "parser.yy"
+#line 2789 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9093,5 +9094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
+#line 2791 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9100,5 +9101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2791 "parser.yy"
+#line 2793 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9107,5 +9108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2793 "parser.yy"
+#line 2795 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9114,5 +9115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2795 "parser.yy"
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9121,5 +9122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
+#line 2804 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9128,5 +9129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2804 "parser.yy"
+#line 2806 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9135,5 +9136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2806 "parser.yy"
+#line 2808 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9142,5 +9143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2808 "parser.yy"
+#line 2810 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9149,5 +9150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2810 "parser.yy"
+#line 2812 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9156,5 +9157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2812 "parser.yy"
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9163,5 +9164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2817 "parser.yy"
+#line 2819 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9170,16 +9171,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2822 "parser.yy"
+#line 2824 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
   case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
-  case 750:
 
 /* Line 1806 of yacc.c  */
@@ -9188,8 +9182,15 @@
     break;
 
+  case 750:
+
+/* Line 1806 of yacc.c  */
+#line 2828 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
+    break;
+
   case 753:
 
 /* Line 1806 of yacc.c  */
-#line 2850 "parser.yy"
+#line 2852 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9198,5 +9199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2852 "parser.yy"
+#line 2854 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9205,5 +9206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9208 "Parser/parser.cc"
+#line 9209 "Parser/parser.cc"
       default: break;
     }
@@ -9436,5 +9437,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2855 "parser.yy"
+#line 2857 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 71a3593146d24665b26d962ad83af645b8cb9505)
+++ src/Parser/parser.h	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
@@ -274,5 +274,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 71a3593146d24665b26d962ad83af645b8cb9505)
+++ src/Parser/parser.yy	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 11:42:23 2016
-// Update Count     : 1749
+// Last Modified On : Fri Aug  5 15:06:44 2016
+// Update Count     : 1756
 //
 
@@ -119,5 +119,5 @@
 	LabelNode *label;
 	InitializerNode *in;
-	OperatorNode::Type op;
+	OperKinds op;
 	bool flag;
 }
@@ -355,19 +355,19 @@
 		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
 		// equivalent to the old x[i,j].
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Index, $1, $4 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
 	| postfix_expression '(' argument_expression_list ')'
-		{ $$ = new CompositeExprNode2( build_func( $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_func( $1, $3 ) ); }
         // ambiguity with .0 so space required after field-selection, e.g.
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $1, new VarRefNode( $3 ) ) ); }
 	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
 	| postfix_expression ICR
-	  	{ $$ = new CompositeExprNode2( build_unary_ptr( OperatorNode::IncrPost, $1 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
 	| postfix_expression DECR
-	  	{ $$ = new CompositeExprNode2( build_unary_ptr( OperatorNode::DecrPost, $1 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
 	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
 		{ $$ = new CompoundLiteralNode( $2, new InitializerNode( $5, true ) ); }
@@ -376,5 +376,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new CompositeExprNode2( build_func( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
+			$$ = new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
 		}
 	;
@@ -398,5 +398,5 @@
 		{ $$ = $7->set_argName( $3 ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']' ':' assignment_expression
-		{ $$ = $9->set_argName( new CompositeExprNode2( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ) ); }
+		{ $$ = $9->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ) ); }
 	;
 
@@ -412,11 +412,11 @@
 		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| no_attr_identifier '.' field
-		{ $$ = new CompositeExprNode2( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_fieldSel( $5, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW field
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $3, new VarRefNode( $1 ) ) ); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-		{ $$ = new CompositeExprNode2( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_pfieldSel( $5, new VarRefNode( $1 ) ) ); }
 	;
 
@@ -437,9 +437,9 @@
 		{
 			switch ( $1 ) {
-			  case OperatorNode::AddressOf:
-				$$ = new CompositeExprNode2( build_addressOf( $2 ) );
+			  case OperKinds::AddressOf:
+				$$ = new CompositeExprNode( build_addressOf( $2 ) );
 				break;
-			  case OperatorNode::PointTo:
-				$$ = new CompositeExprNode2( build_unary_val( $1, $2 ) );
+			  case OperKinds::PointTo:
+				$$ = new CompositeExprNode( build_unary_val( $1, $2 ) );
 				break;
 			  default:
@@ -448,41 +448,41 @@
 		}
 	| unary_operator cast_expression
-	  		{ $$ = new CompositeExprNode2( build_unary_val( $1, $2 ) ); }
+	  		{ $$ = new CompositeExprNode( build_unary_val( $1, $2 ) ); }
 	| ICR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_unary_ptr( OperatorNode::Incr, $2 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
 	| DECR unary_expression
-	  	{ $$ = new CompositeExprNode2( build_unary_ptr( OperatorNode::Decr, $2 ) ); }
+	  	{ $$ = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
 	| SIZEOF unary_expression
-		{ $$ = new CompositeExprNode2( build_sizeOf( $2 ) ); }
+		{ $$ = new CompositeExprNode( build_sizeOf( $2 ) ); }
 	| SIZEOF '(' type_name_no_function ')'
-		{ $$ = new CompositeExprNode2( build_sizeOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_sizeOf( new TypeValueNode( $3 ) ) ); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-		{ $$ = new CompositeExprNode2( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
+		{ $$ = new CompositeExprNode( build_offsetOf( new TypeValueNode( $3 ), new VarRefNode( $5 ) ) ); }
 	| ATTR_IDENTIFIER
-		{ $$ = new CompositeExprNode2( build_attr( new VarRefNode( $1 ) ) ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ) ) ); }
 	| ATTR_IDENTIFIER '(' type_name ')'
-		{ $$ = new CompositeExprNode2( build_attr( new VarRefNode( $1 ), new TypeValueNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), new TypeValueNode( $3 ) ) ); }
 	| ATTR_IDENTIFIER '(' argument_expression ')'
-		{ $$ = new CompositeExprNode2( build_attr( new VarRefNode( $1 ), $3 ) ); }
+		{ $$ = new CompositeExprNode( build_attr( new VarRefNode( $1 ), $3 ) ); }
 	| ALIGNOF unary_expression							// GCC, variable alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( $2 ) ); }
+		{ $$ = new CompositeExprNode( build_alignOf( $2 ) ); }
 	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
-		{ $$ = new CompositeExprNode2( build_alignOf( new TypeValueNode( $3 ) ) ); }
+		{ $$ = new CompositeExprNode( build_alignOf( new TypeValueNode( $3 ) ) ); }
 //	| ANDAND IDENTIFIER									// GCC, address of label
-//		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( $2, true ) ); }
+//		{ $$ = new CompositeExprNode( new OperatorNode( OperKinds::LabelAddress ), new VarRefNode( $2, true ) ); }
 	;
 
 ptrref_operator:
-	'*'											{ $$ = OperatorNode::PointTo; }
-	| '&'										{ $$ = OperatorNode::AddressOf; }
+	'*'											{ $$ = OperKinds::PointTo; }
+	| '&'										{ $$ = OperKinds::AddressOf; }
 		// GCC, address of label must be handled by semantic check for ref,ref,label
-//	| ANDAND									{ $$ = OperatorNode::And; }
+//	| ANDAND									{ $$ = OperKinds::And; }
 	;
 
 unary_operator:
-	'+'											{ $$ = OperatorNode::UnPlus; }
-	| '-'										{ $$ = OperatorNode::UnMinus; }
-	| '!'										{ $$ = OperatorNode::Neg; }
-	| '~'										{ $$ = OperatorNode::BitNeg; }
+	'+'											{ $$ = OperKinds::UnPlus; }
+	| '-'										{ $$ = OperKinds::UnMinus; }
+	| '!'										{ $$ = OperKinds::Neg; }
+	| '~'										{ $$ = OperKinds::BitNeg; }
 	;
 
@@ -490,7 +490,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	| '(' type_name_no_function ')' tuple
-		{ $$ = new CompositeExprNode2( build_cast( new TypeValueNode( $2 ), $4 ) ); }
+		{ $$ = new CompositeExprNode( build_cast( new TypeValueNode( $2 ), $4 ) ); }
 	;
 
@@ -498,9 +498,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Mul, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
 	| multiplicative_expression '/' cast_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Div, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
 	| multiplicative_expression '%' cast_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Mod, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
 
@@ -508,7 +508,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Plus, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
 	| additive_expression '-' multiplicative_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Minus, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
 	;
 
@@ -516,7 +516,7 @@
 	additive_expression
 	| shift_expression LS additive_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::LShift, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
 	| shift_expression RS additive_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::RShift, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
 	;
 
@@ -524,11 +524,11 @@
 	shift_expression
 	| relational_expression '<' shift_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::LThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
 	| relational_expression '>' shift_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::GThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
 	| relational_expression LE shift_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::LEThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
 	| relational_expression GE shift_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::GEThan, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
 	;
 
@@ -536,7 +536,7 @@
 	relational_expression
 	| equality_expression EQ relational_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Eq, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
 	| equality_expression NE relational_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Neq, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
 	;
 
@@ -544,5 +544,5 @@
 	equality_expression
 	| AND_expression '&' equality_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::BitAnd, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
 	;
 
@@ -550,5 +550,5 @@
 	AND_expression
 	| exclusive_OR_expression '^' AND_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Xor, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
 	;
 
@@ -556,5 +556,5 @@
 	exclusive_OR_expression
 	| inclusive_OR_expression '|' exclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::BitOr, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
 	;
 
@@ -562,5 +562,5 @@
 	inclusive_OR_expression
 	| logical_AND_expression ANDAND inclusive_OR_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, true ) ); }
+		{ $$ = new CompositeExprNode( build_and_or( $1, $3, true ) ); }
 	;
 
@@ -568,5 +568,5 @@
 	logical_AND_expression
 	| logical_OR_expression OROR logical_AND_expression
-		{ $$ = new CompositeExprNode2( build_and_or( $1, $3, false ) ); }
+		{ $$ = new CompositeExprNode( build_and_or( $1, $3, false ) ); }
 	;
 
@@ -574,9 +574,10 @@
 	logical_OR_expression
 	| logical_OR_expression '?' comma_expression ':' conditional_expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
+		// FIX ME: this hack computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$ = new CompositeExprNode2( build_cond( $1, $1, $4 ) ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $1, $4 ) ); }
 	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new CompositeExprNode2( build_cond( $1, $3, $5 ) ); }
+		{ $$ = new CompositeExprNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -589,7 +590,7 @@
 	conditional_expression
 	| unary_expression assignment_operator assignment_expression
-		{ $$ = new CompositeExprNode2( build_binary_ptr( $2, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_binary_ptr( $2, $1, $3 ) ); }
 	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode2( build_binary_ptr( OperatorNode::Assign, $1, $2 ) ); }
+		{ $$ = ( $2 == 0 ) ? $1 : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
@@ -601,15 +602,15 @@
 
 assignment_operator:
-	'='											{ $$ = OperatorNode::Assign; }
-	| MULTassign								{ $$ = OperatorNode::MulAssn; }
-	| DIVassign									{ $$ = OperatorNode::DivAssn; }
-	| MODassign									{ $$ = OperatorNode::ModAssn; }
-	| PLUSassign								{ $$ = OperatorNode::PlusAssn; }
-	| MINUSassign								{ $$ = OperatorNode::MinusAssn; }
-	| LSassign									{ $$ = OperatorNode::LSAssn; }
-	| RSassign									{ $$ = OperatorNode::RSAssn; }
-	| ANDassign									{ $$ = OperatorNode::AndAssn; }
-	| ERassign									{ $$ = OperatorNode::ERAssn; }
-	| ORassign									{ $$ = OperatorNode::OrAssn; }
+	'='											{ $$ = OperKinds::Assign; }
+	| MULTassign								{ $$ = OperKinds::MulAssn; }
+	| DIVassign									{ $$ = OperKinds::DivAssn; }
+	| MODassign									{ $$ = OperKinds::ModAssn; }
+	| PLUSassign								{ $$ = OperKinds::PlusAssn; }
+	| MINUSassign								{ $$ = OperKinds::MinusAssn; }
+	| LSassign									{ $$ = OperKinds::LSAssn; }
+	| RSassign									{ $$ = OperKinds::RSAssn; }
+	| ANDassign									{ $$ = OperKinds::AndAssn; }
+	| ERassign									{ $$ = OperKinds::ERAssn; }
+	| ORassign									{ $$ = OperKinds::OrAssn; }
 	;
 
@@ -618,11 +619,11 @@
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
 	'[' ']'
-		{ $$ = new CompositeExprNode2( build_tuple() ); }
+		{ $$ = new CompositeExprNode( build_tuple() ); }
 	| '[' push assignment_expression pop ']'
-		{ $$ = new CompositeExprNode2( build_tuple( $3 ) ); }
+		{ $$ = new CompositeExprNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode2( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ) ); }
+		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new CompositeExprNode2( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
+		{ $$ = new CompositeExprNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
 	;
 
@@ -636,5 +637,5 @@
 	assignment_expression
 	| comma_expression ',' assignment_expression
-		{ $$ = new CompositeExprNode2( build_comma( $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_comma( $1, $3 ) ); }
 	;
 
@@ -658,6 +659,7 @@
 	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
 		{
-			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode2( build_func( new VarRefNode( fn ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
+			Token fn;
+			fn.str = new std::string( "^?{}" ); // location undefined
+			$$ = new StatementNode( StatementNode::Exp, new CompositeExprNode( build_func( new VarRefNode( fn ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ), 0 );
 		}
 	;
@@ -747,5 +749,5 @@
 	constant_expression							{ $$ = $1; }
 	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
 	| subrange											// CFA, subrange
 	;
@@ -1788,5 +1790,5 @@
 		{ $$ = new DesignatorNode( $3, true ); }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
-		{ $$ = new DesignatorNode( new CompositeExprNode2( build_binary_val( OperatorNode::Range, $3, $5 ) ), true ); }
+		{ $$ = new DesignatorNode( new CompositeExprNode( build_range( $3, $5 ) ), true ); }
 	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
 		{ $$ = new DesignatorNode( $4 ); }
@@ -2117,5 +2119,5 @@
 subrange:
 	constant_expression '~' constant_expression			// CFA, integer subrange
-		{ $$ = new CompositeExprNode2( build_binary_val( OperatorNode::Range, $1, $3 ) ); }
+		{ $$ = new CompositeExprNode( build_range( $1, $3 ) ); }
 	;
 
