Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/CodeGen/CodeGenerator.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 16:52:58 2015
-// Update Count     : 144
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:47:42 2015
+// Update Count     : 177
 //
 
@@ -38,5 +38,5 @@
 	int CodeGenerator::tabsize = 4;
 
-	// the kinds of statements that would ideally be separated by more whitespace
+	// the kinds of statements that would ideally be followed by whitespace
 	bool wantSpacing( Statement * stmt) {
 		return dynamic_cast< IfStmt * >( stmt ) || dynamic_cast< CompoundStmt * >( stmt ) ||
@@ -588,11 +588,8 @@
 
 	void CodeGenerator::visit( ForStmt *forStmt ) {
-		output << "for (";
-
-		if ( forStmt->get_initialization() != 0 )
-			forStmt->get_initialization()->accept( *this );
-		else
-			output << ";";
-		
+		// initialization is always hoisted, so don't 
+		// bother doing anything with that 
+		output << "for (;";
+
 		if ( forStmt->get_condition() != 0 )
 			forStmt->get_condition()->accept( *this );
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/CodeGen/GenType.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jul 08 16:08:24 2015
-// Update Count     : 10
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul  9 16:43:52 2015
+// Update Count     : 13
 //
 
@@ -93,10 +93,12 @@
 			os << "_Atomic ";
 		} // if
+		if ( qualifiers.isAttribute ) {
+			os << "__attribute(( )) ";
+		} // if
 		if ( dimension != 0 ) {
 			CodeGenerator cg( os );
 			dimension->accept( cg );
 		} else if ( isVarLen ) {
-			// no dimension expression on a VLA
-			// means it came in with the * token
+			// no dimension expression on a VLA means it came in with the * token
 			os << "*";
 		} // if
@@ -202,4 +204,7 @@
 			typeString = "_Atomic " + typeString;
 		} // if
+		if ( type->get_isAttribute() ) {
+			typeString = "__attribute(( )) " + typeString;
+		} // if
 	}
 } // namespace CodeGen
Index: src/ControlStruct/ForExprMutator.cc
===================================================================
--- src/ControlStruct/ForExprMutator.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/ControlStruct/ForExprMutator.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 15:31:47 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:14:44 2015
+// Update Count     : 10
 //
 
@@ -22,15 +22,21 @@
 		// recurse down all nest for loops to hoist any initializer declarations to make them C89 (rather than C99)
 		forStmt->set_body( forStmt->get_body()->acceptMutator( *this ) );
-		if ( DeclStmt *decl = dynamic_cast< DeclStmt * > ( forStmt->get_initialization() ) ) {
-			// create compound statement, move initializer declaration outside, leave _for_ as-is
-			CompoundStmt *block = new CompoundStmt( std::list< Label >() );
-			std::list<Statement *> &stmts = block->get_kids();
 
-			stmts.push_back( decl );
-			forStmt->set_initialization( 0 );
-			stmts.push_back( forStmt );
+		std::list<Statement *> &init = forStmt->get_initialization(); 
+		if ( init.size() == 0 ) {
+			return forStmt;
+		} // if
 
-			return block;
-		} // if
+		// create compound statement, move initializers outside, leave _for_ as-is
+		CompoundStmt *block = new CompoundStmt( std::list< Label >() );
+		std::list<Statement *> &stmts = block->get_kids();
+		for ( std::list<Statement *>::iterator it = init.begin(); it != init.end(); ++it ) {
+			stmts.push_back( *it );
+		}	// for
+
+		// add for to the new block
+		stmts.push_back( forStmt );
+		forStmt->set_initialization( std::list<Statement *>() );
+		return block;
 
 		return forStmt;
Index: src/ControlStruct/MLEMutator.cc
===================================================================
--- src/ControlStruct/MLEMutator.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/ControlStruct/MLEMutator.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,7 +10,14 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Sat Jun 27 10:56:14 2015
-// Update Count     : 174
-//
+// Last Modified On : Mon Jul 20 13:58:35 2015
+// Update Count     : 176
+//
+
+// NOTE: There are two known subtle differences from the code that uC++ 
+// generates for the same input
+// -CFA puts the break label inside at the end of a switch, uC++ puts it after
+// -CFA puts the break label after a block, uC++ puts it inside at the end
+// we don't yet know if these differences are important, but if they are then
+// the fix would go in this file, since this is where these labels are generated.
 
 #include <cassert>
Index: src/ControlStruct/Mutate.cc
===================================================================
--- src/ControlStruct/Mutate.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/ControlStruct/Mutate.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jun 03 23:08:43 2015
-// Update Count     : 5
+// Last Modified On : Wed Jul 15 14:50:04 2015
+// Update Count     : 7
 //
 
@@ -36,5 +36,6 @@
 namespace ControlStruct {
 	void mutate( std::list< Declaration * > translationUnit ) {
-		// ForExprMutator formut;
+		// hoist initialization out of for statements
+		ForExprMutator formut;
 
 		// normalizes label definitions and generates multi-level
@@ -51,5 +52,5 @@
 		// LabelTypeChecker lbl;
 
-		// mutateAll( translationUnit, formut );
+		mutateAll( translationUnit, formut );
 		acceptAll( translationUnit, lfix );
 		mutateAll( translationUnit, chmut );
Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/GenPoly/PolyMutator.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 07:45:50 2015
-// Update Count     : 1
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:50:58 2015
+// Update Count     : 3
 //
 
@@ -92,5 +92,5 @@
 	Statement * PolyMutator::mutate(ForStmt *forStmt) {
 		forStmt->set_body(  mutateStatement( forStmt->get_body() ) );
-		forStmt->set_initialization(  maybeMutate( forStmt->get_initialization(), *this ) );
+		mutateAll( forStmt->get_initialization(), *this );
 		forStmt->set_condition(  mutateExpression( forStmt->get_condition() ) );
 		forStmt->set_increment(  mutateExpression( forStmt->get_increment() ) );
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/DeclarationNode.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 12:34:05 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Jul 08 16:40:37 2015
-// Update Count     : 121
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Jul 14 14:46:32 2015
+// Update Count     : 126
 //
 
@@ -472,6 +472,5 @@
 		if ( o->get_link() ) {
 			set_link( o->get_link()->clone() );
-		}
-
+		} // if
 	} // if
 	delete o;
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/ParseNode.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul  2 17:57:05 2015
-// Update Count     : 84
+// Last Modified On : Tue Jul 14 14:58:25 2015
+// Update Count     : 91
 //
 
@@ -265,5 +265,5 @@
 class DeclarationNode : public ParseNode {
   public:
-	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, Attribute };
+	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic };
 	enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
 	enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
@@ -352,4 +352,5 @@
 	std::string name;
 	std::list< StorageClass > storageClasses;
+	std::list< std::string > attributes;
 	ExpressionNode *bitfieldWidth;
 	InitializerNode *initializer;
@@ -358,5 +359,5 @@
 
 	static UniqueName anonymous;
-};
+}; // DeclarationNode
 
 class StatementNode : public ParseNode {
@@ -380,13 +381,14 @@
 	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
 
-	void set_control( ExpressionNode * );
-	StatementNode * set_block( StatementNode * );
-
-	ExpressionNode *get_control() const ;
-	StatementNode *get_block() const;
-	StatementNode::Type get_type() const;
+	StatementNode *set_block( StatementNode *b ) {	block = b; return this; }
+	StatementNode *get_block() const { return block; }
+
+	void set_control( ExpressionNode *c ) { control = c; }
+	ExpressionNode *get_control() const { return control; }
+
+	StatementNode::Type get_type() const { return type; }
 
 	StatementNode *add_label( const std::string * );
-	std::list<std::string> *get_labels() const;
+	const std::list<std::string> &get_labels() const { return labels; }
 
 	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
@@ -409,10 +411,10 @@
 	ExpressionNode *control;
 	StatementNode *block;
-	std::list<std::string> *labels;
+	std::list<std::string> labels;
 	std::string *target;				// target label for jump statements
 	DeclarationNode *decl;
 
 	bool isCatchRest;
-};
+}; // StatementNode
 
 class CompoundStmtNode : public StatementNode {
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/StatementNode.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  6 23:25:41 2015
-// Update Count     : 19
+// Last Modified On : Thu Jul 16 16:20:24 2015
+// Update Count     : 30
 //
 
@@ -72,5 +72,4 @@
 	delete control;
 	delete block;
-	delete labels;
 	delete target;
 	delete decl;
@@ -103,38 +102,11 @@
 }
 
-void StatementNode::set_control( ExpressionNode *c ) {
-	control = c;
-}
-
-StatementNode * StatementNode::set_block( StatementNode *b ) {
-	block = b;
-
-	return this;
-}
-
-ExpressionNode *StatementNode::get_control() const {
-	return control;
-}
-
-StatementNode *StatementNode::get_block() const {
-	return block;
-}
-
-StatementNode::Type StatementNode::get_type() const {
-	return type;
-}
-
 StatementNode *StatementNode::add_label( const std::string *l ) {
 	if ( l != 0 ) {
-		if ( labels == 0 )
-			labels = new std::list<std::string>();
-
-		labels->push_front(*l ); 
+		labels.push_front( *l ); 
 		delete l;
 	} // if
 	return this;
 }
-
-std::list<std::string> *StatementNode::get_labels() const { return labels; }
 
 StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
@@ -170,13 +142,11 @@
 
 void StatementNode::print( std::ostream &os, int indent ) const {
-	if ( labels != 0 ) {
-		if ( ! labels->empty()) {
-			std::list<std::string>::const_iterator i;
-
-			os << string( indent, ' ' );
-			for ( i = labels->begin(); i != labels->end(); i++ )
-				os << *i << ":";
-			os << endl;
-		} // if
+	if ( ! labels.empty()) {
+		std::list<std::string>::const_iterator i;
+
+		os << string( indent, ' ' );
+		for ( i = labels.begin(); i != labels.end(); i++ )
+			os << *i << ":";
+		os << endl;
 	} // if
 
@@ -225,7 +195,7 @@
 	std::list<Label> labs;
 
-	if ( labels != 0 ) {
+	if ( ! labels.empty() ) {
 		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels->begin(), labels->end(), lab_it );
+		copy( labels.begin(), labels.end(), lab_it );
 	} // if
 
@@ -271,7 +241,8 @@
 			assert( ctl != 0 );
 
-			Statement *stmt = 0;
-			if ( ctl->get_init() != 0 )
-				stmt = ctl->get_init()->build();
+			std::list<Statement *> init;
+			if ( ctl->get_init() != 0 ) {
+				buildList( ctl->get_init(), init );
+			} // if
 
 			Expression *cond = 0;
@@ -283,5 +254,5 @@
 				incr = ctl->get_change()->build();
 
-			return new ForStmt( labs, stmt, cond, incr, branches.front() );
+			return new ForStmt( labs, init, cond, incr, branches.front() );
 		}
 	  case Switch:
@@ -377,9 +348,9 @@
 Statement *CompoundStmtNode::build() const {
 	std::list<Label> labs;
-	std::list<std::string> *labels = get_labels();
-
-	if ( labels != 0 ) {
+	const std::list<std::string> &labels = get_labels();
+
+	if ( ! labels.empty() ) {
 		std::back_insert_iterator< std::list<Label> > lab_it( labs );
-		copy( labels->begin(), labels->end(), lab_it );
+		copy( labels.begin(), labels.end(), lab_it );
 	} // if
 
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/TypeData.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 07:30:06 2015
-// Update Count     : 26
+// Last Modified On : Tue Jul 14 14:57:23 2015
+// Update Count     : 32
 //
 
@@ -397,4 +397,7 @@
 		} // if
 		break;
+	  default:
+		os << "internal error: TypeData::print " << kind  << endl;
+		assert( false );
 	} // switch
 }
