Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/CodeGen/CodeGenerator.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun  9 13:21:00 2016
-// Update Count     : 256
+// Last Modified On : Mon Jul  4 20:38:32 2016
+// Update Count     : 300
 //
 
@@ -47,4 +47,16 @@
 			dynamic_cast< WhileStmt * >( stmt ) || dynamic_cast< ForStmt * > ( stmt ) || dynamic_cast< SwitchStmt *>( stmt );
 	}
+
+	void CodeGenerator::extension( Expression *expr ) {
+		if ( expr->get_extension() ) {
+			output << "__extension__ ";
+		} // if
+	} // extension
+
+	void CodeGenerator::extension( Declaration *decl ) {
+		if ( decl->get_extension() ) {
+			output << "__extension__ ";
+		} // if
+	} // extension
 
 	ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
@@ -110,4 +122,5 @@
 	//*** Declarations
 	void CodeGenerator::visit( FunctionDecl *functionDecl ) {
+		extension( functionDecl );
 		genAttributes( functionDecl->get_attributes() );
 
@@ -134,4 +147,5 @@
 
 	void CodeGenerator::visit( ObjectDecl *objectDecl ) {
+		extension( objectDecl );
 		handleStorageClass( objectDecl );
 		output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
@@ -170,20 +184,23 @@
 
 	void CodeGenerator::visit( StructDecl *structDecl ) {
+		extension( structDecl );
 		output << "struct ";
 		handleAggregate( structDecl );
 	}
 
-	void CodeGenerator::visit( UnionDecl *aggregateDecl ) {
+	void CodeGenerator::visit( UnionDecl *unionDecl ) {
+		extension( unionDecl );
 		output << "union ";
-		handleAggregate( aggregateDecl );
-	}
-
-	void CodeGenerator::visit( EnumDecl *aggDecl ) {
+		handleAggregate( unionDecl );
+	}
+
+	void CodeGenerator::visit( EnumDecl *enumDecl ) {
+		extension( enumDecl );
 		output << "enum ";
 
-		if ( aggDecl->get_name() != "" )
-			output << aggDecl->get_name();
-
-		std::list< Declaration* > &memb = aggDecl->get_members();
+		if ( enumDecl->get_name() != "" )
+			output << enumDecl->get_name();
+
+		std::list< Declaration* > &memb = enumDecl->get_members();
 
 		if ( ! memb.empty() ) {
@@ -208,9 +225,10 @@
 	}
 
-	void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
+	void CodeGenerator::visit( TraitDecl *traitDecl ) {}
 
 	void CodeGenerator::visit( TypedefDecl *typeDecl ) {
-		output << "typedef ";
-		output << genType( typeDecl->get_base(), typeDecl->get_name() );
+		assert( false && "Typedefs are removed and substituted in earlier passes." );
+		//output << "typedef ";
+		//output << genType( typeDecl->get_base(), typeDecl->get_name() );
 	}
 
@@ -218,4 +236,5 @@
 		// really, we should mutate this into something that isn't a TypeDecl but that requires large-scale changes,
 		// still to be done
+		extension( typeDecl );
 		output << "extern unsigned long " << typeDecl->get_name();
 		if ( typeDecl->get_base() ) {
@@ -251,6 +270,5 @@
 		output << "{ ";
 		if ( init->begin_initializers() == init->end_initializers() ) {
-			// illegal to leave initializer list empty for scalar initializers,
-			// but always legal to have 0
+			// illegal to leave initializer list empty for scalar initializers, but always legal to have 0
 			output << "0";
 		} else {
@@ -317,6 +335,6 @@
 				  case OT_DTOR:
 					if ( applicationExpr->get_args().size() == 1 ) {
-						// the expression fed into a single parameter constructor or destructor
-						// may contain side effects, so must still output this expression
+						// the expression fed into a single parameter constructor or destructor may contain side
+						// effects, so must still output this expression
 						output << "(";
 						(*arg++)->accept( *this );
@@ -403,6 +421,6 @@
 				  case OT_DTOR:
 					if ( untypedExpr->get_args().size() == 1 ) {
-						// the expression fed into a single parameter constructor or destructor
-						// may contain side effects, so must still output this expression
+						// the expression fed into a single parameter constructor or destructor may contain side
+						// effects, so must still output this expression
 						output << "(";
 						(*arg++)->accept( *this );
@@ -500,6 +518,5 @@
 			output << ")";
 		} else {
-			// otherwise, the cast is to an lvalue type, so the cast
-			// should be dropped, since the result of a cast is
+			// otherwise, the cast is to an lvalue type, so the cast should be dropped, since the result of a cast is
 			// never an lvalue in C
 		}
@@ -546,6 +563,6 @@
 
 	void CodeGenerator::visit( AlignofExpr *alignofExpr ) {
+		// use GCC extension to avoid bumping std to C11
 		extension( alignofExpr );
-		// use GCC extension to avoid bumping std to C11
 		output << "__alignof__(";
 		if ( alignofExpr->get_isType() ) {
@@ -558,9 +575,8 @@
 
 	void CodeGenerator::visit( UntypedOffsetofExpr *offsetofExpr ) {
-		assert( false && "UntypedOffsetofExpr should not reach code generation" );
+		assert( false && "UntypedOffsetofExpr should not reach code generation." );
 	}
 
 	void CodeGenerator::visit( OffsetofExpr *offsetofExpr ) {
-		extension( offsetofExpr );
 		// use GCC builtin
 		output << "__builtin_offsetof(";
@@ -571,5 +587,5 @@
 
 	void CodeGenerator::visit( OffsetPackExpr *offsetPackExpr ) {
-		assert( false && "OffsetPackExpr should not reach code generation" );
+		assert( false && "OffsetPackExpr should not reach code generation." );
 	}
 
@@ -612,5 +628,4 @@
 
 	void CodeGenerator::visit( AsmExpr *asmExpr ) {
-		extension( asmExpr );
 		if ( asmExpr->get_inout() ) {
 			output << "[ ";
@@ -777,6 +792,5 @@
 
 	void CodeGenerator::visit( ForStmt *forStmt ) {
-		// initialization is always hoisted, so don't
-		// bother doing anything with that
+		// initialization is always hoisted, so don't bother doing anything with that
 		output << "for (;";
 
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/CodeGen/CodeGenerator.h	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun  9 13:15:58 2016
-// Update Count     : 29
+// Last Modified On : Mon Jul  4 17:12:40 2016
+// Update Count     : 34
 //
 
@@ -104,9 +104,6 @@
 		};
 
-		void extension( Expression *expr ) {
-			if ( expr->get_extension() ) {
-				output << "__extension__ ";
-			} // if
-		} // extension
+		void extension( Expression *expr );
+		void extension( Declaration *decl );
 	  private:
 
@@ -121,5 +118,4 @@
 		void handleAggregate( AggregateDecl *aggDecl );
 		void handleTypedef( NamedTypeDecl *namedType );
-
 	};
 
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/DeclarationNode.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -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 : Thu Apr 14 15:38:09 2016
-// Update Count     : 161
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jun 30 14:39:51 2016
+// Update Count     : 163
 //
 
@@ -855,9 +855,8 @@
 Declaration *DeclarationNode::build() const {
 	if ( type ) {
-		Declaration *newDecl = type->buildDecl( name, buildStorageClass(), maybeBuild< Expression >( bitfieldWidth ), buildFuncSpecifier( Inline ), buildFuncSpecifier( Noreturn ), linkage, maybeBuild< Initializer >(initializer) );
-		return newDecl;
+		return type->buildDecl( name, buildStorageClass(), maybeBuild< Expression >( bitfieldWidth ), buildFuncSpecifier( Inline ), buildFuncSpecifier( Noreturn ), linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
 	} // if
 	if ( ! buildFuncSpecifier( Inline ) && ! buildFuncSpecifier( Noreturn ) ) {
-		return new ObjectDecl( name, buildStorageClass(), linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) );
+		return (new ObjectDecl( name, buildStorageClass(), linkage, maybeBuild< Expression >( bitfieldWidth ), 0, maybeBuild< Initializer >( initializer ) ))->set_extension( extension );
 	} // if
 	throw SemanticError( "invalid function specifier in declaration of ", this );
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/InitializerNode.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:20:24 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Jan 07 13:32:57 2016
-// Update Count     : 13
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jul  4 15:37:15 2016
+// Update Count     : 15
 //
 
@@ -99,5 +99,5 @@
 
 		if ( get_expression() != 0)
-			return new SingleInit( get_expression()->build(), designators, maybeConstructed );
+			return new SingleInit( maybeBuild<Expression>( get_expression() ), designators, maybeConstructed );
 	} // if
 
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/ParseNode.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 30 13:30:43 2016
-// Update Count     : 50
+// Last Modified On : Thu Jun 30 21:13:12 2016
+// Update Count     : 52
 // 
 
@@ -157,4 +157,5 @@
 } // literalType
 
+
 ConstantNode *makeConstant( ConstantNode::Type type, std::string *str ) {
 	::Type::Qualifiers emptyQualifiers;					// no qualifiers on constants
@@ -185,8 +186,4 @@
 };
 
-ParseNode *ParseNode::get_link() const {
-	return next;
-}
-
 ParseNode *ParseNode::get_last() {
 	ParseNode *current = this;
@@ -200,7 +197,5 @@
 ParseNode *ParseNode::set_link( ParseNode *next_ ) {
 	if ( next_ == 0 ) return this;
-
 	get_last()->next = next_;
-
 	return this;
 }
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/ParseNode.h	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 30 11:48:28 2016
-// Update Count     : 252
+// Last Modified On : Mon Jul  4 15:35:09 2016
+// Update Count     : 260
 //
 
@@ -43,8 +43,8 @@
 	ParseNode();
 	ParseNode( const std::string * );
-	ParseNode( const std::string & );  // for copy constructing subclasses
+	ParseNode( const std::string & );					// for copy constructing subclasses
 	virtual ~ParseNode();
 
-	ParseNode *get_link() const;
+	ParseNode *get_link() const { return next; }
 	ParseNode *get_last();
 	ParseNode *set_link( ParseNode * );
@@ -62,6 +62,6 @@
   protected:
 	std::string name;
+	static int indent_by;
 	ParseNode *next;
-	static int indent_by;
 };
 
@@ -481,7 +481,4 @@
 	void setCatchRest( bool newVal ) { isCatchRest = newVal; }
 
-	bool get_extension() const { return extension; }
-	StatementNode *set_extension( bool exten ) { extension = exten; return this; }
-
 	std::string get_target() const;
 
@@ -502,5 +499,4 @@
 	DeclarationNode *decl;
 	bool isCatchRest;
-	bool extension = false;
 }; // StatementNode
 
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/parser.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -1030,66 +1030,66 @@
      613,   614,   615,   616,   617,   618,   619,   620,   624,   625,
      631,   632,   638,   639,   640,   641,   642,   643,   644,   645,
-     646,   656,   663,   665,   675,   676,   681,   683,   685,   687,
-     691,   692,   697,   702,   705,   707,   709,   714,   716,   724,
-     725,   727,   731,   732,   737,   738,   743,   744,   748,   753,
-     754,   758,   760,   766,   767,   771,   773,   775,   777,   783,
-     784,   788,   789,   793,   795,   797,   802,   804,   809,   811,
-     815,   818,   822,   825,   829,   831,   835,   837,   844,   846,
-     848,   857,   859,   861,   863,   865,   870,   872,   874,   876,
-     881,   894,   895,   900,   902,   907,   911,   913,   915,   917,
-     919,   925,   926,   932,   933,   937,   938,   943,   945,   951,
-     952,   954,   959,   961,   968,   970,   974,   975,   980,   982,
-     986,   987,   991,   993,   997,   998,  1002,  1003,  1007,  1008,
-    1023,  1024,  1025,  1026,  1027,  1031,  1036,  1043,  1053,  1058,
-    1063,  1071,  1076,  1081,  1086,  1091,  1099,  1121,  1126,  1133,
-    1135,  1142,  1147,  1152,  1163,  1168,  1173,  1178,  1183,  1192,
-    1197,  1205,  1206,  1207,  1208,  1214,  1219,  1227,  1228,  1229,
-    1230,  1234,  1235,  1236,  1237,  1242,  1243,  1252,  1253,  1258,
-    1259,  1264,  1266,  1268,  1270,  1272,  1275,  1274,  1286,  1287,
-    1289,  1299,  1300,  1305,  1309,  1311,  1313,  1315,  1317,  1319,
-    1321,  1323,  1328,  1330,  1332,  1334,  1336,  1338,  1340,  1342,
-    1344,  1346,  1348,  1350,  1352,  1358,  1359,  1361,  1363,  1365,
-    1370,  1371,  1377,  1378,  1380,  1382,  1387,  1389,  1391,  1393,
-    1398,  1399,  1401,  1403,  1408,  1409,  1411,  1416,  1417,  1419,
-    1421,  1426,  1428,  1430,  1435,  1436,  1440,  1442,  1448,  1447,
-    1451,  1453,  1458,  1460,  1465,  1467,  1472,  1473,  1475,  1476,
-    1481,  1482,  1484,  1486,  1491,  1493,  1499,  1500,  1502,  1505,
-    1508,  1513,  1514,  1519,  1524,  1528,  1530,  1536,  1535,  1542,
-    1544,  1550,  1551,  1559,  1560,  1564,  1565,  1566,  1568,  1570,
-    1577,  1578,  1580,  1582,  1587,  1588,  1594,  1595,  1599,  1600,
-    1605,  1606,  1607,  1609,  1617,  1618,  1620,  1623,  1625,  1629,
-    1630,  1631,  1633,  1635,  1639,  1644,  1652,  1653,  1662,  1664,
-    1669,  1670,  1671,  1675,  1676,  1677,  1681,  1682,  1683,  1687,
-    1688,  1689,  1694,  1695,  1696,  1697,  1703,  1704,  1706,  1711,
-    1712,  1717,  1718,  1719,  1720,  1721,  1736,  1737,  1742,  1743,
-    1751,  1753,  1755,  1758,  1760,  1762,  1785,  1786,  1788,  1790,
-    1795,  1796,  1798,  1803,  1808,  1809,  1815,  1814,  1818,  1822,
-    1824,  1826,  1832,  1833,  1838,  1843,  1845,  1850,  1852,  1853,
-    1855,  1860,  1862,  1864,  1869,  1871,  1876,  1881,  1889,  1895,
-    1894,  1908,  1909,  1914,  1915,  1919,  1924,  1929,  1937,  1942,
-    1953,  1954,  1965,  1966,  1972,  1973,  1977,  1978,  1979,  1982,
-    1981,  1992,  1997,  2003,  2009,  2018,  2024,  2030,  2036,  2042,
-    2050,  2056,  2064,  2070,  2079,  2080,  2081,  2085,  2089,  2091,
-    2096,  2097,  2101,  2102,  2107,  2113,  2114,  2117,  2119,  2120,
-    2124,  2125,  2126,  2127,  2161,  2163,  2164,  2166,  2171,  2176,
-    2181,  2183,  2185,  2190,  2192,  2194,  2196,  2201,  2203,  2212,
-    2214,  2215,  2220,  2222,  2224,  2229,  2231,  2233,  2238,  2240,
-    2242,  2251,  2252,  2253,  2257,  2259,  2261,  2266,  2268,  2270,
-    2275,  2277,  2279,  2294,  2296,  2297,  2299,  2304,  2305,  2310,
-    2312,  2314,  2319,  2321,  2323,  2325,  2330,  2332,  2334,  2344,
-    2346,  2347,  2349,  2354,  2356,  2358,  2363,  2365,  2367,  2369,
-    2374,  2376,  2378,  2409,  2411,  2412,  2414,  2419,  2424,  2432,
-    2434,  2436,  2441,  2443,  2448,  2450,  2464,  2465,  2467,  2472,
-    2474,  2476,  2478,  2480,  2485,  2486,  2488,  2490,  2495,  2497,
-    2499,  2505,  2507,  2509,  2513,  2515,  2517,  2519,  2533,  2534,
-    2536,  2541,  2543,  2545,  2547,  2549,  2554,  2555,  2557,  2559,
-    2564,  2566,  2568,  2574,  2575,  2577,  2586,  2589,  2591,  2594,
-    2596,  2598,  2611,  2612,  2614,  2619,  2621,  2623,  2625,  2627,
-    2632,  2633,  2635,  2637,  2642,  2644,  2652,  2653,  2654,  2659,
-    2660,  2664,  2666,  2668,  2670,  2672,  2674,  2681,  2683,  2685,
-    2687,  2689,  2691,  2693,  2695,  2697,  2699,  2704,  2706,  2708,
-    2713,  2739,  2740,  2742,  2746,  2747,  2751,  2753,  2755,  2757,
-    2759,  2761,  2768,  2770,  2772,  2774,  2776,  2778,  2783,  2788,
-    2790,  2792,  2810,  2812,  2817,  2818
+     646,   656,   663,   665,   675,   676,   681,   683,   689,   691,
+     695,   696,   701,   706,   709,   711,   713,   718,   720,   728,
+     729,   731,   735,   736,   741,   742,   747,   748,   752,   757,
+     758,   762,   764,   770,   771,   775,   777,   779,   781,   787,
+     788,   792,   793,   797,   799,   801,   806,   808,   813,   815,
+     819,   822,   826,   829,   833,   835,   839,   841,   848,   850,
+     852,   861,   863,   865,   867,   869,   874,   876,   878,   880,
+     885,   898,   899,   904,   906,   911,   915,   917,   919,   921,
+     923,   929,   930,   936,   937,   941,   942,   947,   949,   955,
+     956,   958,   963,   965,   972,   974,   978,   979,   984,   986,
+     990,   991,   995,   997,  1001,  1002,  1006,  1007,  1011,  1012,
+    1027,  1028,  1029,  1030,  1031,  1035,  1040,  1047,  1057,  1062,
+    1067,  1075,  1080,  1085,  1090,  1095,  1103,  1125,  1130,  1137,
+    1139,  1146,  1151,  1156,  1167,  1172,  1177,  1182,  1187,  1196,
+    1201,  1209,  1210,  1211,  1212,  1218,  1223,  1231,  1232,  1233,
+    1234,  1238,  1239,  1240,  1241,  1246,  1247,  1256,  1257,  1262,
+    1263,  1268,  1270,  1272,  1274,  1276,  1279,  1278,  1290,  1291,
+    1293,  1303,  1304,  1309,  1313,  1315,  1317,  1319,  1321,  1323,
+    1325,  1327,  1332,  1334,  1336,  1338,  1340,  1342,  1344,  1346,
+    1348,  1350,  1352,  1354,  1356,  1362,  1363,  1365,  1367,  1369,
+    1374,  1375,  1381,  1382,  1384,  1386,  1391,  1393,  1395,  1397,
+    1402,  1403,  1405,  1407,  1412,  1413,  1415,  1420,  1421,  1423,
+    1425,  1430,  1432,  1434,  1439,  1440,  1444,  1446,  1452,  1451,
+    1455,  1457,  1462,  1464,  1469,  1471,  1476,  1477,  1479,  1480,
+    1489,  1490,  1492,  1494,  1499,  1501,  1507,  1508,  1510,  1513,
+    1516,  1521,  1522,  1527,  1532,  1536,  1538,  1544,  1543,  1550,
+    1552,  1558,  1559,  1567,  1568,  1572,  1573,  1574,  1576,  1578,
+    1585,  1586,  1588,  1590,  1595,  1596,  1602,  1603,  1607,  1608,
+    1613,  1614,  1615,  1617,  1625,  1626,  1628,  1631,  1633,  1637,
+    1638,  1639,  1641,  1643,  1647,  1652,  1660,  1661,  1670,  1672,
+    1677,  1678,  1679,  1683,  1684,  1685,  1689,  1690,  1691,  1695,
+    1696,  1697,  1702,  1703,  1704,  1705,  1711,  1712,  1714,  1719,
+    1720,  1725,  1726,  1727,  1728,  1729,  1744,  1745,  1750,  1751,
+    1759,  1761,  1763,  1766,  1768,  1770,  1793,  1794,  1796,  1798,
+    1803,  1804,  1806,  1811,  1816,  1817,  1823,  1822,  1826,  1830,
+    1832,  1834,  1840,  1841,  1846,  1851,  1853,  1858,  1860,  1861,
+    1863,  1868,  1870,  1872,  1877,  1879,  1884,  1889,  1897,  1903,
+    1902,  1916,  1917,  1922,  1923,  1927,  1932,  1937,  1945,  1950,
+    1961,  1962,  1973,  1974,  1980,  1981,  1985,  1986,  1987,  1990,
+    1989,  2000,  2009,  2015,  2021,  2030,  2036,  2042,  2048,  2054,
+    2062,  2068,  2076,  2082,  2091,  2092,  2093,  2097,  2101,  2103,
+    2108,  2109,  2113,  2114,  2119,  2125,  2126,  2129,  2131,  2132,
+    2136,  2137,  2138,  2139,  2173,  2175,  2176,  2178,  2183,  2188,
+    2193,  2195,  2197,  2202,  2204,  2206,  2208,  2213,  2215,  2224,
+    2226,  2227,  2232,  2234,  2236,  2241,  2243,  2245,  2250,  2252,
+    2254,  2263,  2264,  2265,  2269,  2271,  2273,  2278,  2280,  2282,
+    2287,  2289,  2291,  2306,  2308,  2309,  2311,  2316,  2317,  2322,
+    2324,  2326,  2331,  2333,  2335,  2337,  2342,  2344,  2346,  2356,
+    2358,  2359,  2361,  2366,  2368,  2370,  2375,  2377,  2379,  2381,
+    2386,  2388,  2390,  2421,  2423,  2424,  2426,  2431,  2436,  2444,
+    2446,  2448,  2453,  2455,  2460,  2462,  2476,  2477,  2479,  2484,
+    2486,  2488,  2490,  2492,  2497,  2498,  2500,  2502,  2507,  2509,
+    2511,  2517,  2519,  2521,  2525,  2527,  2529,  2531,  2545,  2546,
+    2548,  2553,  2555,  2557,  2559,  2561,  2566,  2567,  2569,  2571,
+    2576,  2578,  2580,  2586,  2587,  2589,  2598,  2601,  2603,  2606,
+    2608,  2610,  2623,  2624,  2626,  2631,  2633,  2635,  2637,  2639,
+    2644,  2645,  2647,  2649,  2654,  2656,  2664,  2665,  2666,  2671,
+    2672,  2676,  2678,  2680,  2682,  2684,  2686,  2693,  2695,  2697,
+    2699,  2701,  2703,  2705,  2707,  2709,  2711,  2716,  2718,  2720,
+    2725,  2751,  2752,  2754,  2758,  2759,  2763,  2765,  2767,  2769,
+    2771,  2773,  2780,  2782,  2784,  2786,  2788,  2790,  2795,  2800,
+    2802,  2804,  2822,  2824,  2829,  2830
 };
 #endif
@@ -5953,5 +5953,9 @@
 /* Line 1806 of yacc.c  */
 #line 684 "parser.yy"
-    { (yyval.sn) = (new StatementNode( (yyvsp[(2) - (2)].decl) ))->set_extension( true ); }
+    {	// mark all fields in list
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
+		}
     break;
 
@@ -5959,5 +5963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 686 "parser.yy"
+#line 690 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5966,5 +5970,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 693 "parser.yy"
+#line 697 "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;
@@ -5973,5 +5977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 698 "parser.yy"
+#line 702 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5980,5 +5984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 704 "parser.yy"
+#line 708 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5987,5 +5991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 706 "parser.yy"
+#line 710 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5994,5 +5998,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 708 "parser.yy"
+#line 712 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6001,5 +6005,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 714 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     break;
@@ -6008,5 +6012,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 715 "parser.yy"
+#line 719 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6015,5 +6019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 717 "parser.yy"
+#line 721 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6022,5 +6026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 724 "parser.yy"
+#line 728 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -6029,5 +6033,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
+#line 730 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6036,5 +6040,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
+#line 737 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -6043,5 +6047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 741 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6050,5 +6054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 738 "parser.yy"
+#line 742 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -6057,5 +6061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 744 "parser.yy"
+#line 748 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -6064,5 +6068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
+#line 752 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -6071,5 +6075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 753 "parser.yy"
+#line 757 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6078,5 +6082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+#line 763 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -6085,5 +6089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 765 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -6092,5 +6096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 766 "parser.yy"
+#line 770 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6099,5 +6103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 772 "parser.yy"
+#line 776 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -6106,5 +6110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 774 "parser.yy"
+#line 778 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -6113,5 +6117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 776 "parser.yy"
+#line 780 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -6120,5 +6124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 782 "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;
@@ -6127,5 +6131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 787 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -6134,5 +6138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 788 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     break;
@@ -6141,5 +6145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 793 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
     break;
@@ -6148,5 +6152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 794 "parser.yy"
+#line 798 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -6155,5 +6159,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 796 "parser.yy"
+#line 800 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -6162,5 +6166,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+#line 802 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -6169,5 +6173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 803 "parser.yy"
+#line 807 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -6176,5 +6180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+#line 809 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -6183,5 +6187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 810 "parser.yy"
+#line 814 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6190,5 +6194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 814 "parser.yy"
+#line 818 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6197,5 +6201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
+#line 821 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -6204,5 +6208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+#line 825 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6211,5 +6215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
+#line 828 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -6218,5 +6222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 828 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6225,16 +6229,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
 
   case 195:
-
-/* Line 1806 of yacc.c  */
-#line 832 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
-    break;
-
-  case 196:
 
 /* Line 1806 of yacc.c  */
@@ -6243,8 +6240,15 @@
     break;
 
+  case 196:
+
+/* Line 1806 of yacc.c  */
+#line 840 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
+    break;
+
   case 197:
 
 /* Line 1806 of yacc.c  */
-#line 838 "parser.yy"
+#line 842 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6253,5 +6257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+#line 849 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6260,5 +6264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
+#line 851 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6267,5 +6271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
+#line 853 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6277,23 +6281,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 204:
-
-/* Line 1806 of yacc.c  */
 #line 864 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
 
-  case 205:
+  case 203:
 
 /* Line 1806 of yacc.c  */
@@ -6302,19 +6292,19 @@
     break;
 
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 868 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
+    break;
+
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 870 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
+    break;
+
   case 206:
-
-/* Line 1806 of yacc.c  */
-#line 871 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 208:
 
 /* Line 1806 of yacc.c  */
@@ -6323,5 +6313,5 @@
     break;
 
-  case 209:
+  case 207:
 
 /* Line 1806 of yacc.c  */
@@ -6330,8 +6320,22 @@
     break;
 
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 879 "parser.yy"
+    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
+    break;
+
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 881 "parser.yy"
+    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
+    break;
+
   case 210:
 
 /* Line 1806 of yacc.c  */
-#line 882 "parser.yy"
+#line 886 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6343,5 +6347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 900 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6353,5 +6357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+#line 905 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6360,5 +6364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
+#line 907 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6370,5 +6374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 912 "parser.yy"
+#line 916 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6377,5 +6381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
+#line 918 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6384,5 +6388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 916 "parser.yy"
+#line 920 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
@@ -6391,5 +6395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 918 "parser.yy"
+#line 922 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
@@ -6398,5 +6402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
+#line 924 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6405,5 +6409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 925 "parser.yy"
+#line 929 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6412,5 +6416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+#line 931 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6419,5 +6423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 932 "parser.yy"
+#line 936 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6426,5 +6430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 943 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6433,5 +6437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 944 "parser.yy"
+#line 948 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6440,5 +6444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
+#line 950 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6447,5 +6451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 951 "parser.yy"
+#line 955 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6454,5 +6458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 953 "parser.yy"
+#line 957 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6461,5 +6465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 959 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6468,5 +6472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 964 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6475,5 +6479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 962 "parser.yy"
+#line 966 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6482,5 +6486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 969 "parser.yy"
+#line 973 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6489,5 +6493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
+#line 980 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6496,5 +6500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
+#line 985 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6503,5 +6507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 992 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6510,5 +6514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1002 "parser.yy"
+#line 1006 "parser.yy"
     {}
     break;
@@ -6517,5 +6521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1003 "parser.yy"
+#line 1007 "parser.yy"
     {}
     break;
@@ -6524,5 +6528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1032 "parser.yy"
+#line 1036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6534,5 +6538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 1043 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6544,5 +6548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1044 "parser.yy"
+#line 1048 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6554,5 +6558,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1054 "parser.yy"
+#line 1058 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6564,5 +6568,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1059 "parser.yy"
+#line 1063 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6574,5 +6578,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1064 "parser.yy"
+#line 1068 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6584,5 +6588,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6594,5 +6598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+#line 1081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6604,5 +6608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+#line 1086 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6614,5 +6618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+#line 1091 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6624,5 +6628,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1092 "parser.yy"
+#line 1096 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6634,5 +6638,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+#line 1104 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6641,13 +6645,4 @@
 
   case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1123 "parser.yy"
-    {
-			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
-		}
-    break;
-
-  case 268:
 
 /* Line 1806 of yacc.c  */
@@ -6658,8 +6653,17 @@
     break;
 
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1131 "parser.yy"
+    {
+			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
+		}
+    break;
+
   case 269:
 
 /* Line 1806 of yacc.c  */
-#line 1134 "parser.yy"
+#line 1138 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6668,5 +6672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1138 "parser.yy"
+#line 1142 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6675,5 +6679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1143 "parser.yy"
+#line 1147 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6685,5 +6689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1148 "parser.yy"
+#line 1152 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6695,5 +6699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1153 "parser.yy"
+#line 1157 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6705,5 +6709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1164 "parser.yy"
+#line 1168 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6715,5 +6719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1169 "parser.yy"
+#line 1173 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6725,5 +6729,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1174 "parser.yy"
+#line 1178 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6735,5 +6739,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1179 "parser.yy"
+#line 1183 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6745,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1184 "parser.yy"
+#line 1188 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6755,5 +6759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+#line 1197 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6765,5 +6769,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1198 "parser.yy"
+#line 1202 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6775,5 +6779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1215 "parser.yy"
+#line 1219 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6785,5 +6789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1220 "parser.yy"
+#line 1224 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6795,5 +6799,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1242 "parser.yy"
+#line 1246 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6802,5 +6806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1254 "parser.yy"
+#line 1258 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6809,5 +6813,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1265 "parser.yy"
+#line 1269 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6816,5 +6820,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1267 "parser.yy"
+#line 1271 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6823,5 +6827,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1269 "parser.yy"
+#line 1273 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6830,5 +6834,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1271 "parser.yy"
+#line 1275 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6837,5 +6841,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1273 "parser.yy"
+#line 1277 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6844,5 +6848,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1275 "parser.yy"
+#line 1279 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6853,5 +6857,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1279 "parser.yy"
+#line 1283 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6863,5 +6867,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1288 "parser.yy"
+#line 1292 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6870,5 +6874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
+#line 1294 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6877,5 +6881,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+#line 1305 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6884,5 +6888,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1310 "parser.yy"
+#line 1314 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6891,5 +6895,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1312 "parser.yy"
+#line 1316 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6898,5 +6902,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1314 "parser.yy"
+#line 1318 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6905,5 +6909,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+#line 1320 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6912,5 +6916,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1318 "parser.yy"
+#line 1322 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6919,5 +6923,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1320 "parser.yy"
+#line 1324 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6926,5 +6930,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1322 "parser.yy"
+#line 1326 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6933,5 +6937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1328 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6940,5 +6944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1333 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6947,5 +6951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
+#line 1335 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6954,5 +6958,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6961,5 +6965,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6968,5 +6972,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1341 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6975,5 +6979,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6982,5 +6986,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6989,5 +6993,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6996,5 +7000,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+#line 1349 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -7003,5 +7007,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1347 "parser.yy"
+#line 1351 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -7010,5 +7014,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1353 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -7017,5 +7021,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1351 "parser.yy"
+#line 1355 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -7024,5 +7028,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1353 "parser.yy"
+#line 1357 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -7031,5 +7035,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+#line 1364 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7038,5 +7042,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+#line 1366 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7045,5 +7049,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+#line 1368 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7052,5 +7056,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1370 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7059,5 +7063,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7066,5 +7070,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
+#line 1383 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7073,5 +7077,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+#line 1385 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7080,5 +7084,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+#line 1387 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7087,5 +7091,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
+#line 1392 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -7094,5 +7098,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
+#line 1394 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7101,5 +7105,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
+#line 1396 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7108,5 +7112,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
+#line 1398 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7115,5 +7119,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
+#line 1404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7122,5 +7126,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1402 "parser.yy"
+#line 1406 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7129,5 +7133,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1404 "parser.yy"
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7136,5 +7140,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1410 "parser.yy"
+#line 1414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7143,5 +7147,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1412 "parser.yy"
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7150,5 +7154,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1422 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7157,5 +7161,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+#line 1424 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7164,5 +7168,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
+#line 1426 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7171,5 +7175,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
+#line 1431 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7178,5 +7182,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
+#line 1433 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7185,5 +7189,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1431 "parser.yy"
+#line 1435 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7192,5 +7196,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1441 "parser.yy"
+#line 1445 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7199,5 +7203,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1443 "parser.yy"
+#line 1447 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7209,5 +7213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
+#line 1452 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7216,5 +7220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
+#line 1454 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl)); }
     break;
@@ -7223,5 +7227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1452 "parser.yy"
+#line 1456 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     break;
@@ -7230,5 +7234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7237,5 +7241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1459 "parser.yy"
+#line 1463 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7244,5 +7248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1461 "parser.yy"
+#line 1465 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7251,5 +7255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
+#line 1470 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     break;
@@ -7258,5 +7262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+#line 1472 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7265,5 +7269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1474 "parser.yy"
+#line 1478 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7272,6 +7276,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 1477 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
+#line 1481 "parser.yy"
+    {	// mark all fields in list
+			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			(yyval.decl) = (yyvsp[(2) - (3)].decl);
+		}
     break;
 
@@ -7279,5 +7287,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1483 "parser.yy"
+#line 1491 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7286,5 +7294,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1485 "parser.yy"
+#line 1493 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7293,5 +7301,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1495 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7300,5 +7308,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1492 "parser.yy"
+#line 1500 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7307,5 +7315,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1494 "parser.yy"
+#line 1502 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7314,5 +7322,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1499 "parser.yy"
+#line 1507 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7321,5 +7329,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+#line 1509 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7328,5 +7336,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
+#line 1512 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7335,5 +7343,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1507 "parser.yy"
+#line 1515 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7342,5 +7350,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1513 "parser.yy"
+#line 1521 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7349,5 +7357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1515 "parser.yy"
+#line 1523 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7356,5 +7364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1520 "parser.yy"
+#line 1528 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7363,5 +7371,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1529 "parser.yy"
+#line 1537 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7370,5 +7378,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
+#line 1539 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7380,5 +7388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
+#line 1544 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7387,5 +7395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1538 "parser.yy"
+#line 1546 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7394,5 +7402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1543 "parser.yy"
+#line 1551 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7401,5 +7409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
+#line 1553 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7408,5 +7416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1550 "parser.yy"
+#line 1558 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7415,5 +7423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
+#line 1560 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7422,5 +7430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1559 "parser.yy"
+#line 1567 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7429,5 +7437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
+#line 1575 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7436,5 +7444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+#line 1577 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7443,5 +7451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
+#line 1579 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7450,23 +7458,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1579 "parser.yy"
+#line 1587 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1581 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 413:
-
-/* Line 1806 of yacc.c  */
-#line 1583 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 415:
 
 /* Line 1806 of yacc.c  */
@@ -7475,8 +7469,22 @@
     break;
 
+  case 413:
+
+/* Line 1806 of yacc.c  */
+#line 1591 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1597 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 416:
 
 /* Line 1806 of yacc.c  */
-#line 1594 "parser.yy"
+#line 1602 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7485,5 +7493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
+#line 1609 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7492,5 +7500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
+#line 1616 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7499,5 +7507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
+#line 1618 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7506,5 +7514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1619 "parser.yy"
+#line 1627 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7513,5 +7521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
+#line 1630 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7520,5 +7528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
+#line 1632 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7527,5 +7535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1634 "parser.yy"
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7534,5 +7542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1640 "parser.yy"
+#line 1648 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7544,5 +7552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1645 "parser.yy"
+#line 1653 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7554,5 +7562,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1654 "parser.yy"
+#line 1662 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7561,5 +7569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1663 "parser.yy"
+#line 1671 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7568,16 +7576,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+#line 1673 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
   case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1690 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 455:
 
 /* Line 1806 of yacc.c  */
@@ -7586,8 +7587,15 @@
     break;
 
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1706 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 456:
 
 /* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+#line 1711 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7596,5 +7604,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1705 "parser.yy"
+#line 1713 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7603,5 +7611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1707 "parser.yy"
+#line 1715 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7610,5 +7618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1711 "parser.yy"
+#line 1719 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7617,5 +7625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1712 "parser.yy"
+#line 1720 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7624,5 +7632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1717 "parser.yy"
+#line 1725 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7631,5 +7639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1719 "parser.yy"
+#line 1727 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7638,5 +7646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1720 "parser.yy"
+#line 1728 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7645,5 +7653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1722 "parser.yy"
+#line 1730 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7652,5 +7660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1738 "parser.yy"
+#line 1746 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
@@ -7659,5 +7667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+#line 1752 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
@@ -7666,5 +7674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1752 "parser.yy"
+#line 1760 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -7673,5 +7681,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1754 "parser.yy"
+#line 1762 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7680,5 +7688,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1757 "parser.yy"
+#line 1765 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7687,5 +7695,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1759 "parser.yy"
+#line 1767 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7694,5 +7702,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1761 "parser.yy"
+#line 1769 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     break;
@@ -7701,5 +7709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1763 "parser.yy"
+#line 1771 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
@@ -7708,5 +7716,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
+#line 1795 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7715,5 +7723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
+#line 1797 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7722,5 +7730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
+#line 1799 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7729,5 +7737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1797 "parser.yy"
+#line 1805 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7736,5 +7744,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1799 "parser.yy"
+#line 1807 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7743,5 +7751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1804 "parser.yy"
+#line 1812 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7750,5 +7758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
+#line 1818 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7757,5 +7765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+#line 1823 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7764,5 +7772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+#line 1825 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7771,5 +7779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1823 "parser.yy"
+#line 1831 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7778,5 +7786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
+#line 1833 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7785,5 +7793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+#line 1835 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7792,5 +7800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1832 "parser.yy"
+#line 1840 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7799,5 +7807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+#line 1842 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7806,5 +7814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+#line 1847 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7816,5 +7824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
+#line 1852 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7823,5 +7831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+#line 1854 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7830,5 +7838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
+#line 1859 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -7837,5 +7845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1854 "parser.yy"
+#line 1862 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
@@ -7844,5 +7852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1864 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7851,5 +7859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1861 "parser.yy"
+#line 1869 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7858,5 +7866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1871 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7865,5 +7873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+#line 1873 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7872,5 +7880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+#line 1878 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7879,5 +7887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1872 "parser.yy"
+#line 1880 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7886,5 +7894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
+#line 1885 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7896,5 +7904,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
+#line 1890 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7906,5 +7914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1890 "parser.yy"
+#line 1898 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7916,5 +7924,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1895 "parser.yy"
+#line 1903 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7926,5 +7934,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1908 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7937,5 +7945,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1910 "parser.yy"
+#line 1918 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7944,5 +7952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1920 "parser.yy"
+#line 1928 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7954,5 +7962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1925 "parser.yy"
+#line 1933 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7964,5 +7972,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1930 "parser.yy"
+#line 1938 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7974,5 +7982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+#line 1946 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7984,5 +7992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1943 "parser.yy"
+#line 1951 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7994,5 +8002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+#line 1961 "parser.yy"
     {}
     break;
@@ -8001,5 +8009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1955 "parser.yy"
+#line 1963 "parser.yy"
     {
 			if ( theTree ) {
@@ -8014,5 +8022,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1967 "parser.yy"
+#line 1975 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -8021,5 +8029,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1972 "parser.yy"
+#line 1980 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8028,5 +8036,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1980 "parser.yy"
+#line 1988 "parser.yy"
     {}
     break;
@@ -8035,5 +8043,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1982 "parser.yy"
+#line 1990 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -8045,5 +8053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1987 "parser.yy"
+#line 1995 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -8056,6 +8064,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 1993 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->set_extension( true ); }
+#line 2001 "parser.yy"
+    {	// mark all fields in list
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			(yyval.decl) = (yyvsp[(2) - (2)].decl);
+		}
     break;
 
@@ -8063,5 +8075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2004 "parser.yy"
+#line 2016 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8074,5 +8086,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+#line 2022 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8085,5 +8097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2019 "parser.yy"
+#line 2031 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8096,5 +8108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+#line 2037 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8107,5 +8119,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+#line 2043 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8118,5 +8130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2037 "parser.yy"
+#line 2049 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8129,5 +8141,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2043 "parser.yy"
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8140,5 +8152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+#line 2063 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8151,5 +8163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
+#line 2069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8162,5 +8174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2065 "parser.yy"
+#line 2077 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8173,5 +8185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2071 "parser.yy"
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -8184,5 +8196,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2086 "parser.yy"
+#line 2098 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -8191,5 +8203,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2096 "parser.yy"
+#line 2108 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8198,5 +8210,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2103 "parser.yy"
+#line 2115 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8205,5 +8217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2109 "parser.yy"
+#line 2121 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8212,5 +8224,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2124 "parser.yy"
+#line 2136 "parser.yy"
     {}
     break;
@@ -8219,5 +8231,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2125 "parser.yy"
+#line 2137 "parser.yy"
     {}
     break;
@@ -8226,5 +8238,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2126 "parser.yy"
+#line 2138 "parser.yy"
     {}
     break;
@@ -8233,5 +8245,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2127 "parser.yy"
+#line 2139 "parser.yy"
     {}
     break;
@@ -8240,5 +8252,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2162 "parser.yy"
+#line 2174 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8247,5 +8259,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2165 "parser.yy"
+#line 2177 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8254,5 +8266,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2167 "parser.yy"
+#line 2179 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8261,5 +8273,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2172 "parser.yy"
+#line 2184 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8271,5 +8283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2177 "parser.yy"
+#line 2189 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8278,5 +8290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2182 "parser.yy"
+#line 2194 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8285,5 +8297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2184 "parser.yy"
+#line 2196 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8292,5 +8304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
+#line 2198 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8299,5 +8311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2191 "parser.yy"
+#line 2203 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8306,5 +8318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2193 "parser.yy"
+#line 2205 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8313,5 +8325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2195 "parser.yy"
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8320,5 +8332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
+#line 2209 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8327,5 +8339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2202 "parser.yy"
+#line 2214 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8334,5 +8346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8341,5 +8353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2213 "parser.yy"
+#line 2225 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8348,5 +8360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+#line 2228 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8355,5 +8367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2221 "parser.yy"
+#line 2233 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8362,5 +8374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8369,5 +8381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8376,5 +8388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2230 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8383,5 +8395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2232 "parser.yy"
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8390,5 +8402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+#line 2246 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8397,5 +8409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2239 "parser.yy"
+#line 2251 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8404,5 +8416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2241 "parser.yy"
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8411,5 +8423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8418,5 +8430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+#line 2270 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8425,5 +8437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8432,5 +8444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8439,5 +8451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+#line 2279 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8446,5 +8458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+#line 2281 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8453,5 +8465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
+#line 2283 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8460,5 +8472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+#line 2288 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8467,5 +8479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
+#line 2290 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8474,5 +8486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2280 "parser.yy"
+#line 2292 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8481,5 +8493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+#line 2307 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8488,5 +8500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
+#line 2310 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8495,5 +8507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
+#line 2312 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8502,5 +8514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2306 "parser.yy"
+#line 2318 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8509,5 +8521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+#line 2323 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8516,5 +8528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+#line 2325 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8523,5 +8535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2315 "parser.yy"
+#line 2327 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8530,5 +8542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2320 "parser.yy"
+#line 2332 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8537,5 +8549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2322 "parser.yy"
+#line 2334 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8544,5 +8556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2324 "parser.yy"
+#line 2336 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8551,5 +8563,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2326 "parser.yy"
+#line 2338 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8558,5 +8570,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2331 "parser.yy"
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8565,5 +8577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8572,5 +8584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
+#line 2347 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8579,5 +8591,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
+#line 2357 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8586,5 +8598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8593,5 +8605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8600,5 +8612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8607,5 +8619,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2357 "parser.yy"
+#line 2369 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8614,5 +8626,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8621,5 +8633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2364 "parser.yy"
+#line 2376 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8628,5 +8640,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+#line 2378 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8635,5 +8647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+#line 2380 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8642,5 +8654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+#line 2382 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8649,5 +8661,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2375 "parser.yy"
+#line 2387 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8656,5 +8668,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
+#line 2389 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8663,5 +8675,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2379 "parser.yy"
+#line 2391 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8670,5 +8682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
+#line 2422 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8677,5 +8689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2413 "parser.yy"
+#line 2425 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8684,5 +8696,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2415 "parser.yy"
+#line 2427 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8691,5 +8703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+#line 2432 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8701,5 +8713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+#line 2437 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8711,5 +8723,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2433 "parser.yy"
+#line 2445 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8718,5 +8730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2435 "parser.yy"
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8725,5 +8737,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2437 "parser.yy"
+#line 2449 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8732,5 +8744,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
+#line 2454 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8739,5 +8751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2444 "parser.yy"
+#line 2456 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8746,5 +8758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8753,5 +8765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
+#line 2463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8760,5 +8772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2466 "parser.yy"
+#line 2478 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8767,5 +8779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2468 "parser.yy"
+#line 2480 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8774,5 +8786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2473 "parser.yy"
+#line 2485 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8781,5 +8793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2475 "parser.yy"
+#line 2487 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8788,5 +8800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2489 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8795,5 +8807,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+#line 2491 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8802,5 +8814,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+#line 2493 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8809,5 +8821,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
+#line 2499 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8816,5 +8828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+#line 2501 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8823,5 +8835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+#line 2503 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8830,5 +8842,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2496 "parser.yy"
+#line 2508 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8837,5 +8849,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+#line 2510 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8844,5 +8856,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+#line 2512 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8851,5 +8863,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2506 "parser.yy"
+#line 2518 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8858,5 +8870,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8865,5 +8877,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+#line 2526 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8872,5 +8884,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
+#line 2528 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8879,5 +8891,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+#line 2530 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8886,5 +8898,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2520 "parser.yy"
+#line 2532 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8893,5 +8905,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+#line 2547 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8900,5 +8912,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2537 "parser.yy"
+#line 2549 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8907,5 +8919,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2542 "parser.yy"
+#line 2554 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8914,5 +8926,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2544 "parser.yy"
+#line 2556 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8921,5 +8933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
+#line 2558 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8928,5 +8940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
+#line 2560 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8935,5 +8947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
+#line 2562 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8942,5 +8954,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2556 "parser.yy"
+#line 2568 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8949,5 +8961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2558 "parser.yy"
+#line 2570 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8956,5 +8968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2560 "parser.yy"
+#line 2572 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8963,5 +8975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
+#line 2577 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8970,5 +8982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+#line 2579 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8977,5 +8989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+#line 2581 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8984,5 +8996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8991,5 +9003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2587 "parser.yy"
+#line 2599 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8998,5 +9010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+#line 2602 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9005,5 +9017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+#line 2604 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -9012,5 +9024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2595 "parser.yy"
+#line 2607 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9019,5 +9031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
+#line 2609 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -9026,5 +9038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2599 "parser.yy"
+#line 2611 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -9033,5 +9045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2613 "parser.yy"
+#line 2625 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9040,5 +9052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2615 "parser.yy"
+#line 2627 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9047,5 +9059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
+#line 2632 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -9054,5 +9066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+#line 2634 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -9061,5 +9073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
+#line 2636 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9068,5 +9080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
+#line 2638 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -9075,5 +9087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2628 "parser.yy"
+#line 2640 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9082,5 +9094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
+#line 2646 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -9089,5 +9101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2636 "parser.yy"
+#line 2648 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -9096,5 +9108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2638 "parser.yy"
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9103,5 +9115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
+#line 2655 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -9110,5 +9122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
+#line 2657 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -9117,5 +9129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2667 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9124,5 +9136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
+#line 2677 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9131,5 +9143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
+#line 2679 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9138,5 +9150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+#line 2681 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9145,5 +9157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+#line 2683 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9152,5 +9164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
+#line 2685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9159,5 +9171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
+#line 2687 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9166,5 +9178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2682 "parser.yy"
+#line 2694 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9173,5 +9185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2684 "parser.yy"
+#line 2696 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9180,5 +9192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
+#line 2698 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9187,5 +9199,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+#line 2700 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9194,5 +9206,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+#line 2702 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9201,5 +9213,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+#line 2704 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9208,5 +9220,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+#line 2706 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9215,5 +9227,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
+#line 2708 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9222,5 +9234,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
+#line 2710 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -9229,5 +9241,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+#line 2712 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9236,5 +9248,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
+#line 2717 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9243,5 +9255,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
+#line 2719 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9250,5 +9262,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2712 "parser.yy"
+#line 2724 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9257,5 +9269,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2714 "parser.yy"
+#line 2726 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9264,5 +9276,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+#line 2753 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9271,5 +9283,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
+#line 2764 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9278,5 +9290,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
+#line 2766 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9285,5 +9297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+#line 2768 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9292,5 +9304,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+#line 2770 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9299,5 +9311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
+#line 2772 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9306,5 +9318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+#line 2774 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9313,5 +9325,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2769 "parser.yy"
+#line 2781 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9320,5 +9332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2771 "parser.yy"
+#line 2783 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9327,5 +9339,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
+#line 2785 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9334,5 +9346,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2775 "parser.yy"
+#line 2787 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9341,5 +9353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2777 "parser.yy"
+#line 2789 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9348,5 +9360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2779 "parser.yy"
+#line 2791 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9355,5 +9367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2784 "parser.yy"
+#line 2796 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9362,5 +9374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
+#line 2801 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9369,5 +9381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2791 "parser.yy"
+#line 2803 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9376,5 +9388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2793 "parser.yy"
+#line 2805 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9383,5 +9395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2817 "parser.yy"
+#line 2829 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9390,5 +9402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2819 "parser.yy"
+#line 2831 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9397,5 +9409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9400 "Parser/parser.cc"
+#line 9412 "Parser/parser.cc"
       default: break;
     }
@@ -9628,5 +9640,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2822 "parser.yy"
+#line 2834 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/Parser/parser.yy	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 30 13:26:01 2016
-// Update Count     : 1639
+// Last Modified On : Thu Jun 30 21:15:54 2016
+// Update Count     : 1657
 //
 
@@ -682,5 +682,9 @@
 		{ $$ = new StatementNode( $1 ); }
 	| EXTENSION declaration								// GCC
-	{ $$ = (new StatementNode( $2 ))->set_extension( true ); }
+		{	// mark all fields in list
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			$$ = new StatementNode( $2 );
+		}
 	| function_definition
 		{ $$ = new StatementNode( $1 ); }
@@ -1475,5 +1479,9 @@
 	| field_declaring_list ';'
 	| EXTENSION field_declaring_list ';'				// GCC
-		{ $$ = $2->set_extension( true ); }
+		{	// mark all fields in list
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			$$ = $2;
+		}
 	;
 
@@ -1991,5 +1999,9 @@
 		}
 	| EXTENSION external_definition
-		{ $$ = $2->set_extension( true ); }
+		{	// mark all fields in list
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+				iter->set_extension( true );
+			$$ = $2;
+		}
 	;
 
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 23:52:08 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun 13 16:13:54 2016
-// Update Count     : 25
+// Last Modified On : Mon Jul  4 17:02:51 2016
+// Update Count     : 29
 //
 
@@ -227,4 +227,9 @@
 			std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl;
 		)
+
+		// Central location to handle gcc extension keyword for all expression types.
+		for ( Alternative &iter: alternatives ) {
+			iter.expr->set_extension( expr->get_extension() );
+		} // for
 	}
 
@@ -772,5 +777,4 @@
 		for ( std::list< DeclarationWithType* >::iterator i = declList.begin(); i != declList.end(); ++i ) {
 			VariableExpr newExpr( *i, nameExpr->get_argName() );
-			newExpr.set_extension( nameExpr->get_extension() );
 			alternatives.push_back( Alternative( newExpr.clone(), env, Cost() ) );
 			PRINT(
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/SynTree/Declaration.h	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -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 06 16:26:12 2016
-// Update Count     : 33
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jun 30 21:17:24 2016
+// Update Count     : 38
 //
 
@@ -41,4 +41,6 @@
 	void set_isNoreturn( bool newValue ) { isNoreturn = newValue; }
 	UniqueId get_uniqueId() const { return uniqueId; }
+	bool get_extension() const { return extension; }
+	Declaration *set_extension( bool exten ) { extension = exten; return this; }
 
 	void fixUniqueId( void );
@@ -57,4 +59,5 @@
 	bool isInline, isNoreturn;
 	UniqueId uniqueId;
+	bool extension = false;
 };
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 0a2c1f1280bbc8607c53a7d230e76d4f285e0a82)
+++ src/SynTree/Expression.h	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun  8 17:05:30 2016
-// Update Count     : 22
+// Last Modified On : Mon Jul  4 14:45:32 2016
+// Update Count     : 23
 //
 
@@ -39,5 +39,5 @@
 	void set_argName( Expression *name ) { argName = name; }
 	bool get_extension() const { return extension; }
-	void set_extension( bool exten ) { extension = exten; }
+	Expression * set_extension( bool exten ) { extension = exten; return this; }
 
 	virtual Expression *clone() const = 0;
Index: src/tests/extension.c
===================================================================
--- src/tests/extension.c	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
+++ src/tests/extension.c	(revision 8e9cbb2a92d8ecc9279635ef56d16d0beb03b78f)
@@ -0,0 +1,48 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// extension.c -- 
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Jul  4 20:42:43 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Jul  4 20:43:51 2016
+// Update Count     : 2
+//
+
+__extension__ int a, b, c;
+__extension__ struct S {
+    __extension__ int a, b, c;
+};
+__extension__ union U {
+    __extension__ int a, b, c;
+};
+__extension__ enum E {
+    R, G, B,
+};
+__extension__ typedef int www; // typedefs are removed => no output
+
+__extension__ int fred( int p ) {
+    __extension__ struct S {
+    	__extension__ int a, b, c;
+    };
+    int i = __extension__ a + __extension__ 3;
+    __extension__ 3;
+    __extension__ a;
+    __extension__ int a, b, c;
+
+    __extension__ a = __extension__ b + __extension__ c;
+    __extension__ fred( 3 );
+    __extension__ sizeof( 3 );
+    __extension__ (3 || 4);
+    __extension__ __alignof__( __extension__ a );
+    __extension__ a || __extension__ b && __extension__ c;
+    __extension__ a > __extension__ b ? __extension__ c : __extension__ c;
+    __extension__ a = __extension__ ( __extension__ b + __extension__ c );
+    __extension__ a, __extension__ b, __extension__ c;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa extension.c" //
+// End: //