@@ -474,9 +477,5 @@
 		return buildVariable();
 	} else {
-		if ( isInline || isNoreturn ) {
-			throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", this );
-		} else {
-			return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init );
-		} // if
+		return new ObjectDecl( name, sc, linkage, bitfieldWidth, build(), init, isInline, isNoreturn );
 	} // if
 	return 0;
@@ -536,7 +535,4 @@
 		  case DeclarationNode::Atomic:
 			q.isAtomic = true;
-			break;
-		  case DeclarationNode::Attribute:
-			q.isAttribute = true;
 			break;
 		} // switch
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/parser.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -80,4 +80,5 @@
 #include "lex.h"
 #include "ParseNode.h"
+#include "TypeData.h"
 #include "LinkageSpec.h"
 
@@ -89,5 +90,5 @@
 
 /* Line 268 of yacc.c  */
-#line 92 "Parser/parser.cc"
+#line 93 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -324,5 +325,5 @@
 
 /* Line 293 of yacc.c  */
-#line 107 "parser.yy"
+#line 108 "parser.yy"
 
 	Token tok;
@@ -339,5 +340,5 @@
 
 /* Line 293 of yacc.c  */
-#line 342 "Parser/parser.cc"
+#line 343 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -351,5 +352,5 @@
 
 /* Line 343 of yacc.c  */
-#line 354 "Parser/parser.cc"
+#line 355 "Parser/parser.cc"
 
 #ifdef short
@@ -982,78 +983,78 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   279,   279,   285,   294,   295,   296,   300,   301,   302,
-     306,   307,   311,   315,   316,   320,   321,   327,   329,   331,
-     333,   335,   337,   342,   343,   349,   351,   353,   354,   356,
-     357,   359,   362,   367,   368,   374,   375,   376,   381,   383,
-     388,   389,   393,   395,   397,   399,   401,   406,   407,   409,
-     411,   413,   415,   417,   423,   425,   427,   429,   431,   433,
-     435,   437,   442,   443,   444,   445,   449,   450,   452,   457,
-     458,   460,   462,   467,   468,   470,   475,   476,   478,   483,
-     484,   486,   488,   490,   495,   496,   498,   503,   504,   509,
-     510,   515,   516,   521,   522,   527,   528,   533,   534,   536,
-     538,   543,   548,   549,   551,   553,   559,   560,   566,   568,
-     570,   572,   577,   578,   583,   584,   585,   586,   587,   588,
-     589,   590,   591,   592,   596,   597,   603,   604,   610,   611,
-     612,   613,   614,   615,   616,   617,   621,   626,   628,   638,
-     639,   644,   646,   648,   650,   654,   655,   660,   665,   668,
-     670,   672,   677,   679,   687,   688,   690,   694,   695,   700,
-     701,   706,   707,   711,   716,   717,   721,   723,   729,   730,
-     734,   736,   738,   740,   746,   747,   751,   752,   756,   758,
-     760,   765,   767,   772,   774,   778,   781,   785,   788,   792,
-     794,   796,   801,   803,   805,   814,   816,   818,   823,   825,
-     830,   843,   844,   849,   851,   856,   860,   862,   864,   866,
-     870,   872,   876,   877,   881,   885,   886,   892,   894,   898,
-     899,   904,   906,   910,   911,   915,   917,   921,   922,   926,
-     927,   931,   932,   947,   948,   949,   950,   951,   955,   960,
-     967,   977,   982,   987,   995,  1000,  1005,  1010,  1015,  1023,
-    1045,  1050,  1057,  1059,  1066,  1071,  1076,  1087,  1092,  1097,
-    1102,  1107,  1116,  1121,  1129,  1130,  1131,  1132,  1138,  1143,
-    1151,  1152,  1153,  1154,  1158,  1159,  1160,  1161,  1166,  1167,
-    1176,  1177,  1182,  1183,  1188,  1190,  1192,  1194,  1196,  1199,
-    1198,  1210,  1211,  1213,  1223,  1224,  1229,  1233,  1235,  1237,
-    1239,  1241,  1243,  1245,  1247,  1252,  1254,  1256,  1258,  1260,
-    1262,  1264,  1266,  1268,  1270,  1272,  1274,  1280,  1281,  1283,
-    1285,  1287,  1292,  1293,  1299,  1300,  1302,  1304,  1309,  1311,
-    1313,  1315,  1320,  1321,  1323,  1325,  1330,  1331,  1333,  1338,
-    1339,  1341,  1343,  1348,  1350,  1352,  1357,  1358,  1362,  1364,
-    1366,  1368,  1370,  1375,  1377,  1382,  1384,  1389,  1390,  1392,
-    1393,  1398,  1399,  1401,  1403,  1408,  1410,  1416,  1417,  1419,
-    1422,  1425,  1430,  1431,  1436,  1441,  1445,  1447,  1449,  1454,
-    1456,  1462,  1463,  1471,  1472,  1476,  1477,  1478,  1480,  1482,
-    1489,  1490,  1492,  1494,  1499,  1500,  1506,  1507,  1511,  1512,
-    1517,  1518,  1519,  1521,  1529,  1530,  1532,  1535,  1537,  1541,
-    1542,  1543,  1545,  1547,  1551,  1556,  1564,  1565,  1574,  1576,
-    1581,  1582,  1583,  1587,  1588,  1589,  1593,  1594,  1595,  1599,
-    1600,  1601,  1606,  1607,  1608,  1609,  1615,  1616,  1621,  1622,
-    1626,  1627,  1628,  1629,  1644,  1645,  1650,  1651,  1657,  1659,
-    1662,  1664,  1666,  1689,  1690,  1692,  1694,  1699,  1700,  1702,
-    1707,  1712,  1713,  1719,  1718,  1722,  1726,  1728,  1730,  1736,
-    1737,  1742,  1747,  1749,  1754,  1756,  1757,  1759,  1764,  1766,
-    1768,  1773,  1775,  1780,  1785,  1793,  1799,  1798,  1812,  1813,
-    1818,  1819,  1823,  1828,  1833,  1841,  1846,  1857,  1858,  1869,
-    1870,  1876,  1877,  1881,  1882,  1883,  1886,  1885,  1896,  1901,
-    1906,  1912,  1921,  1927,  1933,  1939,  1945,  1953,  1959,  1967,
-    1973,  1982,  1983,  1984,  1988,  1992,  1994,  1997,  1999,  2003,
-    2004,  2008,  2012,  2013,  2016,  2018,  2019,  2023,  2024,  2025,
-    2026,  2060,  2061,  2062,  2063,  2067,  2072,  2077,  2079,  2081,
-    2086,  2088,  2090,  2092,  2097,  2099,  2109,  2110,  2111,  2115,
-    2117,  2119,  2124,  2126,  2128,  2133,  2135,  2137,  2146,  2147,
-    2148,  2152,  2154,  2156,  2161,  2163,  2165,  2170,  2172,  2174,
-    2189,  2190,  2191,  2192,  2196,  2197,  2202,  2204,  2206,  2211,
-    2213,  2215,  2217,  2222,  2224,  2226,  2236,  2237,  2238,  2239,
-    2243,  2245,  2247,  2252,  2254,  2256,  2258,  2263,  2265,  2267,
-    2298,  2299,  2300,  2301,  2305,  2310,  2318,  2320,  2322,  2327,
-    2329,  2334,  2336,  2350,  2351,  2352,  2356,  2358,  2360,  2362,
-    2364,  2369,  2370,  2372,  2374,  2379,  2381,  2383,  2389,  2391,
-    2393,  2397,  2399,  2401,  2403,  2417,  2418,  2419,  2423,  2425,
-    2427,  2429,  2431,  2436,  2437,  2439,  2441,  2446,  2448,  2450,
-    2456,  2457,  2459,  2468,  2471,  2473,  2476,  2478,  2480,  2493,
-    2494,  2495,  2499,  2501,  2503,  2505,  2507,  2512,  2513,  2515,
-    2517,  2522,  2524,  2532,  2533,  2534,  2539,  2540,  2544,  2546,
-    2548,  2550,  2552,  2554,  2561,  2563,  2565,  2567,  2569,  2571,
-    2573,  2575,  2577,  2579,  2584,  2586,  2588,  2593,  2619,  2620,
-    2622,  2626,  2627,  2631,  2633,  2635,  2637,  2639,  2641,  2648,
-    2650,  2652,  2654,  2656,  2658,  2663,  2668,  2670,  2672,  2690,
-    2692,  2697,  2698
+       0,   282,   282,   288,   297,   298,   299,   303,   304,   305,
+     309,   310,   314,   318,   319,   323,   324,   330,   332,   334,
+     336,   338,   340,   345,   346,   352,   354,   356,   357,   359,
+     360,   362,   365,   370,   371,   377,   378,   379,   384,   386,
+     391,   392,   396,   398,   400,   402,   404,   409,   410,   412,
+     414,   416,   418,   420,   426,   428,   430,   432,   434,   436,
+     438,   440,   445,   446,   447,   448,   452,   453,   455,   460,
+     461,   463,   465,   470,   471,   473,   478,   479,   481,   486,
+     487,   489,   491,   493,   498,   499,   501,   506,   507,   512,
+     513,   518,   519,   524,   525,   530,   531,   536,   537,   539,
+     541,   546,   551,   552,   554,   556,   562,   563,   569,   571,
+     573,   575,   580,   581,   586,   587,   588,   589,   590,   591,
+     592,   593,   594,   595,   599,   600,   606,   607,   613,   614,
+     615,   616,   617,   618,   619,   620,   624,   631,   633,   643,
+     644,   649,   651,   653,   655,   659,   660,   665,   670,   673,
+     675,   677,   682,   684,   692,   693,   695,   699,   700,   705,
+     706,   711,   712,   716,   721,   722,   726,   728,   734,   735,
+     739,   741,   743,   745,   751,   752,   756,   757,   761,   763,
+     765,   770,   772,   777,   779,   783,   786,   790,   793,   797,
+     799,   801,   806,   808,   810,   819,   821,   823,   828,   830,
+     835,   848,   849,   854,   856,   861,   865,   867,   869,   871,
+     875,   877,   881,   882,   886,   890,   891,   897,   899,   903,
+     904,   909,   911,   915,   916,   920,   922,   926,   927,   931,
+     932,   936,   937,   952,   953,   954,   955,   956,   960,   965,
+     972,   982,   987,   992,  1000,  1005,  1010,  1015,  1020,  1028,
+    1050,  1055,  1062,  1064,  1071,  1076,  1081,  1092,  1097,  1102,
+    1107,  1112,  1121,  1126,  1134,  1135,  1136,  1137,  1143,  1148,
+    1156,  1157,  1158,  1159,  1163,  1164,  1165,  1166,  1171,  1172,
+    1181,  1182,  1187,  1188,  1193,  1195,  1197,  1199,  1201,  1204,
+    1203,  1215,  1216,  1218,  1228,  1229,  1234,  1238,  1240,  1242,
+    1244,  1246,  1248,  1250,  1252,  1257,  1259,  1261,  1263,  1265,
+    1267,  1269,  1271,  1273,  1275,  1277,  1279,  1285,  1286,  1288,
+    1290,  1292,  1297,  1298,  1304,  1305,  1307,  1309,  1314,  1316,
+    1318,  1320,  1325,  1326,  1328,  1330,  1335,  1336,  1338,  1343,
+    1344,  1346,  1348,  1353,  1355,  1357,  1362,  1363,  1367,  1369,
+    1371,  1373,  1375,  1380,  1382,  1387,  1389,  1394,  1395,  1397,
+    1398,  1403,  1404,  1406,  1408,  1413,  1415,  1421,  1422,  1424,
+    1427,  1430,  1435,  1436,  1441,  1446,  1450,  1452,  1454,  1459,
+    1461,  1467,  1468,  1476,  1477,  1481,  1482,  1483,  1485,  1487,
+    1494,  1495,  1497,  1499,  1504,  1505,  1511,  1512,  1516,  1517,
+    1522,  1523,  1524,  1526,  1534,  1535,  1537,  1540,  1542,  1546,
+    1547,  1548,  1550,  1552,  1556,  1561,  1569,  1570,  1579,  1581,
+    1586,  1587,  1588,  1592,  1593,  1594,  1598,  1599,  1600,  1604,
+    1605,  1606,  1611,  1612,  1613,  1614,  1620,  1621,  1626,  1627,
+    1631,  1632,  1633,  1634,  1649,  1650,  1655,  1656,  1662,  1664,
+    1667,  1669,  1671,  1694,  1695,  1697,  1699,  1704,  1705,  1707,
+    1712,  1717,  1718,  1724,  1723,  1727,  1731,  1733,  1735,  1741,
+    1742,  1747,  1752,  1754,  1759,  1761,  1762,  1764,  1769,  1771,
+    1773,  1778,  1780,  1785,  1790,  1798,  1804,  1803,  1817,  1818,
+    1823,  1824,  1828,  1833,  1838,  1846,  1851,  1862,  1863,  1874,
+    1875,  1881,  1882,  1886,  1887,  1888,  1891,  1890,  1901,  1906,
+    1911,  1917,  1926,  1932,  1938,  1944,  1950,  1958,  1964,  1972,
+    1978,  1987,  1988,  1989,  1993,  1997,  1999,  2004,  2005,  2009,
+    2010,  2015,  2021,  2022,  2025,  2027,  2028,  2032,  2033,  2034,
+    2035,  2069,  2071,  2072,  2074,  2079,  2084,  2089,  2091,  2093,
+    2098,  2100,  2102,  2104,  2109,  2111,  2121,  2123,  2124,  2129,
+    2131,  2133,  2138,  2140,  2142,  2147,  2149,  2151,  2160,  2161,
+    2162,  2166,  2168,  2170,  2175,  2177,  2179,  2184,  2186,  2188,
+    2203,  2205,  2206,  2208,  2213,  2214,  2219,  2221,  2223,  2228,
+    2230,  2232,  2234,  2239,  2241,  2243,  2253,  2255,  2256,  2258,
+    2263,  2265,  2267,  2272,  2274,  2276,  2278,  2283,  2285,  2287,
+    2318,  2320,  2321,  2323,  2328,  2333,  2341,  2343,  2345,  2350,
+    2352,  2357,  2359,  2373,  2374,  2376,  2381,  2383,  2385,  2387,
+    2389,  2394,  2395,  2397,  2399,  2404,  2406,  2408,  2414,  2416,
+    2418,  2422,  2424,  2426,  2428,  2442,  2443,  2445,  2450,  2452,
+    2454,  2456,  2458,  2463,  2464,  2466,  2468,  2473,  2475,  2477,
+    2483,  2484,  2486,  2495,  2498,  2500,  2503,  2505,  2507,  2520,
+    2521,  2523,  2528,  2530,  2532,  2534,  2536,  2541,  2542,  2544,
+    2546,  2551,  2553,  2561,  2562,  2563,  2568,  2569,  2573,  2575,
+    2577,  2579,  2581,  2583,  2590,  2592,  2594,  2596,  2598,  2600,
+    2602,  2604,  2606,  2608,  2613,  2615,  2617,  2622,  2648,  2649,
+    2651,  2655,  2656,  2660,  2662,  2664,  2666,  2668,  2670,  2677,
+    2679,  2681,  2683,  2685,  2687,  2692,  2697,  2699,  2701,  2719,
+    2721,  2726,  2727
 };
 #endif
@@ -5007,5 +5008,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 279 "parser.yy"
+#line 282 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5016,5 +5017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 285 "parser.yy"
+#line 288 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5025,5 +5026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 294 "parser.yy"
+#line 297 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5032,5 +5033,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 295 "parser.yy"
+#line 298 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5039,5 +5040,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 299 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5046,5 +5047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 320 "parser.yy"
+#line 323 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5053,5 +5054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 321 "parser.yy"
+#line 324 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -5060,5 +5061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 328 "parser.yy"
+#line 331 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5067,5 +5068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 330 "parser.yy"
+#line 333 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5074,5 +5075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 332 "parser.yy"
+#line 335 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5081,5 +5082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 334 "parser.yy"
+#line 337 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5088,5 +5089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 336 "parser.yy"
+#line 339 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5095,5 +5096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 338 "parser.yy"
+#line 341 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5102,5 +5103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 348 "parser.yy"
+#line 351 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     break;
@@ -5109,5 +5110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 350 "parser.yy"
+#line 353 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5116,5 +5117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 352 "parser.yy"
+#line 355 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5123,5 +5124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 355 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5130,5 +5131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
+#line 361 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5137,5 +5138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 360 "parser.yy"
+#line 363 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5144,5 +5145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 363 "parser.yy"
+#line 366 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5151,5 +5152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 369 "parser.yy"
+#line 372 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5158,5 +5159,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 377 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5165,5 +5166,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 377 "parser.yy"
+#line 380 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_asArgName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5172,5 +5173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 382 "parser.yy"
+#line 385 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_asArgName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5179,5 +5180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 384 "parser.yy"
+#line 387 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_asArgName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     break;
@@ -5186,5 +5187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 389 "parser.yy"
+#line 392 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5193,5 +5194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 394 "parser.yy"
+#line 397 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5200,5 +5201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
+#line 399 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5207,5 +5208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 401 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5214,5 +5215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
+#line 403 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5221,5 +5222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 402 "parser.yy"
+#line 405 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5228,5 +5229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
+#line 411 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5235,5 +5236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 410 "parser.yy"
+#line 413 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5242,5 +5243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -5249,5 +5250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 417 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5256,5 +5257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
+#line 419 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5263,5 +5264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 421 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5270,5 +5271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 424 "parser.yy"
+#line 427 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5277,5 +5278,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 429 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5284,5 +5285,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 431 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     break;
@@ -5291,5 +5292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 433 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5298,5 +5299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5305,5 +5306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+#line 437 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5312,5 +5313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+#line 439 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5319,5 +5320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 438 "parser.yy"
+#line 441 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true )); }
     break;
@@ -5326,5 +5327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 442 "parser.yy"
+#line 445 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     break;
@@ -5333,5 +5334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
+#line 446 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     break;
@@ -5340,5 +5341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 444 "parser.yy"
+#line 447 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     break;
@@ -5347,5 +5348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
+#line 448 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     break;
@@ -5354,5 +5355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
+#line 454 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5361,5 +5362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 453 "parser.yy"
+#line 456 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5368,5 +5369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 459 "parser.yy"
+#line 462 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5375,5 +5376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 461 "parser.yy"
+#line 464 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5382,5 +5383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 463 "parser.yy"
+#line 466 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5389,5 +5390,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
+#line 472 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5396,5 +5397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 471 "parser.yy"
+#line 474 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5403,5 +5404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 477 "parser.yy"
+#line 480 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5410,5 +5411,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 479 "parser.yy"
+#line 482 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5417,5 +5418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 488 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5424,5 +5425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 490 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5431,5 +5432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 489 "parser.yy"
+#line 492 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5438,5 +5439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5445,5 +5446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 500 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5452,5 +5453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5459,5 +5460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 508 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5466,5 +5467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5473,5 +5474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 517 "parser.yy"
+#line 520 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5480,5 +5481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 523 "parser.yy"
+#line 526 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5487,5 +5488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
+#line 532 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5494,5 +5495,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 535 "parser.yy"
+#line 538 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5501,5 +5502,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 537 "parser.yy"
+#line 540 "parser.yy"
     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5508,5 +5509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5515,5 +5516,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 550 "parser.yy"
+#line 553 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5522,5 +5523,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 552 "parser.yy"
+#line 555 "parser.yy"
     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5529,5 +5530,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 554 "parser.yy"
+#line 557 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5536,5 +5537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5543,5 +5544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
+#line 570 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     break;
@@ -5550,5 +5551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 569 "parser.yy"
+#line 572 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     break;
@@ -5557,5 +5558,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 571 "parser.yy"
+#line 574 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5564,5 +5565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 573 "parser.yy"
+#line 576 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5571,5 +5572,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 579 "parser.yy"
+#line 582 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5578,5 +5579,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 583 "parser.yy"
+#line 586 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     break;
@@ -5585,5 +5586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 584 "parser.yy"
+#line 587 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     break;
@@ -5592,5 +5593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 585 "parser.yy"
+#line 588 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     break;
@@ -5599,5 +5600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 586 "parser.yy"
+#line 589 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     break;
@@ -5606,5 +5607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
+#line 590 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     break;
@@ -5613,5 +5614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 588 "parser.yy"
+#line 591 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     break;
@@ -5620,5 +5621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 589 "parser.yy"
+#line 592 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     break;
@@ -5627,5 +5628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 590 "parser.yy"
+#line 593 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     break;
@@ -5634,5 +5635,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     break;
@@ -5641,5 +5642,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 592 "parser.yy"
+#line 595 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     break;
@@ -5648,5 +5649,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 598 "parser.yy"
+#line 601 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5655,5 +5656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
+#line 606 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5662,5 +5663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5669,6 +5670,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
-    { (yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );}
+#line 625 "parser.yy"
+    {
+			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
+		}
     break;
 
@@ -5676,5 +5679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 632 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5683,5 +5686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 634 "parser.yy"
+#line 639 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5690,5 +5693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 645 "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;
@@ -5697,5 +5700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+#line 650 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5704,5 +5707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+#line 652 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -5711,5 +5714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 649 "parser.yy"
+#line 654 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5718,5 +5721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 656 "parser.yy"
+#line 661 "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;
@@ -5725,5 +5728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 661 "parser.yy"
+#line 666 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5732,5 +5735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 667 "parser.yy"
+#line 672 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5739,5 +5742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
+#line 674 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5746,5 +5749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 671 "parser.yy"
+#line 676 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5753,5 +5756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 673 "parser.yy"
+#line 678 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     break;
@@ -5760,5 +5763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 678 "parser.yy"
+#line 683 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5767,5 +5770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 680 "parser.yy"
+#line 685 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -5774,5 +5777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 687 "parser.yy"
+#line 692 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5781,5 +5784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 689 "parser.yy"
+#line 694 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5788,5 +5791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 696 "parser.yy"
+#line 701 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5795,5 +5798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 700 "parser.yy"
+#line 705 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5802,5 +5805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 701 "parser.yy"
+#line 706 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5809,5 +5812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 707 "parser.yy"
+#line 712 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5816,5 +5819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 711 "parser.yy"
+#line 716 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5823,5 +5826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 716 "parser.yy"
+#line 721 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5830,5 +5833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 722 "parser.yy"
+#line 727 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5837,5 +5840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 724 "parser.yy"
+#line 729 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5844,5 +5847,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 729 "parser.yy"
+#line 734 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5851,5 +5854,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 735 "parser.yy"
+#line 740 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5858,5 +5861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 742 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5865,5 +5868,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
+#line 744 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5872,5 +5875,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 741 "parser.yy"
+#line 746 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
     break;
@@ -5879,5 +5882,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 746 "parser.yy"
+#line 751 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5886,5 +5889,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 751 "parser.yy"
+#line 756 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru, 0, 0 ); }
     break;
@@ -5893,5 +5896,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 752 "parser.yy"
+#line 757 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru, 0, 0 ); }
     break;
@@ -5900,5 +5903,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 757 "parser.yy"
+#line 762 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5907,5 +5910,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+#line 764 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -5914,5 +5917,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 766 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -5921,5 +5924,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 766 "parser.yy"
+#line 771 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5928,5 +5931,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 768 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5935,5 +5938,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 778 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5942,5 +5945,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 777 "parser.yy"
+#line 782 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5949,5 +5952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 780 "parser.yy"
+#line 785 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, 0, 0 ); }
     break;
@@ -5956,5 +5959,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 784 "parser.yy"
+#line 789 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5963,5 +5966,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, 0, 0 ); }
     break;
@@ -5970,5 +5973,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
+#line 796 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5977,5 +5980,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+#line 798 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5984,5 +5987,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
+#line 800 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5991,5 +5994,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 797 "parser.yy"
+#line 802 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, 0, 0 ); }
     break;
@@ -5998,5 +6001,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
+#line 807 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6005,5 +6008,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 804 "parser.yy"
+#line 809 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6012,5 +6015,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
+#line 811 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6022,5 +6025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
+#line 822 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6029,5 +6032,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 824 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6036,5 +6039,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
+#line 829 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6043,5 +6046,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
+#line 831 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6050,5 +6053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
+#line 836 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6060,5 +6063,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+#line 850 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6070,5 +6073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 850 "parser.yy"
+#line 855 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6077,5 +6080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 852 "parser.yy"
+#line 857 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6087,5 +6090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
+#line 866 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
     break;
@@ -6094,5 +6097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+#line 868 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
     break;
@@ -6101,5 +6104,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 865 "parser.yy"
+#line 870 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
     break;
@@ -6108,5 +6111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 867 "parser.yy"
+#line 872 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Asm, 0, 0 ); }
     break;
@@ -6115,5 +6118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 881 "parser.yy"
+#line 886 "parser.yy"
     {}
     break;
@@ -6122,5 +6125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 885 "parser.yy"
+#line 890 "parser.yy"
     {}
     break;
@@ -6129,5 +6132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 893 "parser.yy"
+#line 898 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6136,5 +6139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 905 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6143,5 +6146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6150,5 +6153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 912 "parser.yy"
+#line 917 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6157,5 +6160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 926 "parser.yy"
+#line 931 "parser.yy"
     {}
     break;
@@ -6164,5 +6167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+#line 932 "parser.yy"
     {}
     break;
@@ -6171,5 +6174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 956 "parser.yy"
+#line 961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6181,5 +6184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 963 "parser.yy"
+#line 968 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6191,5 +6194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 968 "parser.yy"
+#line 973 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6199,14 +6202,4 @@
 
   case 241:
-
-/* Line 1806 of yacc.c  */
-#line 978 "parser.yy"
-    {
-			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
-			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
-		}
-    break;
-
-  case 242:
 
 /* Line 1806 of yacc.c  */
@@ -6218,8 +6211,18 @@
     break;
 
+  case 242:
+
+/* Line 1806 of yacc.c  */
+#line 988 "parser.yy"
+    {
+			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) );
+		}
+    break;
+
   case 243:
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 993 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6231,5 +6234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 996 "parser.yy"
+#line 1001 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6239,14 +6242,4 @@
 
   case 245:
-
-/* Line 1806 of yacc.c  */
-#line 1001 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
-		}
-    break;
-
-  case 246:
 
 /* Line 1806 of yacc.c  */
@@ -6258,8 +6251,18 @@
     break;
 
+  case 246:
+
+/* Line 1806 of yacc.c  */
+#line 1011 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			(yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) );
+		}
+    break;
+
   case 247:
 
 /* Line 1806 of yacc.c  */
-#line 1011 "parser.yy"
+#line 1016 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6271,5 +6274,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+#line 1021 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6281,5 +6284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1024 "parser.yy"
+#line 1029 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6290,5 +6293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1047 "parser.yy"
+#line 1052 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6299,5 +6302,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1051 "parser.yy"
+#line 1056 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6308,5 +6311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1058 "parser.yy"
+#line 1063 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6315,19 +6318,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1062 "parser.yy"
+#line 1067 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
   case 254:
-
-/* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::TD );
-			(yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
-		}
-    break;
-
-  case 255:
 
 /* Line 1806 of yacc.c  */
@@ -6339,8 +6332,18 @@
     break;
 
+  case 255:
+
+/* Line 1806 of yacc.c  */
+#line 1077 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			(yyval.decl) = (yyvsp[(2) - (2)].decl)->addTypedef();
+		}
+    break;
+
   case 256:
 
 /* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+#line 1082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6352,5 +6355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1088 "parser.yy"
+#line 1093 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6362,5 +6365,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1093 "parser.yy"
+#line 1098 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6372,5 +6375,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1098 "parser.yy"
+#line 1103 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6382,5 +6385,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1103 "parser.yy"
+#line 1108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6392,5 +6395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1108 "parser.yy"
+#line 1113 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6402,5 +6405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1117 "parser.yy"
+#line 1122 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6412,5 +6415,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1122 "parser.yy"
+#line 1127 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6422,5 +6425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1139 "parser.yy"
+#line 1144 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6432,5 +6435,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1144 "parser.yy"
+#line 1149 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6442,5 +6445,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+#line 1171 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6449,19 +6452,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 1178 "parser.yy"
+#line 1183 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 283:
-
-/* Line 1806 of yacc.c  */
-#line 1184 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
-    break;
-
   case 284:
 
 /* Line 1806 of yacc.c  */
-#line 1189 "parser.yy"
+#line 1194 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6470,5 +6466,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1191 "parser.yy"
+#line 1196 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6477,5 +6473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+#line 1198 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6484,5 +6480,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1195 "parser.yy"
+#line 1200 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6491,5 +6487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1202 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6498,5 +6494,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1199 "parser.yy"
+#line 1204 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6507,5 +6503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1203 "parser.yy"
+#line 1208 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6517,5 +6513,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+#line 1217 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6524,5 +6520,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1214 "parser.yy"
+#line 1219 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6531,5 +6527,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1225 "parser.yy"
+#line 1230 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6538,5 +6534,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+#line 1239 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6545,5 +6541,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1236 "parser.yy"
+#line 1241 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6552,5 +6548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1238 "parser.yy"
+#line 1243 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6559,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1240 "parser.yy"
+#line 1245 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6566,5 +6562,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1242 "parser.yy"
+#line 1247 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6573,5 +6569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1244 "parser.yy"
+#line 1249 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6580,5 +6576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1246 "parser.yy"
+#line 1251 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6587,5 +6583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1248 "parser.yy"
+#line 1253 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6594,5 +6590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1253 "parser.yy"
+#line 1258 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6601,5 +6597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1255 "parser.yy"
+#line 1260 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6608,5 +6604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1257 "parser.yy"
+#line 1262 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6615,5 +6611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1259 "parser.yy"
+#line 1264 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6622,5 +6618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1261 "parser.yy"
+#line 1266 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6629,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1263 "parser.yy"
+#line 1268 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6636,5 +6632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1265 "parser.yy"
+#line 1270 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6643,5 +6639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
+#line 1272 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6650,5 +6646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1269 "parser.yy"
+#line 1274 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6657,5 +6653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1271 "parser.yy"
+#line 1276 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6664,5 +6660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1273 "parser.yy"
+#line 1278 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6671,5 +6667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1275 "parser.yy"
+#line 1280 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -6678,5 +6674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+#line 1287 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6685,5 +6681,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1284 "parser.yy"
+#line 1289 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6692,5 +6688,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1286 "parser.yy"
+#line 1291 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6699,5 +6695,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
+#line 1293 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6706,5 +6702,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1294 "parser.yy"
+#line 1299 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6713,5 +6709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+#line 1306 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6720,5 +6716,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+#line 1308 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6727,5 +6723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1305 "parser.yy"
+#line 1310 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6734,5 +6730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1310 "parser.yy"
+#line 1315 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6741,5 +6737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1312 "parser.yy"
+#line 1317 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6748,5 +6744,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+#line 1319 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6755,5 +6751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+#line 1321 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6762,5 +6758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1322 "parser.yy"
+#line 1327 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6769,5 +6765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1329 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6776,5 +6772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+#line 1331 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6783,5 +6779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1332 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6790,5 +6786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1334 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6797,5 +6793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1340 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6804,5 +6800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6811,5 +6807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1349 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6818,5 +6814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1354 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6825,5 +6821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1351 "parser.yy"
+#line 1356 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6832,5 +6828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1353 "parser.yy"
+#line 1358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6839,5 +6835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1363 "parser.yy"
+#line 1368 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6846,5 +6842,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1365 "parser.yy"
+#line 1370 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     break;
@@ -6853,5 +6849,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1367 "parser.yy"
+#line 1372 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     break;
@@ -6860,5 +6856,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1369 "parser.yy"
+#line 1374 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     break;
@@ -6867,5 +6863,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1371 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -6874,5 +6870,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+#line 1381 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -6881,5 +6877,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+#line 1383 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -6888,5 +6884,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     break;
@@ -6895,5 +6891,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+#line 1390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6902,5 +6898,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+#line 1396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -6909,5 +6905,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
+#line 1399 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -6916,5 +6912,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
+#line 1405 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6923,5 +6919,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1402 "parser.yy"
+#line 1407 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -6930,5 +6926,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1404 "parser.yy"
+#line 1409 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -6937,5 +6933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+#line 1414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6944,5 +6940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -6951,5 +6947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+#line 1421 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -6958,5 +6954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1423 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -6965,5 +6961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
+#line 1426 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -6972,5 +6968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
+#line 1429 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -6979,5 +6975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+#line 1435 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6986,5 +6982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
+#line 1437 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -6993,5 +6989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1437 "parser.yy"
+#line 1442 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7000,5 +6996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
+#line 1451 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7007,5 +7003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
+#line 1453 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -7014,5 +7010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
+#line 1455 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     break;
@@ -7021,5 +7017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1455 "parser.yy"
+#line 1460 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7028,5 +7024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1457 "parser.yy"
+#line 1462 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7035,5 +7031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+#line 1467 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7042,5 +7038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1464 "parser.yy"
+#line 1469 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7049,5 +7045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
+#line 1476 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7056,5 +7052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1484 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7063,5 +7059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
+#line 1486 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7070,5 +7066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1483 "parser.yy"
+#line 1488 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7077,5 +7073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1491 "parser.yy"
+#line 1496 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7084,5 +7080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
+#line 1498 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7091,5 +7087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
+#line 1500 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7098,5 +7094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+#line 1506 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7105,5 +7101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1506 "parser.yy"
+#line 1511 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7112,5 +7108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1513 "parser.yy"
+#line 1518 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7119,5 +7115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1520 "parser.yy"
+#line 1525 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7126,5 +7122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1522 "parser.yy"
+#line 1527 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7133,5 +7129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
+#line 1536 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7140,5 +7136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1534 "parser.yy"
+#line 1539 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7147,5 +7143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
+#line 1541 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7154,19 +7150,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1546 "parser.yy"
+#line 1551 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
   case 414:
-
-/* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
-		}
-    break;
-
-  case 415:
 
 /* Line 1806 of yacc.c  */
@@ -7178,8 +7164,18 @@
     break;
 
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1562 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addType( (yyvsp[(1) - (3)].decl) )->addInitializer( new InitializerNode( (yyvsp[(3) - (3)].en) ) );
+		}
+    break;
+
   case 417:
 
 /* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
+#line 1571 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7188,5 +7184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
+#line 1580 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7195,5 +7191,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+#line 1582 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7202,5 +7198,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
+#line 1607 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7209,5 +7205,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
+#line 1615 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7216,5 +7212,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1615 "parser.yy"
+#line 1620 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7223,5 +7219,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
+#line 1622 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7230,5 +7226,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1621 "parser.yy"
+#line 1626 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7237,5 +7233,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
+#line 1627 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7244,5 +7240,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1627 "parser.yy"
+#line 1632 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7251,5 +7247,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1628 "parser.yy"
+#line 1633 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7258,5 +7254,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1630 "parser.yy"
+#line 1635 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7265,5 +7261,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1646 "parser.yy"
+#line 1651 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
@@ -7272,5 +7268,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1652 "parser.yy"
+#line 1657 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
@@ -7279,5 +7275,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1658 "parser.yy"
+#line 1663 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7286,5 +7282,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1661 "parser.yy"
+#line 1666 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7293,5 +7289,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+#line 1668 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7300,5 +7296,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+#line 1670 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -7307,5 +7303,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1667 "parser.yy"
+#line 1672 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7314,5 +7310,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1691 "parser.yy"
+#line 1696 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7321,5 +7317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1693 "parser.yy"
+#line 1698 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7328,5 +7324,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+#line 1700 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7335,5 +7331,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1701 "parser.yy"
+#line 1706 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7342,5 +7338,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+#line 1708 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7349,5 +7345,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1708 "parser.yy"
+#line 1713 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7356,5 +7352,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1714 "parser.yy"
+#line 1719 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7363,5 +7359,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1719 "parser.yy"
+#line 1724 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7370,5 +7366,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
+#line 1726 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7377,5 +7373,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1727 "parser.yy"
+#line 1732 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7384,5 +7380,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1729 "parser.yy"
+#line 1734 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7391,5 +7387,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1731 "parser.yy"
+#line 1736 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7398,5 +7394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
+#line 1741 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7405,5 +7401,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1738 "parser.yy"
+#line 1743 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7412,5 +7408,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1743 "parser.yy"
+#line 1748 "parser.yy"
     {
 			typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
@@ -7422,5 +7418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1748 "parser.yy"
+#line 1753 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7429,5 +7425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1750 "parser.yy"
+#line 1755 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7436,5 +7432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1755 "parser.yy"
+#line 1760 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -7443,5 +7439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1758 "parser.yy"
+#line 1763 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
@@ -7450,5 +7446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
+#line 1765 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7457,5 +7453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1765 "parser.yy"
+#line 1770 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7464,5 +7460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1767 "parser.yy"
+#line 1772 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7471,5 +7467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1769 "parser.yy"
+#line 1774 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7478,5 +7474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
+#line 1779 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7485,5 +7481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1776 "parser.yy"
+#line 1781 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7492,5 +7488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1781 "parser.yy"
+#line 1786 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7502,5 +7498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1786 "parser.yy"
+#line 1791 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7512,5 +7508,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1794 "parser.yy"
+#line 1799 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7522,5 +7518,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1799 "parser.yy"
+#line 1804 "parser.yy"
     {
 			typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
@@ -7532,5 +7528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1804 "parser.yy"
+#line 1809 "parser.yy"
     {
 			typedefTable.leaveContext();
@@ -7543,19 +7539,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1814 "parser.yy"
+#line 1819 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
   case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1824 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope2( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(1) - (1)].decl);
-		}
-    break;
-
-  case 493:
 
 /* Line 1806 of yacc.c  */
@@ -7567,8 +7553,18 @@
     break;
 
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1834 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope2( TypedefTable::ID );
+			(yyval.decl) = (yyvsp[(1) - (1)].decl);
+		}
+    break;
+
   case 494:
 
 /* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+#line 1839 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7580,5 +7576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1842 "parser.yy"
+#line 1847 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7590,5 +7586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1847 "parser.yy"
+#line 1852 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7600,5 +7596,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
+#line 1862 "parser.yy"
     {}
     break;
@@ -7607,5 +7603,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1859 "parser.yy"
+#line 1864 "parser.yy"
     {
 			if ( theTree ) {
@@ -7620,5 +7616,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1871 "parser.yy"
+#line 1876 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7627,5 +7623,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1876 "parser.yy"
+#line 1881 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7634,5 +7630,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
+#line 1889 "parser.yy"
     {}
     break;
@@ -7641,5 +7637,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1886 "parser.yy"
+#line 1891 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7651,5 +7647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1896 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7662,5 +7658,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
+#line 1902 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7669,5 +7665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1907 "parser.yy"
+#line 1912 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7680,5 +7676,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7691,5 +7687,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1922 "parser.yy"
+#line 1927 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7702,5 +7698,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1928 "parser.yy"
+#line 1933 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7713,5 +7709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1934 "parser.yy"
+#line 1939 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7724,5 +7720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1940 "parser.yy"
+#line 1945 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7735,5 +7731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1946 "parser.yy"
+#line 1951 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7746,5 +7742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1954 "parser.yy"
+#line 1959 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7757,5 +7753,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1960 "parser.yy"
+#line 1965 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7768,5 +7764,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1968 "parser.yy"
+#line 1973 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7779,5 +7775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1974 "parser.yy"
+#line 1979 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7790,12 +7786,33 @@
 
 /* Line 1806 of yacc.c  */
-#line 1989 "parser.yy"
+#line 1994 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2004 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2011 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2017 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
   case 537:
 
 /* Line 1806 of yacc.c  */
-#line 2023 "parser.yy"
+#line 2032 "parser.yy"
     {}
     break;
@@ -7804,5 +7821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2024 "parser.yy"
+#line 2033 "parser.yy"
     {}
     break;
@@ -7811,5 +7828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+#line 2034 "parser.yy"
     {}
     break;
@@ -7818,12 +7835,33 @@
 
 /* Line 1806 of yacc.c  */
-#line 2026 "parser.yy"
+#line 2035 "parser.yy"
     {}
     break;
 
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2070 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 543:
+
+/* Line 1806 of yacc.c  */
+#line 2073 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2075 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 545:
 
 /* Line 1806 of yacc.c  */
-#line 2068 "parser.yy"
+#line 2080 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -7835,5 +7873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2073 "parser.yy"
+#line 2085 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7842,5 +7880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+#line 2090 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -7849,5 +7887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2080 "parser.yy"
+#line 2092 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -7856,5 +7894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2082 "parser.yy"
+#line 2094 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7863,5 +7901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2087 "parser.yy"
+#line 2099 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7870,5 +7908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2089 "parser.yy"
+#line 2101 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7877,5 +7915,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2091 "parser.yy"
+#line 2103 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7884,5 +7922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2093 "parser.yy"
+#line 2105 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7891,5 +7929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2098 "parser.yy"
+#line 2110 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -7898,12 +7936,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 2100 "parser.yy"
+#line 2112 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2122 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2125 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 559:
 
 /* Line 1806 of yacc.c  */
-#line 2116 "parser.yy"
+#line 2130 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -7912,5 +7964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2118 "parser.yy"
+#line 2132 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -7919,5 +7971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2120 "parser.yy"
+#line 2134 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7926,5 +7978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2125 "parser.yy"
+#line 2139 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -7933,5 +7985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2127 "parser.yy"
+#line 2141 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -7940,5 +7992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2129 "parser.yy"
+#line 2143 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7947,5 +7999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2134 "parser.yy"
+#line 2148 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7954,5 +8006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2136 "parser.yy"
+#line 2150 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7961,5 +8013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2138 "parser.yy"
+#line 2152 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7968,5 +8020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2153 "parser.yy"
+#line 2167 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7975,5 +8027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2155 "parser.yy"
+#line 2169 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -7982,5 +8034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2157 "parser.yy"
+#line 2171 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -7989,5 +8041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2162 "parser.yy"
+#line 2176 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -7996,5 +8048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2164 "parser.yy"
+#line 2178 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8003,5 +8055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+#line 2180 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8010,5 +8062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2171 "parser.yy"
+#line 2185 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8017,5 +8069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2173 "parser.yy"
+#line 2187 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8024,12 +8076,33 @@
 
 /* Line 1806 of yacc.c  */
-#line 2175 "parser.yy"
+#line 2189 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2204 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 585:
 
 /* Line 1806 of yacc.c  */
-#line 2198 "parser.yy"
+#line 2215 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8038,5 +8111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2203 "parser.yy"
+#line 2220 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8045,5 +8118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2205 "parser.yy"
+#line 2222 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8052,5 +8125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+#line 2224 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8059,5 +8132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8066,5 +8139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+#line 2231 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8073,5 +8146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+#line 2233 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8080,5 +8153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8087,5 +8160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+#line 2240 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8094,5 +8167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8101,12 +8174,33 @@
 
 /* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2254 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2259 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 600:
 
 /* Line 1806 of yacc.c  */
-#line 2244 "parser.yy"
+#line 2264 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8115,58 +8209,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+#line 2266 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
   case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 609:
 
 /* Line 1806 of yacc.c  */
@@ -8175,8 +8220,78 @@
     break;
 
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2273 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2275 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2277 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2279 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2284 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2319 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2322 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2324 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 614:
 
 /* Line 1806 of yacc.c  */
-#line 2306 "parser.yy"
+#line 2329 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8188,5 +8303,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+#line 2334 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8198,5 +8313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2319 "parser.yy"
+#line 2342 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8205,5 +8320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2321 "parser.yy"
+#line 2344 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8212,5 +8327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2323 "parser.yy"
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8219,5 +8334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8226,5 +8341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+#line 2353 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8233,5 +8348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8240,12 +8355,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 2337 "parser.yy"
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2375 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2377 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 626:
 
 /* Line 1806 of yacc.c  */
-#line 2357 "parser.yy"
+#line 2382 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8254,5 +8383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+#line 2384 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8261,5 +8390,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+#line 2386 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8268,5 +8397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2363 "parser.yy"
+#line 2388 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8275,5 +8404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8282,5 +8411,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2371 "parser.yy"
+#line 2396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8289,5 +8418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2373 "parser.yy"
+#line 2398 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8296,5 +8425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2375 "parser.yy"
+#line 2400 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8303,5 +8432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+#line 2405 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8310,5 +8439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
+#line 2407 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8317,5 +8446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2384 "parser.yy"
+#line 2409 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8324,5 +8453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+#line 2415 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8331,5 +8460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
+#line 2417 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8338,5 +8467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2423 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8345,5 +8474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
+#line 2425 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8352,5 +8481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
+#line 2427 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8359,12 +8488,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 2404 "parser.yy"
+#line 2429 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2444 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2446 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 648:
 
 /* Line 1806 of yacc.c  */
-#line 2424 "parser.yy"
+#line 2451 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8373,5 +8516,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2426 "parser.yy"
+#line 2453 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8380,5 +8523,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2428 "parser.yy"
+#line 2455 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8387,5 +8530,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2430 "parser.yy"
+#line 2457 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8394,5 +8537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2432 "parser.yy"
+#line 2459 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8401,5 +8544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2438 "parser.yy"
+#line 2465 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8408,5 +8551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2440 "parser.yy"
+#line 2467 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8415,5 +8558,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
+#line 2469 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8422,5 +8565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
+#line 2474 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8429,5 +8572,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
+#line 2476 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8436,5 +8579,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
+#line 2478 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8443,5 +8586,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+#line 2485 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8450,5 +8593,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+#line 2496 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8457,5 +8600,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+#line 2499 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8464,5 +8607,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+#line 2501 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8471,5 +8614,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2504 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8478,5 +8621,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+#line 2506 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8485,12 +8628,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+#line 2508 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2522 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 672:
 
 /* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+#line 2529 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8499,5 +8656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2502 "parser.yy"
+#line 2531 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8506,5 +8663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2504 "parser.yy"
+#line 2533 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8513,5 +8670,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
+#line 2535 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8520,5 +8677,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2537 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8527,5 +8684,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+#line 2543 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8534,5 +8691,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
+#line 2545 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8541,5 +8698,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+#line 2547 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8548,5 +8705,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
+#line 2552 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8555,5 +8712,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+#line 2554 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8562,5 +8719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+#line 2564 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8569,5 +8726,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
+#line 2574 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8576,5 +8733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+#line 2576 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8583,5 +8740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+#line 2578 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8590,5 +8747,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
+#line 2580 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8597,5 +8754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8604,5 +8761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2555 "parser.yy"
+#line 2584 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8611,5 +8768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2562 "parser.yy"
+#line 2591 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8618,5 +8775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
+#line 2593 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8625,5 +8782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2566 "parser.yy"
+#line 2595 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8632,5 +8789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2568 "parser.yy"
+#line 2597 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8639,5 +8796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+#line 2599 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8646,5 +8803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8653,5 +8810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
+#line 2603 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8660,5 +8817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+#line 2605 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8667,5 +8824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8674,5 +8831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+#line 2609 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8681,5 +8838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
+#line 2614 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8688,5 +8845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
+#line 2616 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8695,5 +8852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+#line 2621 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -8702,5 +8859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
+#line 2623 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -8709,5 +8866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8716,5 +8873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8723,5 +8880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
+#line 2663 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8730,5 +8887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2636 "parser.yy"
+#line 2665 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8737,5 +8894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2638 "parser.yy"
+#line 2667 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8744,5 +8901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2640 "parser.yy"
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8751,5 +8908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
+#line 2671 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8758,5 +8915,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2649 "parser.yy"
+#line 2678 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8765,5 +8922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2651 "parser.yy"
+#line 2680 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8772,5 +8929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
+#line 2682 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8779,5 +8936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2684 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8786,5 +8943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+#line 2686 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8793,5 +8950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+#line 2688 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8800,5 +8957,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2664 "parser.yy"
+#line 2693 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -8807,5 +8964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+#line 2698 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -8814,5 +8971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+#line 2700 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -8821,5 +8978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
+#line 2702 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -8828,5 +8985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2697 "parser.yy"
+#line 2726 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -8835,5 +8992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2699 "parser.yy"
+#line 2728 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -8842,5 +8999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 8845 "Parser/parser.cc"
+#line 9002 "Parser/parser.cc"
       default: break;
     }
@@ -9073,5 +9230,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2702 "parser.yy"
+#line 2731 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/parser.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -246,5 +246,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 107 "parser.yy"
+#line 108 "parser.yy"
 
 	Token tok;
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/Parser/parser.yy	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  3 13:53:45 2015
-// Update Count     : 1220
+// Last Modified On : Thu Jul 16 16:25:12 2015
+// Update Count     : 1267
 // 
 
@@ -54,4 +54,5 @@
 #include "lex.h"
 #include "ParseNode.h"
+#include "TypeData.h"
 #include "LinkageSpec.h"
 
@@ -227,4 +228,6 @@
 %type<decl> variable_abstract_array variable_abstract_declarator variable_abstract_function
 %type<decl> variable_abstract_ptr variable_array variable_declarator variable_function variable_ptr
+
+%type<decl> attribute_list_opt attribute_list attribute
 
 // initializers
@@ -620,5 +623,7 @@
 labeled_statement:
 	no_attr_identifier ':' attribute_list_opt statement
-		{ $$ = $4->add_label( $1 );}
+		{
+			$$ = $4->add_label( $1 );
+		}
 	;
 
@@ -1182,5 +1187,5 @@
 	type_qualifier_name
 	| attribute
-		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
+	//{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
 	;
 
@@ -1997,4 +2002,5 @@
 attribute_list_opt:										// GCC
 	// empty
+		{ $$ = 0; }
 	| attribute_list
 	;
@@ -2003,8 +2009,11 @@
 	attribute
 	| attribute_list attribute
+		{ $$ = $2->addQualifiers( $1 ); }
 	;
 
 attribute:												// GCC
 	ATTRIBUTE '(' '(' attribute_parameter_list ')' ')'
+	//		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
+		{ $$ = 0; }
 	;
 
@@ -2059,7 +2068,10 @@
 variable_declarator:
 	paren_identifier attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| variable_ptr
 	| variable_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| variable_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2108,6 +2120,8 @@
 function_declarator:
 	function_no_ptr attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| function_ptr
 	| function_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2188,7 +2202,10 @@
 type_redeclarator:
 	paren_type attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| type_ptr
 	| type_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| type_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2235,7 +2252,10 @@
 identifier_parameter_declarator:
 	paren_identifier attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| identifier_parameter_ptr
 	| identifier_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| identifier_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2297,7 +2317,10 @@
 type_parameter_redeclarator:
 	typedef attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| type_parameter_ptr
 	| type_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| type_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2350,5 +2373,7 @@
 	abstract_ptr
 	| abstract_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| abstract_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2417,5 +2442,7 @@
 	abstract_parameter_ptr
 	| abstract_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| abstract_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
@@ -2493,5 +2520,7 @@
 	variable_abstract_ptr
 	| variable_abstract_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	| variable_abstract_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
 	;
 
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/ResolvExpr/Resolver.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:17:01 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul  3 16:18:20 2015
-// Update Count     : 159
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:54:04 2015
+// Update Count     : 167
 //
 
@@ -226,25 +226,17 @@
 
 	void Resolver::visit( ForStmt *forStmt ) {
-	    // SymTab::Indexer::visit( forStmt );
-		Expression *newExpr;
-	    // for statements introduce a level of scope
-	    enterScope();
-	    maybeAccept( forStmt->get_initialization(), *this );
+		SymTab::Indexer::visit( forStmt );
+
 		if ( forStmt->get_condition() ) {
-			newExpr = findSingleExpression( forStmt->get_condition(), *this );
+			Expression * newExpr = findSingleExpression( forStmt->get_condition(), *this );
 			delete forStmt->get_condition();
 			forStmt->set_condition( newExpr );
 		} // if
-  
+		
 		if ( forStmt->get_increment() ) {
-			newExpr = findVoidExpression( forStmt->get_increment(), *this );
+			Expression * newExpr = findVoidExpression( forStmt->get_increment(), *this );
 			delete forStmt->get_increment();
 			forStmt->set_increment( newExpr );
 		} // if
-
-	    maybeAccept( forStmt->get_condition(), *this );
-	    maybeAccept( forStmt->get_increment(), *this );
-	    maybeAccept( forStmt->get_body(), *this );
-	    leaveScope();
 	}
 
Index: src/SymTab/AddVisit.h
===================================================================
--- src/SymTab/AddVisit.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SymTab/AddVisit.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 16:14:32 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:16:38 2015
-// Update Count     : 3
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:26:17 2015
+// Update Count     : 4
 //
 
@@ -57,5 +57,5 @@
 	inline void addVisit(ForStmt *forStmt, Visitor &visitor) {
 		addVisitStatement( forStmt->get_body(), visitor );
-		maybeAccept( forStmt->get_initialization(), visitor );
+		acceptAll( forStmt->get_initialization(), visitor );
 		maybeAccept( forStmt->get_condition(), visitor );
 		maybeAccept( forStmt->get_increment(), visitor );
Index: src/SymTab/TypeEquality.cc
===================================================================
--- src/SymTab/TypeEquality.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SymTab/TypeEquality.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jul 07 16:28:29 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jul 09 11:18:46 2015
-// Update Count     : 36
+// Last Modified On : Mon Jul 20 14:16:11 2015
+// Update Count     : 37
 //
 
@@ -91,6 +91,6 @@
 			// and must both have a dimension expression or not have a dimension
 			result = result	&& arrayType->get_isVarLen() == at->get_isVarLen()
-				&& (arrayType->get_dimension() != 0 && at->get_dimension() != 0
-					|| arrayType->get_dimension() == 0 && at->get_dimension() == 0);
+				&& ((arrayType->get_dimension() != 0 && at->get_dimension() != 0)
+					|| (arrayType->get_dimension() == 0 && at->get_dimension() == 0));
 
 			if ( vlaErr ) {
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SymTab/Validate.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Mon Jul 13 14:38:19 2015
-// Update Count     : 184
+// Last Modified On : Wed Jul 22 13:16:00 2015
+// Update Count     : 194
 //
 
@@ -169,5 +169,5 @@
 		virtual TypeDecl *mutate( TypeDecl *typeDecl );
 		virtual DeclarationWithType *mutate( FunctionDecl *funcDecl );
-		virtual ObjectDecl *mutate( ObjectDecl *objDecl );
+		virtual DeclarationWithType *mutate( ObjectDecl *objDecl );
 		virtual CompoundStmt *mutate( CompoundStmt *compoundStmt );
 		virtual Type *mutate( TypeInstType *aggregateUseType );
@@ -203,6 +203,8 @@
 	void validateType( Type *type, const Indexer *indexer ) {
 		Pass1 pass1;
+		Pass2 pass2( false, indexer );
 		Pass3 pass3( indexer );
 		type->accept( pass1 );
+		type->accept( pass2 );
 		type->accept( pass3 );
 	}
@@ -403,4 +405,9 @@
 			} // for
 		} // for
+
+		if ( ctx->get_parameters().size() != contextInst->get_parameters().size() ) {
+			throw SemanticError( "incorrect number of context parameters: ", contextInst );
+		} // if
+
 		applySubstitution( ctx->get_parameters().begin(), ctx->get_parameters().end(), contextInst->get_parameters().begin(), ctx->get_members().begin(), ctx->get_members().end(), back_inserter( contextInst->get_members() ) );
 	}
@@ -534,4 +541,6 @@
 		init->get_args().push_back( new NameExpr( "0" ) );
 		Statement *initStmt = new ExprStmt( noLabels, init );
+		std::list<Statement *> initList;
+		initList.push_back( initStmt );
   
 		UntypedExpr *cond = new UntypedExpr( new NameExpr( "?<?" ) );
@@ -559,5 +568,5 @@
 		assignExpr->get_args().push_back( srcIndex );
   
-		*out++ = new ForStmt( noLabels, initStmt, cond, inc, new ExprStmt( noLabels, assignExpr ) );
+		*out++ = new ForStmt( noLabels, initList, cond, inc, new ExprStmt( noLabels, assignExpr ) );
 	}
 
@@ -612,5 +621,5 @@
 			delete assigns.front();
 			assigns.pop_front();
-		}
+		} // for
 
 		declsToAdd.insert( declsToAdd.begin(), assigns.begin(), assigns.end() );
@@ -827,5 +836,5 @@
 				rtt->get_parameters().clear();
 				cloneAll(typeInst->get_parameters(), rtt->get_parameters());
-			}
+			} // if
 			delete typeInst;
 			return ret;
@@ -881,7 +890,12 @@
 	}
 
-	ObjectDecl *EliminateTypedef::mutate( ObjectDecl * objDecl ) {
+	DeclarationWithType *EliminateTypedef::mutate( ObjectDecl * objDecl ) {
 		TypedefMap oldNames = typedefNames;
-		ObjectDecl *ret = Mutator::mutate( objDecl );
+		DeclarationWithType *ret = Mutator::mutate( objDecl );
+		if ( FunctionType *funtype = dynamic_cast<FunctionType *>( ret->get_type() ) ) {
+			return new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn() );
+		} else if ( objDecl->get_isInline() || objDecl->get_isNoreturn() ) {
+			throw SemanticError( "invalid inline or _Noreturn specification in declaration of ", objDecl );
+		} // if
 		typedefNames = oldNames;
 		return ret;
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Declaration.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:07:20 2015
-// Update Count     : 9
+// Last Modified On : Mon Jul 13 17:58:38 2015
+// Update Count     : 10
 //
 
@@ -27,9 +27,9 @@
 
 Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage )
-		: name( name ), storageClass( sc ), linkage( linkage ), uniqueId( 0 ) {
+		: name( name ), storageClass( sc ), linkage( linkage ), isInline( false ), isNoreturn( false ), uniqueId( 0 ) {
 }
 
 Declaration::Declaration( const Declaration &other )
-		: name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
+	: name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), isInline( other.isInline ), isNoreturn( other.isNoreturn ), uniqueId( other.uniqueId ) {
 }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Declaration.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 09:10:31 2015
-// Update Count     : 25
+// Last Modified On : Mon Jul 13 18:15:59 2015
+// Update Count     : 28
 //
 
@@ -35,4 +35,8 @@
 	LinkageSpec::Type get_linkage() const { return linkage; }
 	void set_linkage( LinkageSpec::Type newValue ) { linkage = newValue; }
+	bool get_isInline() const { return isInline; }
+	void set_isInline( bool newValue ) { isInline = newValue; }
+	bool get_isNoreturn() const { return isNoreturn; }
+	void set_isNoreturn( bool newValue ) { isNoreturn = newValue; }
 	UniqueId get_uniqueId() const { return uniqueId; }
 
@@ -50,4 +54,5 @@
 	DeclarationNode::StorageClass storageClass;
 	LinkageSpec::Type linkage;
+	bool isInline, isNoreturn;
 	UniqueId uniqueId;
 };
@@ -75,5 +80,5 @@
 	typedef DeclarationWithType Parent;
   public:
-	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init );
+	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline = false, bool isNoreturn = false );
 	ObjectDecl( const ObjectDecl &other );
 	virtual ~ObjectDecl();
@@ -89,5 +94,5 @@
 	virtual ObjectDecl *clone() const { return new ObjectDecl( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual ObjectDecl *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual DeclarationWithType *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 	virtual void printShort( std::ostream &os, int indent = 0 ) const;
@@ -112,6 +117,4 @@
 	CompoundStmt *get_statements() const { return statements; }
 	void set_statements( CompoundStmt *newValue ) { statements = newValue; }
-	bool get_isInline() const { return isInline; }
-	bool get_isNoreturn() const { return isNoreturn; }
 	std::list< std::string >& get_oldIdents() { return oldIdents; }
 	std::list< Declaration* >& get_oldDecls() { return oldDecls; }
@@ -125,5 +128,4 @@
 	FunctionType *type;
 	CompoundStmt *statements;
-	bool isInline, isNoreturn;
 	std::list< std::string > oldIdents;
 	std::list< Declaration* > oldDecls;
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/FunctionDecl.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 09:10:32 2015
-// Update Count     : 16
+// Last Modified On : Mon Jul 13 18:11:44 2015
+// Update Count     : 19
 //
 
@@ -22,5 +22,7 @@
 
 FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn )
-		: Parent( name, sc, linkage ), type( type ), statements( statements ), isInline( isInline ), isNoreturn( isNoreturn ) {
+		: Parent( name, sc, linkage ), type( type ), statements( statements ) {
+	set_isInline( isInline );
+	set_isNoreturn( isNoreturn );
 	// this is a brazen hack to force the function "main" to have C linkage
 	if ( name == "main" ) {
@@ -30,5 +32,5 @@
 
 FunctionDecl::FunctionDecl( const FunctionDecl &other )
-	: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ), isInline( other.isInline ), isNoreturn( other.isNoreturn ) {
+	: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
 }
 
@@ -57,8 +59,8 @@
 		os << LinkageSpec::toString( get_linkage() ) << " ";
 	} // if
-	if ( isInline ) {
+	if ( get_isInline() ) {
 		os << "inline ";
 	} // if
-	if ( isNoreturn ) {
+	if ( get_isNoreturn() ) {
 		os << "_Noreturn ";
 	} // if
@@ -96,8 +98,8 @@
 		os << get_name() << ": ";
 	} // if
-	if ( isInline ) {
+	if ( get_isInline() ) {
 		os << "inline ";
 	} // if
-	if ( isNoreturn ) {
+	if ( get_isNoreturn() ) {
 		os << "_Noreturn ";
 	} // if
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Mutator.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 10:10:46 2015
-// Update Count     : 1
+// Last Modified On : Thu Jul 16 16:10:54 2015
+// Update Count     : 3
 //
 
@@ -28,5 +28,5 @@
 Mutator::~Mutator() {}
 
-ObjectDecl *Mutator::mutate( ObjectDecl *objectDecl ) {
+DeclarationWithType *Mutator::mutate( ObjectDecl *objectDecl ) {
 	objectDecl->set_type( maybeMutate( objectDecl->get_type(), *this ) );
 	objectDecl->set_init( maybeMutate( objectDecl->get_init(), *this ) );
@@ -109,5 +109,5 @@
 
 Statement *Mutator::mutate( ForStmt *forStmt ) {
-	forStmt->set_initialization( maybeMutate( forStmt->get_initialization(), *this ) );
+	mutateAll( forStmt->get_initialization(), *this );
 	forStmt->set_condition( maybeMutate( forStmt->get_condition(), *this ) );
 	forStmt->set_increment( maybeMutate( forStmt->get_increment(), *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Mutator.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 29 16:34:08 2015
-// Update Count     : 4
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jul 13 18:14:47 2015
+// Update Count     : 5
 //
 #include <cassert>
@@ -26,5 +26,5 @@
 	virtual ~Mutator();
   public:
-	virtual ObjectDecl* mutate( ObjectDecl *objectDecl );
+	virtual DeclarationWithType* mutate( ObjectDecl *objectDecl );
 	virtual DeclarationWithType* mutate( FunctionDecl *functionDecl );
 	virtual Declaration* mutate( StructDecl *aggregateDecl );
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/ObjectDecl.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:10:16 2015
-// Update Count     : 15
+// Last Modified On : Mon Jul 13 18:08:27 2015
+// Update Count     : 16
 //
 
@@ -20,6 +20,8 @@
 #include "utility.h"
 
-ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init )
+ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, Expression *bitfieldWidth, Type *type, Initializer *init, bool isInline, bool isNoreturn )
 	: Parent( name, sc, linkage ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
+	set_isInline( isInline );
+	set_isNoreturn( isNoreturn );
 }
 
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Statement.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun 29 17:37:10 2015
-// Update Count     : 22
+// Last Modified By : Rob Schluntz
+// Last Modified On : Wed Jul 15 14:57:40 2015
+// Update Count     : 27
 //
 
@@ -192,10 +192,10 @@
 }
 
-ForStmt::ForStmt( std::list<Label> labels, Statement *initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
+ForStmt::ForStmt( std::list<Label> labels, std::list<Statement *> initialization_, Expression *condition_, Expression *increment_, Statement *body_ ):
 	Statement( labels ), initialization( initialization_ ), condition( condition_ ), increment( increment_ ), body( body_ ) {
 }
 
 ForStmt::~ForStmt() {
-	delete initialization;
+	deleteAll( initialization );
 	delete condition;
 	delete increment;
@@ -213,6 +213,7 @@
 
 	os << string( indent + 2, ' ' ) << "initialization: \n"; 
-	if ( initialization != 0 )
-		initialization->print( os, indent + 4 );
+	for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) {
+		(*it)->print( os, indent + 4 );
+	}
 
 	os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Statement.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun 23 11:44:27 2015
-// Update Count     : 20
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:14:54 2015
+// Update Count     : 24
 //
 
@@ -199,10 +199,10 @@
 class ForStmt : public Statement {
   public:
-	ForStmt( std::list<Label> labels, Statement *initialization = 0,
+	ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
 	     Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
 	virtual ~ForStmt();
 
-	Statement *get_initialization() { return initialization; }
-	void set_initialization( Statement *newValue ) { initialization = newValue; }
+	std::list<Statement *> &get_initialization() { return initialization; }
+	void set_initialization( std::list<Statement *> newValue ) { initialization = newValue; }
 	Expression *get_condition() { return condition; }
 	void set_condition( Expression *newValue ) { condition = newValue; }
@@ -217,5 +217,5 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
-	Statement *initialization;
+	std::list<Statement *> initialization;
 	Expression *condition;
 	Expression *increment;
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Type.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue May 19 16:52:27 2015
-// Update Count     : 2
+// Last Modified On : Thu Jul  9 16:45:13 2015
+// Update Count     : 3
 //
 
@@ -75,4 +75,7 @@
 		os << "_Atomic ";
 	} // if
+	if ( tq.isAttribute ) {
+		os << "__attribute(( )) ";
+	} // if
 }
 
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Type.h	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 16:47:54 2015
-// Update Count     : 13
+// Last Modified On : Thu Jul  9 16:46:15 2015
+// Update Count     : 14
 //
 
@@ -25,5 +25,5 @@
 	struct Qualifiers {  
 		Qualifiers(): isConst( false ), isVolatile( false ), isRestrict( false ), isLvalue( false ), isAtomic( false ), isAttribute( false ) {}
-		Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isAttribute): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isAttribute( isAttribute ) {}
+		Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isAttribute ): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isAttribute( isAttribute ) {}
 	
 		Qualifiers &operator+=( const Qualifiers &other );
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/SynTree/Visitor.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:14:51 2015
-// Update Count     : 2
+// Last Modified By : Rob Schluntz
+// Last Modified On : Tue Jul 14 12:31:03 2015
+// Update Count     : 3
 //
 
@@ -94,6 +94,5 @@
 
 void Visitor::visit( ForStmt *forStmt ) {
-	// ForStmt still needs to be fixed
-	maybeAccept( forStmt->get_initialization(), *this );
+	acceptAll( forStmt->get_initialization(), *this );
 	maybeAccept( forStmt->get_condition(), *this );
 	maybeAccept( forStmt->get_increment(), *this );
Index: src/driver/cc1.cc
===================================================================
--- src/driver/cc1.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/driver/cc1.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Fri Aug 26 14:23:51 2005
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 30 08:58:29 2015
-// Update Count     : 51
+// Last Modified On : Thu Jul 16 17:09:14 2015
+// Update Count     : 54
 //
 
@@ -319,7 +319,4 @@
 		uargs[0] = ( *new string( bprefix + "/cfa-cpp" ) ).c_str();
 
-		uargs[nuargs] = "-p";
-		nuargs += 1;
-
 		uargs[nuargs] = tmpname;
 		nuargs += 1;
Index: src/driver/cfa.cc
===================================================================
--- src/driver/cfa.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/driver/cfa.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun 23 17:47:03 2015
-// Update Count     : 119
+// Last Modified On : Thu Jul 16 17:09:23 2015
+// Update Count     : 124
 //
 
@@ -52,4 +52,5 @@
 	string Version( VERSION );							// current version number from CONFIG
 	string Major( "0" ), Minor( "0" ), Patch( "0" );	// default version numbers
+
 	int posn1 = Version.find( "." );					// find the divider between major and minor version numbers
 	if ( posn1 == -1 ) {								// not there ?
@@ -256,7 +257,9 @@
 	// add the correct set of flags based on the type of compile this is
 
-	args[nargs] = ( *new string( string("-D__CFA_MAJOR__=") + Major ) ).c_str();
+	args[nargs] = ( *new string( string("-D__CFA__=") + Major ) ).c_str();
 	nargs += 1;
 	args[nargs] = ( *new string( string("-D__CFA_MINOR__=") + Minor ) ).c_str();
+	nargs += 1;
+	args[nargs] = ( *new string( string("-D__CFA_PATCHLEVEL__=") + Patch ) ).c_str();
 	nargs += 1;
 
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 1e8f14363888febd56c5b6f87d7874191e24fd45)
+++ src/main.cc	(revision b29f8f30a4ca0a0f8e240002265e2de95e57588a)
@@ -10,6 +10,6 @@
 // Created On       : Fri May 15 23:12:02 2015
 // Last Modified By : Rob Schluntz
-// Last Modified On : Mon Jul 06 15:01:26 2015
-// Update Count     : 79
+// Last Modified On : Wed Jul 15 16:45:24 2015
+// Update Count     : 145
 //
 
@@ -54,5 +54,6 @@
 	if ( errorp ) std::cerr << x << std::endl;
 
-void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
+static void parse( FILE * input, LinkageSpec::Type t, bool shouldExit = false );
+static void dump( std::list< Declaration * > & translationUnit );
 
 bool
@@ -64,5 +65,5 @@
 	libcfap = false,
 	nopreludep = false,
-	protop = false,
+	noprotop = false,
 	parsep = false,
 	resolvep = false,									// used in AlternativeFinder
@@ -81,7 +82,7 @@
 	{ "grammar", no_argument, 0, Grammar },
 	{ "libcfa", no_argument, 0, LibCFA },
-	{ "nopreamble", no_argument, 0, Nopreamble },
+	{ "no-preamble", no_argument, 0, Nopreamble },
 	{ "parse", no_argument, 0, Parse },
-	{ "prototypes", no_argument, 0, Prototypes },
+	{ "no-prototypes", no_argument, 0, Prototypes },
 	{ "resolver", no_argument, 0, Resolver },
 	{ "symbol", no_argument, 0, Symbol },
@@ -131,5 +132,5 @@
 		  case Prototypes:
 		  case 'p':										// generate prototypes for preamble functions
-			protop = true;
+			noprotop = true;
 			break;
 		  case Parse:
@@ -221,5 +222,5 @@
 		Parser::get_parser().freeTree();
 		if ( astp ) {
-			printAll( translationUnit, std::cout );
+			dump( translationUnit );
 			return 0;
 		} // if
@@ -242,5 +243,5 @@
 
 		if ( validp ) {
-			printAll( translationUnit, std::cout );
+			dump( translationUnit );
 			return 0;
 		} // if
@@ -252,5 +253,4 @@
 
 		if ( libcfap ) {
-			protop = true;
 			// generate the bodies of cfa library functions
 			LibCfa::makeLibCfa( translationUnit );
@@ -258,5 +258,5 @@
 
 		if ( bresolvep ) {
-			printAll( translationUnit, std::cout );
+			dump( translationUnit );
 			return 0;
 		} // if
@@ -265,5 +265,5 @@
 		ResolvExpr::resolve( translationUnit );
 		if ( exprp ) {
-			printAll( translationUnit, std::cout );
+			dump( translationUnit );
 		}
 
@@ -279,9 +279,9 @@
 		// print tree right before code generation
 		if ( codegenp ) {
-			printAll( translationUnit, std::cout );
-			return 0;
-		} // if
-
-		CodeGen::generate( translationUnit, *output, true ); //protop );
+			dump( translationUnit );
+			return 0;
+		} // if
+
+		CodeGen::generate( translationUnit, *output, ! noprotop );
 
 		if ( output != &std::cout ) {
@@ -290,5 +290,5 @@
 	} catch ( SemanticError &e ) {
 		if ( errorp ) {
-			printAll( translationUnit, std::cerr );
+			dump( translationUnit );
 		}
 		e.print( std::cerr );
@@ -315,5 +315,5 @@
 } // main
 
-void parse( FILE * input, LinkageSpec::Type linkage, bool shouldExit ) {
+static void parse( FILE * input, LinkageSpec::Type linkage, bool shouldExit ) {
 	Parser::get_parser().set_linkage( linkage );
 	Parser::get_parser().parse( input );
@@ -325,4 +325,21 @@
 }
 
+static bool notPrelude( Declaration * decl ) {
+	return ! LinkageSpec::isBuiltin( decl->get_linkage() );
+}
+
+static void dump( std::list< Declaration * > & translationUnit ) {
+	std::list< Declaration * > decls;
+	if ( noprotop ) {
+		filter( translationUnit.begin(), translationUnit.end(), 
+				std::back_inserter( decls ), notPrelude );
+	} else {
+		decls = translationUnit;
+	}
+
+	printAll( decls, std::cout );
+}
+
+
 // Local Variables: //
 // tab-width: 4 //
