Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/DeclarationNode.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 18 23:48:23 2016
-// Update Count     : 182
+// Last Modified On : Thu Aug 25 20:42:25 2016
+// Update Count     : 232
 //
 
@@ -93,7 +93,7 @@
 	} // if
 
-	if(storageClass != NoStorageClass) os << DeclarationNode::storageName[storageClass] << ' ';
-	if(isInline) os << DeclarationNode::storageName[Inline] << ' ';
-	if(isNoreturn) os << DeclarationNode::storageName[Noreturn] << ' ';
+	if ( storageClass != NoStorageClass ) os << DeclarationNode::storageName[storageClass] << ' ';
+	if ( isInline ) os << DeclarationNode::storageName[Inline] << ' ';
+	if ( isNoreturn ) os << DeclarationNode::storageName[Noreturn] << ' ';
 	if ( type ) {
 		type->print( os, indent );
@@ -147,22 +147,30 @@
 } // DeclarationNode::newFunction
 
-DeclarationNode *DeclarationNode::newQualifier( Qualifier q ) {
+DeclarationNode * DeclarationNode::newQualifier( Qualifier q ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData();
-	newnode->type->qualifiers.push_back( q );
+	newnode->type->qualifiers[ q ] = 1;
 	return newnode;
 } // DeclarationNode::newQualifier
 
-DeclarationNode *DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	switch (sc) {
-		case Inline: newnode->isInline = true; break;
-		case Noreturn: newnode->isNoreturn = true; break;
-		default: newnode->storageClass = sc; break;
-	}
+DeclarationNode * DeclarationNode::newForall( DeclarationNode *forall ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Unknown );
+	newnode->type->forall = forall;
+	return newnode;
+} // DeclarationNode::newForall
+
+DeclarationNode * DeclarationNode::newStorageClass( DeclarationNode::StorageClass sc ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	//switch (sc) {
+	//	case Inline: newnode->isInline = true; break;
+	//	case Noreturn: newnode->isNoreturn = true; break;
+	//	default: newnode->storageClass = sc; break;
+	//}
+	newnode->storageClass = sc;
 	return newnode;
 } // DeclarationNode::newStorageClass
 
-DeclarationNode *DeclarationNode::newBasicType( BasicType bt ) {
+DeclarationNode * DeclarationNode::newBasicType( BasicType bt ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Basic );
@@ -171,5 +179,12 @@
 } // DeclarationNode::newBasicType
 
-DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
+DeclarationNode * DeclarationNode::newModifier( Modifier mod ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Basic );
+	newnode->type->basic->modifiers.push_back( mod );
+	return newnode;
+} // DeclarationNode::newModifier
+
+DeclarationNode * DeclarationNode::newBuiltinType( BuiltinType bt ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Builtin );
@@ -178,19 +193,5 @@
 } // DeclarationNode::newBuiltinType
 
-DeclarationNode *DeclarationNode::newModifier( Modifier mod ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Basic );
-	newnode->type->basic->modifiers.push_back( mod );
-	return newnode;
-} // DeclarationNode::newModifier
-
-DeclarationNode *DeclarationNode::newForall( DeclarationNode *forall ) {
-	DeclarationNode *newnode = new DeclarationNode;
-	newnode->type = new TypeData( TypeData::Unknown );
-	newnode->type->forall = forall;
-	return newnode;
-} // DeclarationNode::newForall
-
-DeclarationNode *DeclarationNode::newFromTypedef( std::string *name ) {
+DeclarationNode * DeclarationNode::newFromTypedef( std::string *name ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::SymbolicInst );
@@ -201,5 +202,5 @@
 } // DeclarationNode::newFromTypedef
 
-DeclarationNode *DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
+DeclarationNode * DeclarationNode::newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
@@ -369,8 +370,25 @@
 			src = 0;
 		} else {
-			dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
-		} // if
-	} // if
-}
+			dst->qualifiers |= src->qualifiers;
+		} // if
+	} // if
+}
+
+void DeclarationNode::checkQualifiers( TypeData *src, TypeData *dst ) {
+	TypeData::Qualifiers qsrc = src->qualifiers, qdst = dst->qualifiers;
+
+	if ( (qsrc & qdst).any() ) {						// common bits between qualifier masks ?
+		error = "duplicate qualifier ";
+		int j = 0;										// separator detector
+		for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
+			if ( qsrc[i] & qdst[i] ) {					// find specific qualifiers in common
+				if ( j > 0 ) error += ", ";
+				error += DeclarationNode::qualifierName[i];
+				j += 1;
+			} // if
+		} // for
+		error += " in declaration of ";
+	} // if
+} // DeclarationNode::checkQualifiers
 
 DeclarationNode *DeclarationNode::addQualifiers( DeclarationNode *q ) {
@@ -380,4 +398,6 @@
 			if ( ! type ) {
 				type = new TypeData;
+			} else {
+				checkQualifiers( q->type, type );
 			} // if
 			addQualifiersToType( q->type, type );
@@ -405,11 +425,10 @@
 	isInline = isInline || q->isInline;
 	isNoreturn = isNoreturn || q->isNoreturn;
-	if(storageClass == NoStorageClass) {
+	if ( storageClass == NoStorageClass ) {
 		storageClass = q->storageClass;
-	}
-	else if (q->storageClass != NoStorageClass) {
+	} else if ( q->storageClass != NoStorageClass ) {
 		q->error = "invalid combination of storage classes in declaration of ";
-	}
-	if(error.empty()) error = q->error;
+	} // if
+	if ( error.empty() ) error = q->error;
 	return this;
 }
@@ -430,10 +449,10 @@
 			switch ( dst->kind ) {
 			  case TypeData::Unknown:
-				src->qualifiers.splice( src->qualifiers.end(), dst->qualifiers );
+				src->qualifiers |= dst->qualifiers;
 				dst = src;
 				src = 0;
 				break;
 			  case TypeData::Basic:
-				dst->qualifiers.splice( dst->qualifiers.end(), src->qualifiers );
+				dst->qualifiers |= src->qualifiers;
 				if ( src->kind != TypeData::Unknown ) {
 					assert( src->kind == TypeData::Basic );
@@ -451,5 +470,5 @@
 						dst->base->aggInst->params = maybeClone( src->aggregate->actuals );
 					} // if
-					dst->base->qualifiers.splice( dst->base->qualifiers.end(), src->qualifiers );
+					dst->base->qualifiers |= src->qualifiers;
 					src = 0;
 					break;
@@ -480,5 +499,5 @@
 						type->aggInst->params = maybeClone( o->type->aggregate->actuals );
 					} // if
-					type->qualifiers.splice( type->qualifiers.end(), o->type->qualifiers );
+					type->qualifiers |= o->type->qualifiers;
 				} else {
 					type = o->type;
@@ -615,5 +634,5 @@
 					p->type->base->aggInst->params = maybeClone( type->aggregate->actuals );
 				} // if
-				p->type->base->qualifiers.splice( p->type->base->qualifiers.end(), type->qualifiers );
+				p->type->base->qualifiers |= type->qualifiers;
 				break;
 
@@ -652,5 +671,5 @@
 					lastArray->base->aggInst->params = maybeClone( type->aggregate->actuals );
 				} // if
-				lastArray->base->qualifiers.splice( lastArray->base->qualifiers.end(), type->qualifiers );
+				lastArray->base->qualifiers |= type->qualifiers;
 				break;
 			  default:
@@ -874,5 +893,5 @@
 
 Declaration *DeclarationNode::build() const {
-	if( !error.empty() ) throw SemanticError( error, this );
+	if ( ! error.empty() ) throw SemanticError( error, this );
 	if ( type ) {
 		return type->buildDecl( name, storageClass, maybeBuild< Expression >( bitfieldWidth ), isInline, isNoreturn, linkage, maybeBuild< Initializer >(initializer) )->set_extension( extension );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/ParseNode.h	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug 21 11:53:59 2016
-// Update Count     : 546
+// Last Modified On : Thu Aug 25 21:00:08 2016
+// Update Count     : 563
 //
 
@@ -99,5 +99,5 @@
 	InitializerNode *kids;
 	bool maybeConstructed;
-};
+}; // InitializerNode
 
 //##############################################################################
@@ -126,5 +126,5 @@
 	bool extension = false;
 	std::unique_ptr<Expression> expr;
-};
+}; // ExpressionNode
 
 template< typename T >
@@ -150,5 +150,5 @@
 	UnPlus, UnMinus, AddressOf, PointTo, Neg, BitNeg, Incr, IncrPost, Decr, DecrPost, LabelAddress,
 	Ctor, Dtor,
-};
+}; // OperKinds
 
 struct LabelNode {
@@ -196,5 +196,5 @@
 class DeclarationNode : public ParseNode {
   public:
-	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic };
+	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoOfQualifier };
 	enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
 	enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
@@ -204,6 +204,6 @@
 	enum BuiltinType { Valist };
 
+	static const char *qualifierName[];
 	static const char *storageName[];
-	static const char *qualifierName[];
 	static const char *basicTypeName[];
 	static const char *modifierName[];
@@ -214,8 +214,9 @@
 	static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
 	static DeclarationNode *newQualifier( Qualifier );
+	static DeclarationNode *newForall( DeclarationNode *);
 	static DeclarationNode *newStorageClass( StorageClass );
 	static DeclarationNode *newBasicType( BasicType );
 	static DeclarationNode *newModifier( Modifier );
-	static DeclarationNode *newForall( DeclarationNode *);
+	static DeclarationNode *newBuiltinType( BuiltinType );
 	static DeclarationNode *newFromTypedef( std::string *);
 	static DeclarationNode *newAggregate( Aggregate kind, const std::string *name, ExpressionNode *actuals, DeclarationNode *fields, bool body );
@@ -236,5 +237,4 @@
 	static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
 	static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
-	static DeclarationNode *newBuiltinType( BuiltinType );
 
 	DeclarationNode();
@@ -243,4 +243,5 @@
 
 	DeclarationNode *addQualifiers( DeclarationNode *);
+	void checkQualifiers( TypeData *, TypeData * );
 	DeclarationNode *copyStorageClasses( DeclarationNode *);
 	DeclarationNode *addType( DeclarationNode *);
@@ -285,5 +286,5 @@
 	bool get_extension() const { return extension; }
 	DeclarationNode *set_extension( bool exten ) { extension = exten; return this; }
-  private:
+  public:
 	// StorageClass buildStorageClass() const;
 	// bool buildFuncSpecifier( StorageClass key ) const;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/TypeData.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 18 23:48:44 2016
-// Update Count     : 64
+// Last Modified On : Wed Aug 24 13:46:55 2016
+// Update Count     : 69
 //
 
@@ -244,5 +244,7 @@
 	using std::string;
 
-	printEnums( qualifiers.begin(), qualifiers.end(), DeclarationNode::qualifierName, os );
+	for ( int i = 0; i < DeclarationNode::NoOfQualifier; i += 1 ) {
+		if ( qualifiers[i] ) os << DeclarationNode::qualifierName[ i ] << ' ';
+	} // for
 
 	if ( forall ) {
@@ -425,5 +427,5 @@
 		if ( ! toplevel && aggregate->fields ) {
 			ret = clone();
-			ret->qualifiers.clear();
+//			ret->qualifiers.reset();
 		} // if
 		break;
@@ -431,5 +433,5 @@
 		if ( ! toplevel && enumeration->constants ) {
 			ret = clone();
-			ret->qualifiers.clear();
+//			ret->qualifiers.reset();
 		} // if
 		break;
@@ -554,23 +556,9 @@
 Type::Qualifiers TypeData::buildQualifiers() const {
 	Type::Qualifiers q;
-	for ( std::list< DeclarationNode::Qualifier >::const_iterator i = qualifiers.begin(); i != qualifiers.end(); ++i ) {
-		switch ( *i ) {
-		  case DeclarationNode::Const:
-			q.isConst = true;
-			break;
-		  case DeclarationNode::Volatile:
-			q.isVolatile = true;
-			break;
-		  case DeclarationNode::Restrict:
-			q.isRestrict = true;
-			break;
-		  case DeclarationNode::Lvalue:
-			q.isLvalue = true;
-			break;
-		  case DeclarationNode::Atomic:
-			q.isAtomic = true;
-			break;
-		} // switch
-	} // for
+	q.isConst = qualifiers[ DeclarationNode::Const ];
+	q.isVolatile = qualifiers[ DeclarationNode::Volatile ];
+	q.isRestrict = qualifiers[ DeclarationNode::Restrict ];
+	q.isLvalue = qualifiers[ DeclarationNode::Lvalue ];
+	q.isAtomic = qualifiers[ DeclarationNode::Atomic ];;
 	return q;
 }
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/TypeData.h	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 18 23:48:52 2016
-// Update Count     : 22
+// Last Modified On : Thu Aug 25 17:34:06 2016
+// Update Count     : 26
 //
 
@@ -17,5 +17,5 @@
 #define TYPEDATA_H
 
-#include <list>
+#include <bitset>
 
 #include "ParseNode.h"
@@ -35,5 +35,6 @@
 
 	TypeData * base;
-	std::list< DeclarationNode::Qualifier > qualifiers;
+	typedef std::bitset< DeclarationNode::NoOfQualifier > Qualifiers;
+	Qualifiers qualifiers;
 	DeclarationNode * forall;
 
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/lex.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -1469,6 +1469,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Aug 18 22:17:30 2016
- * Update Count     : 472
+ * Last Modified On : Wed Aug 24 13:27:04 2016
+ * Update Count     : 487
  */
 #line 20 "lex.ll"
@@ -1827,5 +1827,5 @@
 {
 	/* " stop highlighting */
-	static char *filename[FILENAME_MAX];				// temporarily store current source-file name
+	static char filename[FILENAME_MAX];					// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
@@ -1842,5 +1842,5 @@
 		//std::cout << "file " << filename << " line " << lineno << std::endl;
 		yylineno = lineno;
-		yyfilename = filename[0];
+		yyfilename = filename;
 	} // if
 }
@@ -2426,10 +2426,10 @@
 YY_RULE_SETUP
 #line 290 "lex.ll"
-{ BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
+{ BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
 #line 291 "lex.ll"
-{ *strtext += std::string( yytext ); }
+{ strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 117:
@@ -2437,5 +2437,5 @@
 YY_RULE_SETUP
 #line 292 "lex.ll"
-{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
+{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
@@ -2444,10 +2444,10 @@
 YY_RULE_SETUP
 #line 296 "lex.ll"
-{ BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
+{ BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
 #line 297 "lex.ll"
-{ *strtext += std::string( yytext ); }
+{ strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 120:
@@ -2455,5 +2455,5 @@
 YY_RULE_SETUP
 #line 298 "lex.ll"
-{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
+{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
@@ -2462,5 +2462,5 @@
 YY_RULE_SETUP
 #line 302 "lex.ll"
-{ rm_underscore(); *strtext += std::string( yytext ); }
+{ rm_underscore(); strtext->append( yytext, yyleng ); }
 	YY_BREAK
 case 122:
@@ -2473,5 +2473,5 @@
 YY_RULE_SETUP
 #line 304 "lex.ll"
-{ *strtext += std::string( yytext ); } // unknown escape character
+{ strtext->append( yytext, yyleng ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/lex.ll	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Aug 18 22:17:30 2016
- * Update Count     : 472
+ * Last Modified On : Wed Aug 24 13:27:04 2016
+ * Update Count     : 487
  */
 
@@ -141,5 +141,5 @@
 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
-	static char *filename[FILENAME_MAX];				// temporarily store current source-file name
+	static char filename[FILENAME_MAX];					// temporarily store current source-file name
 	char *end_num;
 	char *begin_string, *end_string;
@@ -156,5 +156,5 @@
 		//std::cout << "file " << filename << " line " << lineno << std::endl;
 		yylineno = lineno;
-		yyfilename = filename[0];
+		yyfilename = filename;
 	} // if
 }
@@ -288,19 +288,19 @@
 
 				/* character constant, allows empty value */
-({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
-<QUOTE>[^'\\\n]* { *strtext += std::string( yytext ); }
-<QUOTE>['\n]	{ BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
+({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
+<QUOTE>[^'\\\n]* { strtext->append( yytext, yyleng ); }
+<QUOTE>['\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 				/* ' stop highlighting */
 
 				/* string constant */
-({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
-<STRING>[^"\\\n]* { *strtext += std::string( yytext ); }
-<STRING>["\n]	{ BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
+({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
+<STRING>[^"\\\n]* { strtext->append( yytext, yyleng ); }
+<STRING>["\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 				/* " stop highlighting */
 
 				/* common character/string constant */
-<QUOTE,STRING>{escape_seq} { rm_underscore(); *strtext += std::string( yytext ); }
+<QUOTE,STRING>{escape_seq} { rm_underscore(); strtext->append( yytext, yyleng ); }
 <QUOTE,STRING>"\\"{h_white}*"\n" {}						// continuation (ALSO HANDLED BY CPP)
-<QUOTE,STRING>"\\" { *strtext += std::string( yytext ); } // unknown escape character
+<QUOTE,STRING>"\\" { strtext->append( yytext, yyleng ); } // unknown escape character
 
 				/* punctuation */
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/parser.cc	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -83,45 +83,4 @@
 #include "LinkageSpec.h"
 
-union DeclQualifiers {
-	unsigned int value;									// assume 32-bits
-	struct {
-		bool Extern : 1;
-		bool Static : 1;
-		bool Auto : 1;
-		bool Register : 1;
-		bool Inline : 1;
-		bool Fortran : 1;
-		bool Noreturn : 1;
-		bool Threadlocal : 1;
-		bool Extension : 1;
-		bool Lvalue : 1;
-		bool Const : 1;
-		bool Volatile : 1;
-		bool Restrict : 1;
-		bool Atomic : 1;
-	} qual;
-}; // DeclQualifiers
-DeclQualifiers declQualifiers = { 0 };
-
-union DeclType {
-	unsigned int value;									// assume 32-bits
-	struct {
-		bool Char : 1;
-		bool Bool : 1;
-		bool Short : 1;
-		bool Int : 1;
-		bool Float : 1;
-		bool Double : 1;
-		bool Long : 1;
-		bool Signed : 1;
-		bool Unsigned : 1;
-		bool Void : 1;
-		bool Complex : 1;
-		bool Imaginary : 1;
-		bool Valist : 1;
-	} type;
-}; // DeclType
-DeclType declTypes = { 0 };
-
 extern DeclarationNode * parseTree;
 extern LinkageSpec::Spec linkage;
@@ -137,5 +96,5 @@
 
 /* Line 268 of yacc.c  */
-#line 140 "Parser/parser.cc"
+#line 99 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -388,5 +347,5 @@
 
 /* Line 293 of yacc.c  */
-#line 156 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -408,5 +367,5 @@
 
 /* Line 293 of yacc.c  */
-#line 411 "Parser/parser.cc"
+#line 370 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -420,5 +379,5 @@
 
 /* Line 343 of yacc.c  */
-#line 423 "Parser/parser.cc"
+#line 382 "Parser/parser.cc"
 
 #ifdef short
@@ -1062,80 +1021,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   341,   341,   345,   352,   353,   354,   358,   359,   360,
-     364,   365,   369,   370,   374,   375,   379,   383,   384,   395,
-     397,   399,   401,   406,   407,   413,   417,   419,   420,   422,
-     423,   425,   427,   429,   438,   439,   445,   446,   450,   451,
-     455,   459,   461,   463,   465,   470,   473,   475,   477,   482,
-     495,   497,   499,   501,   503,   505,   507,   509,   511,   513,
-     515,   522,   523,   529,   530,   531,   532,   536,   537,   539,
-     544,   545,   547,   549,   554,   555,   557,   562,   563,   565,
-     570,   571,   573,   575,   577,   582,   583,   585,   590,   591,
-     596,   597,   602,   603,   608,   609,   614,   615,   620,   621,
-     624,   626,   631,   636,   637,   639,   645,   646,   650,   651,
-     652,   653,   654,   655,   656,   657,   658,   659,   660,   666,
-     668,   670,   672,   677,   678,   683,   684,   690,   691,   697,
-     698,   699,   700,   701,   702,   703,   704,   705,   715,   722,
-     724,   734,   735,   740,   742,   748,   750,   754,   755,   760,
-     765,   768,   770,   772,   782,   784,   795,   796,   798,   802,
-     804,   808,   809,   814,   815,   819,   824,   825,   829,   831,
-     837,   838,   842,   844,   846,   848,   854,   855,   859,   861,
-     866,   868,   870,   875,   877,   882,   884,   888,   891,   895,
-     898,   902,   904,   906,   908,   913,   915,   917,   922,   924,
-     926,   928,   930,   935,   937,   939,   941,   946,   958,   959,
-     964,   966,   971,   975,   977,   979,   981,   983,   989,   990,
-     996,   997,  1001,  1002,  1007,  1009,  1015,  1016,  1018,  1023,
-    1028,  1038,  1040,  1044,  1045,  1050,  1052,  1056,  1057,  1061,
-    1063,  1067,  1068,  1072,  1073,  1077,  1078,  1093,  1094,  1095,
-    1096,  1097,  1101,  1106,  1113,  1123,  1128,  1133,  1141,  1146,
-    1151,  1156,  1161,  1169,  1191,  1196,  1203,  1205,  1212,  1217,
-    1222,  1233,  1238,  1243,  1248,  1253,  1262,  1267,  1275,  1276,
-    1277,  1278,  1284,  1289,  1297,  1298,  1299,  1300,  1304,  1305,
-    1306,  1307,  1312,  1313,  1322,  1323,  1328,  1329,  1334,  1336,
-    1338,  1340,  1342,  1345,  1344,  1356,  1357,  1359,  1369,  1370,
-    1375,  1377,  1379,  1381,  1383,  1385,  1387,  1389,  1394,  1396,
-    1398,  1400,  1402,  1404,  1406,  1408,  1410,  1412,  1414,  1416,
-    1418,  1424,  1425,  1427,  1429,  1431,  1436,  1437,  1443,  1444,
-    1446,  1448,  1453,  1455,  1457,  1459,  1464,  1465,  1467,  1469,
-    1474,  1475,  1477,  1482,  1483,  1485,  1487,  1492,  1494,  1496,
-    1501,  1502,  1506,  1508,  1514,  1513,  1517,  1519,  1524,  1526,
-    1532,  1533,  1538,  1539,  1541,  1542,  1551,  1552,  1554,  1556,
-    1561,  1563,  1569,  1570,  1572,  1575,  1578,  1583,  1584,  1589,
-    1594,  1598,  1600,  1606,  1605,  1612,  1614,  1620,  1621,  1629,
-    1630,  1634,  1635,  1636,  1638,  1640,  1647,  1648,  1650,  1652,
-    1657,  1658,  1664,  1665,  1669,  1670,  1675,  1676,  1677,  1679,
-    1687,  1688,  1690,  1693,  1695,  1699,  1700,  1701,  1703,  1705,
-    1709,  1714,  1722,  1723,  1732,  1734,  1739,  1740,  1741,  1745,
-    1746,  1747,  1751,  1752,  1753,  1757,  1758,  1759,  1764,  1765,
-    1766,  1767,  1773,  1774,  1776,  1781,  1782,  1787,  1788,  1789,
-    1790,  1791,  1806,  1807,  1812,  1813,  1819,  1821,  1824,  1826,
-    1828,  1851,  1852,  1854,  1856,  1861,  1862,  1864,  1869,  1874,
-    1875,  1881,  1880,  1884,  1888,  1890,  1892,  1898,  1899,  1904,
-    1909,  1911,  1916,  1918,  1919,  1921,  1926,  1928,  1930,  1935,
-    1937,  1942,  1947,  1955,  1961,  1960,  1974,  1975,  1980,  1981,
-    1985,  1990,  1995,  2003,  2008,  2019,  2020,  2025,  2026,  2032,
-    2033,  2037,  2038,  2039,  2042,  2041,  2052,  2061,  2067,  2073,
-    2082,  2088,  2094,  2100,  2106,  2114,  2120,  2128,  2134,  2143,
-    2144,  2145,  2149,  2153,  2155,  2161,  2162,  2166,  2167,  2172,
-    2178,  2179,  2182,  2184,  2185,  2190,  2191,  2192,  2193,  2227,
-    2229,  2230,  2232,  2237,  2242,  2247,  2249,  2251,  2256,  2258,
-    2260,  2262,  2267,  2269,  2278,  2280,  2281,  2286,  2288,  2290,
-    2295,  2297,  2299,  2304,  2306,  2308,  2317,  2318,  2319,  2323,
-    2325,  2327,  2332,  2334,  2336,  2341,  2343,  2345,  2360,  2362,
-    2363,  2365,  2370,  2371,  2376,  2378,  2380,  2385,  2387,  2389,
-    2391,  2396,  2398,  2400,  2410,  2412,  2413,  2415,  2420,  2422,
-    2424,  2429,  2431,  2433,  2435,  2440,  2442,  2444,  2475,  2477,
-    2478,  2480,  2485,  2490,  2498,  2500,  2502,  2507,  2509,  2514,
-    2516,  2530,  2531,  2533,  2538,  2540,  2542,  2544,  2546,  2551,
-    2552,  2554,  2556,  2561,  2563,  2565,  2571,  2573,  2575,  2579,
-    2581,  2583,  2585,  2599,  2600,  2602,  2607,  2609,  2611,  2613,
-    2615,  2620,  2621,  2623,  2625,  2630,  2632,  2634,  2640,  2641,
-    2643,  2652,  2655,  2657,  2660,  2662,  2664,  2677,  2678,  2680,
-    2685,  2687,  2689,  2691,  2693,  2698,  2699,  2701,  2703,  2708,
-    2710,  2718,  2719,  2720,  2725,  2726,  2730,  2732,  2734,  2736,
-    2738,  2740,  2747,  2749,  2751,  2753,  2755,  2757,  2759,  2761,
-    2763,  2765,  2770,  2772,  2774,  2779,  2805,  2806,  2808,  2812,
-    2813,  2817,  2819,  2821,  2823,  2825,  2827,  2834,  2836,  2838,
-    2840,  2842,  2844,  2849,  2854,  2856,  2858,  2876,  2878,  2883,
-    2884
+       0,   300,   300,   304,   311,   312,   313,   317,   318,   319,
+     323,   324,   328,   329,   333,   334,   338,   342,   343,   354,
+     356,   358,   360,   365,   366,   372,   376,   378,   379,   381,
+     382,   384,   386,   388,   397,   398,   404,   405,   409,   410,
+     414,   418,   420,   422,   424,   429,   432,   434,   436,   441,
+     454,   456,   458,   460,   462,   464,   466,   468,   470,   472,
+     474,   481,   482,   488,   489,   490,   491,   495,   496,   498,
+     503,   504,   506,   508,   513,   514,   516,   521,   522,   524,
+     529,   530,   532,   534,   536,   541,   542,   544,   549,   550,
+     555,   556,   561,   562,   567,   568,   573,   574,   579,   580,
+     583,   585,   590,   595,   596,   598,   604,   605,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   618,   619,   625,
+     627,   629,   631,   636,   637,   642,   643,   649,   650,   656,
+     657,   658,   659,   660,   661,   662,   663,   664,   674,   681,
+     683,   693,   694,   699,   701,   707,   709,   713,   714,   719,
+     724,   727,   729,   731,   741,   743,   754,   755,   757,   761,
+     763,   767,   768,   773,   774,   778,   783,   784,   788,   790,
+     796,   797,   801,   803,   805,   807,   813,   814,   818,   820,
+     825,   827,   829,   834,   836,   841,   843,   847,   850,   854,
+     857,   861,   863,   865,   867,   872,   874,   876,   881,   883,
+     885,   887,   889,   894,   896,   898,   900,   905,   917,   918,
+     923,   925,   930,   934,   936,   938,   940,   942,   948,   949,
+     955,   956,   960,   961,   966,   968,   974,   975,   977,   982,
+     987,   997,   999,  1003,  1004,  1009,  1011,  1015,  1016,  1020,
+    1022,  1026,  1027,  1031,  1032,  1036,  1037,  1052,  1053,  1054,
+    1055,  1056,  1060,  1065,  1072,  1082,  1087,  1092,  1100,  1105,
+    1110,  1115,  1120,  1128,  1150,  1155,  1162,  1164,  1171,  1176,
+    1181,  1192,  1197,  1202,  1207,  1212,  1221,  1226,  1234,  1235,
+    1236,  1237,  1243,  1248,  1256,  1257,  1258,  1259,  1263,  1264,
+    1265,  1266,  1271,  1272,  1281,  1282,  1287,  1288,  1293,  1295,
+    1297,  1299,  1301,  1304,  1303,  1315,  1316,  1318,  1328,  1329,
+    1334,  1336,  1338,  1340,  1342,  1345,  1347,  1350,  1355,  1357,
+    1359,  1361,  1363,  1365,  1367,  1369,  1371,  1373,  1375,  1377,
+    1379,  1385,  1386,  1388,  1390,  1392,  1397,  1398,  1404,  1405,
+    1407,  1409,  1414,  1416,  1418,  1420,  1425,  1426,  1428,  1430,
+    1435,  1436,  1438,  1443,  1444,  1446,  1448,  1453,  1455,  1457,
+    1462,  1463,  1467,  1469,  1475,  1474,  1478,  1480,  1485,  1487,
+    1493,  1494,  1499,  1500,  1502,  1503,  1512,  1513,  1515,  1517,
+    1522,  1524,  1530,  1531,  1533,  1536,  1539,  1544,  1545,  1550,
+    1555,  1559,  1561,  1567,  1566,  1573,  1575,  1581,  1582,  1590,
+    1591,  1595,  1596,  1597,  1599,  1601,  1608,  1609,  1611,  1613,
+    1618,  1619,  1625,  1626,  1630,  1631,  1636,  1637,  1638,  1640,
+    1648,  1649,  1651,  1654,  1656,  1660,  1661,  1662,  1664,  1666,
+    1670,  1675,  1683,  1684,  1693,  1695,  1700,  1701,  1702,  1706,
+    1707,  1708,  1712,  1713,  1714,  1718,  1719,  1720,  1725,  1726,
+    1727,  1728,  1734,  1735,  1737,  1742,  1743,  1748,  1749,  1750,
+    1751,  1752,  1767,  1768,  1773,  1774,  1780,  1782,  1785,  1787,
+    1789,  1812,  1813,  1815,  1817,  1822,  1823,  1825,  1830,  1835,
+    1836,  1842,  1841,  1845,  1849,  1851,  1853,  1859,  1860,  1865,
+    1870,  1872,  1877,  1879,  1880,  1882,  1887,  1889,  1891,  1896,
+    1898,  1903,  1908,  1916,  1922,  1921,  1935,  1936,  1941,  1942,
+    1946,  1951,  1956,  1964,  1969,  1980,  1981,  1986,  1987,  1993,
+    1994,  1998,  1999,  2000,  2003,  2002,  2013,  2022,  2028,  2034,
+    2043,  2049,  2055,  2061,  2067,  2075,  2081,  2089,  2095,  2104,
+    2105,  2106,  2110,  2114,  2116,  2121,  2122,  2126,  2127,  2132,
+    2138,  2139,  2142,  2144,  2145,  2149,  2150,  2151,  2152,  2186,
+    2188,  2189,  2191,  2196,  2201,  2206,  2208,  2210,  2215,  2217,
+    2219,  2221,  2226,  2228,  2237,  2239,  2240,  2245,  2247,  2249,
+    2254,  2256,  2258,  2263,  2265,  2267,  2276,  2277,  2278,  2282,
+    2284,  2286,  2291,  2293,  2295,  2300,  2302,  2304,  2319,  2321,
+    2322,  2324,  2329,  2330,  2335,  2337,  2339,  2344,  2346,  2348,
+    2350,  2355,  2357,  2359,  2369,  2371,  2372,  2374,  2379,  2381,
+    2383,  2388,  2390,  2392,  2394,  2399,  2401,  2403,  2434,  2436,
+    2437,  2439,  2444,  2449,  2457,  2459,  2461,  2466,  2468,  2473,
+    2475,  2489,  2490,  2492,  2497,  2499,  2501,  2503,  2505,  2510,
+    2511,  2513,  2515,  2520,  2522,  2524,  2530,  2532,  2534,  2538,
+    2540,  2542,  2544,  2558,  2559,  2561,  2566,  2568,  2570,  2572,
+    2574,  2579,  2580,  2582,  2584,  2589,  2591,  2593,  2599,  2600,
+    2602,  2611,  2614,  2616,  2619,  2621,  2623,  2636,  2637,  2639,
+    2644,  2646,  2648,  2650,  2652,  2657,  2658,  2660,  2662,  2667,
+    2669,  2677,  2678,  2679,  2684,  2685,  2689,  2691,  2693,  2695,
+    2697,  2699,  2706,  2708,  2710,  2712,  2714,  2716,  2718,  2720,
+    2722,  2724,  2729,  2731,  2733,  2738,  2764,  2765,  2767,  2771,
+    2772,  2776,  2778,  2780,  2782,  2784,  2786,  2793,  2795,  2797,
+    2799,  2801,  2803,  2808,  2813,  2815,  2817,  2835,  2837,  2842,
+    2843
 };
 #endif
@@ -5008,5 +4967,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 341 "parser.yy"
+#line 300 "parser.yy"
     { typedefTable.enterScope(); }
     break;
@@ -5015,5 +4974,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 345 "parser.yy"
+#line 304 "parser.yy"
     { typedefTable.leaveScope(); }
     break;
@@ -5022,5 +4981,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 352 "parser.yy"
+#line 311 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5029,5 +4988,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 353 "parser.yy"
+#line 312 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5036,5 +4995,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 354 "parser.yy"
+#line 313 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5043,5 +5002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+#line 338 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
     break;
@@ -5050,5 +5009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 342 "parser.yy"
     { (yyval.str) = (yyvsp[(1) - (1)].tok); }
     break;
@@ -5057,5 +5016,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 344 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
@@ -5068,5 +5027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
+#line 355 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5075,5 +5034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5082,5 +5041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
+#line 359 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5089,5 +5048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 402 "parser.yy"
+#line 361 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -5096,5 +5055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
+#line 371 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5103,5 +5062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 373 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5110,5 +5069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 377 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5117,5 +5076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 421 "parser.yy"
+#line 380 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5124,5 +5083,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 424 "parser.yy"
+#line 383 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5131,5 +5090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 385 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5138,5 +5097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 387 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5145,5 +5104,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 389 "parser.yy"
     {
 			Token fn;
@@ -5156,5 +5115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
+#line 399 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5163,5 +5122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
+#line 404 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5170,5 +5129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
+#line 410 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5177,5 +5136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5184,5 +5143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
+#line 419 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5191,5 +5150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+#line 421 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5198,5 +5157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
+#line 423 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5205,5 +5164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 425 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5212,5 +5171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 474 "parser.yy"
+#line 433 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5219,5 +5178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5226,5 +5185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 478 "parser.yy"
+#line 437 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5233,5 +5192,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 483 "parser.yy"
+#line 442 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5251,5 +5210,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 496 "parser.yy"
+#line 455 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5258,5 +5217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 498 "parser.yy"
+#line 457 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5265,5 +5224,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
+#line 459 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5272,5 +5231,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
+#line 461 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5279,5 +5238,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 504 "parser.yy"
+#line 463 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5286,5 +5245,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 506 "parser.yy"
+#line 465 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5293,5 +5252,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 508 "parser.yy"
+#line 467 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5300,5 +5259,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
+#line 469 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5307,5 +5266,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 512 "parser.yy"
+#line 471 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5314,5 +5273,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 514 "parser.yy"
+#line 473 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5321,5 +5280,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 516 "parser.yy"
+#line 475 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5328,5 +5287,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 522 "parser.yy"
+#line 481 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5335,103 +5294,103 @@
 
 /* Line 1806 of yacc.c  */
+#line 482 "parser.yy"
+    { (yyval.op) = OperKinds::AddressOf; }
+    break;
+
+  case 63:
+
+/* Line 1806 of yacc.c  */
+#line 488 "parser.yy"
+    { (yyval.op) = OperKinds::UnPlus; }
+    break;
+
+  case 64:
+
+/* Line 1806 of yacc.c  */
+#line 489 "parser.yy"
+    { (yyval.op) = OperKinds::UnMinus; }
+    break;
+
+  case 65:
+
+/* Line 1806 of yacc.c  */
+#line 490 "parser.yy"
+    { (yyval.op) = OperKinds::Neg; }
+    break;
+
+  case 66:
+
+/* Line 1806 of yacc.c  */
+#line 491 "parser.yy"
+    { (yyval.op) = OperKinds::BitNeg; }
+    break;
+
+  case 68:
+
+/* Line 1806 of yacc.c  */
+#line 497 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 69:
+
+/* Line 1806 of yacc.c  */
+#line 499 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 71:
+
+/* Line 1806 of yacc.c  */
+#line 505 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 72:
+
+/* Line 1806 of yacc.c  */
+#line 507 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 73:
+
+/* Line 1806 of yacc.c  */
+#line 509 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 75:
+
+/* Line 1806 of yacc.c  */
+#line 515 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 76:
+
+/* Line 1806 of yacc.c  */
+#line 517 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 78:
+
+/* Line 1806 of yacc.c  */
 #line 523 "parser.yy"
-    { (yyval.op) = OperKinds::AddressOf; }
-    break;
-
-  case 63:
-
-/* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
-    { (yyval.op) = OperKinds::UnPlus; }
-    break;
-
-  case 64:
-
-/* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
-    { (yyval.op) = OperKinds::UnMinus; }
-    break;
-
-  case 65:
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 79:
+
+/* Line 1806 of yacc.c  */
+#line 525 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 81:
 
 /* Line 1806 of yacc.c  */
 #line 531 "parser.yy"
-    { (yyval.op) = OperKinds::Neg; }
-    break;
-
-  case 66:
-
-/* Line 1806 of yacc.c  */
-#line 532 "parser.yy"
-    { (yyval.op) = OperKinds::BitNeg; }
-    break;
-
-  case 68:
-
-/* Line 1806 of yacc.c  */
-#line 538 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 69:
-
-/* Line 1806 of yacc.c  */
-#line 540 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 71:
-
-/* Line 1806 of yacc.c  */
-#line 546 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 72:
-
-/* Line 1806 of yacc.c  */
-#line 548 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 73:
-
-/* Line 1806 of yacc.c  */
-#line 550 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 75:
-
-/* Line 1806 of yacc.c  */
-#line 556 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 76:
-
-/* Line 1806 of yacc.c  */
-#line 558 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 78:
-
-/* Line 1806 of yacc.c  */
-#line 564 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 79:
-
-/* Line 1806 of yacc.c  */
-#line 566 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 81:
-
-/* Line 1806 of yacc.c  */
-#line 572 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5440,5 +5399,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 574 "parser.yy"
+#line 533 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5447,5 +5406,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 576 "parser.yy"
+#line 535 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5454,5 +5413,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+#line 537 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5461,222 +5420,222 @@
 
 /* Line 1806 of yacc.c  */
+#line 543 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 87:
+
+/* Line 1806 of yacc.c  */
+#line 545 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 89:
+
+/* Line 1806 of yacc.c  */
+#line 551 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 91:
+
+/* Line 1806 of yacc.c  */
+#line 557 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 93:
+
+/* Line 1806 of yacc.c  */
+#line 563 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 95:
+
+/* Line 1806 of yacc.c  */
+#line 569 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
+    break;
+
+  case 97:
+
+/* Line 1806 of yacc.c  */
+#line 575 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
+    break;
+
+  case 99:
+
+/* Line 1806 of yacc.c  */
+#line 581 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 100:
+
+/* Line 1806 of yacc.c  */
 #line 584 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 87:
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
+    break;
+
+  case 101:
 
 /* Line 1806 of yacc.c  */
 #line 586 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 89:
-
-/* Line 1806 of yacc.c  */
-#line 592 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 91:
-
-/* Line 1806 of yacc.c  */
-#line 598 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 93:
+    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
+    break;
+
+  case 104:
+
+/* Line 1806 of yacc.c  */
+#line 597 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 105:
+
+/* Line 1806 of yacc.c  */
+#line 599 "parser.yy"
+    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 106:
 
 /* Line 1806 of yacc.c  */
 #line 604 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 95:
+    { (yyval.en) = nullptr; }
+    break;
+
+  case 108:
+
+/* Line 1806 of yacc.c  */
+#line 609 "parser.yy"
+    { (yyval.op) = OperKinds::Assign; }
+    break;
+
+  case 109:
 
 /* Line 1806 of yacc.c  */
 #line 610 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
-    break;
-
-  case 97:
+    { (yyval.op) = OperKinds::MulAssn; }
+    break;
+
+  case 110:
+
+/* Line 1806 of yacc.c  */
+#line 611 "parser.yy"
+    { (yyval.op) = OperKinds::DivAssn; }
+    break;
+
+  case 111:
+
+/* Line 1806 of yacc.c  */
+#line 612 "parser.yy"
+    { (yyval.op) = OperKinds::ModAssn; }
+    break;
+
+  case 112:
+
+/* Line 1806 of yacc.c  */
+#line 613 "parser.yy"
+    { (yyval.op) = OperKinds::PlusAssn; }
+    break;
+
+  case 113:
+
+/* Line 1806 of yacc.c  */
+#line 614 "parser.yy"
+    { (yyval.op) = OperKinds::MinusAssn; }
+    break;
+
+  case 114:
+
+/* Line 1806 of yacc.c  */
+#line 615 "parser.yy"
+    { (yyval.op) = OperKinds::LSAssn; }
+    break;
+
+  case 115:
 
 /* Line 1806 of yacc.c  */
 #line 616 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
-    break;
-
-  case 99:
-
-/* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 100:
-
-/* Line 1806 of yacc.c  */
-#line 625 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
-    break;
-
-  case 101:
-
-/* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
-    break;
-
-  case 104:
+    { (yyval.op) = OperKinds::RSAssn; }
+    break;
+
+  case 116:
+
+/* Line 1806 of yacc.c  */
+#line 617 "parser.yy"
+    { (yyval.op) = OperKinds::AndAssn; }
+    break;
+
+  case 117:
+
+/* Line 1806 of yacc.c  */
+#line 618 "parser.yy"
+    { (yyval.op) = OperKinds::ERAssn; }
+    break;
+
+  case 118:
+
+/* Line 1806 of yacc.c  */
+#line 619 "parser.yy"
+    { (yyval.op) = OperKinds::OrAssn; }
+    break;
+
+  case 119:
+
+/* Line 1806 of yacc.c  */
+#line 626 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple() ); }
+    break;
+
+  case 120:
+
+/* Line 1806 of yacc.c  */
+#line 628 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
+    break;
+
+  case 121:
+
+/* Line 1806 of yacc.c  */
+#line 630 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
+    break;
+
+  case 122:
+
+/* Line 1806 of yacc.c  */
+#line 632 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
+    break;
+
+  case 124:
 
 /* Line 1806 of yacc.c  */
 #line 638 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 105:
-
-/* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
-    { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 106:
-
-/* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
-    { (yyval.en) = nullptr; }
-    break;
-
-  case 108:
-
-/* Line 1806 of yacc.c  */
-#line 650 "parser.yy"
-    { (yyval.op) = OperKinds::Assign; }
-    break;
-
-  case 109:
-
-/* Line 1806 of yacc.c  */
-#line 651 "parser.yy"
-    { (yyval.op) = OperKinds::MulAssn; }
-    break;
-
-  case 110:
-
-/* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
-    { (yyval.op) = OperKinds::DivAssn; }
-    break;
-
-  case 111:
-
-/* Line 1806 of yacc.c  */
-#line 653 "parser.yy"
-    { (yyval.op) = OperKinds::ModAssn; }
-    break;
-
-  case 112:
-
-/* Line 1806 of yacc.c  */
-#line 654 "parser.yy"
-    { (yyval.op) = OperKinds::PlusAssn; }
-    break;
-
-  case 113:
-
-/* Line 1806 of yacc.c  */
-#line 655 "parser.yy"
-    { (yyval.op) = OperKinds::MinusAssn; }
-    break;
-
-  case 114:
-
-/* Line 1806 of yacc.c  */
-#line 656 "parser.yy"
-    { (yyval.op) = OperKinds::LSAssn; }
-    break;
-
-  case 115:
-
-/* Line 1806 of yacc.c  */
-#line 657 "parser.yy"
-    { (yyval.op) = OperKinds::RSAssn; }
-    break;
-
-  case 116:
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 126:
+
+/* Line 1806 of yacc.c  */
+#line 644 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 127:
+
+/* Line 1806 of yacc.c  */
+#line 649 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 131:
 
 /* Line 1806 of yacc.c  */
 #line 658 "parser.yy"
-    { (yyval.op) = OperKinds::AndAssn; }
-    break;
-
-  case 117:
-
-/* Line 1806 of yacc.c  */
-#line 659 "parser.yy"
-    { (yyval.op) = OperKinds::ERAssn; }
-    break;
-
-  case 118:
-
-/* Line 1806 of yacc.c  */
-#line 660 "parser.yy"
-    { (yyval.op) = OperKinds::OrAssn; }
-    break;
-
-  case 119:
-
-/* Line 1806 of yacc.c  */
-#line 667 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple() ); }
-    break;
-
-  case 120:
-
-/* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
-    break;
-
-  case 121:
-
-/* Line 1806 of yacc.c  */
-#line 671 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
-    break;
-
-  case 122:
-
-/* Line 1806 of yacc.c  */
-#line 673 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
-    break;
-
-  case 124:
-
-/* Line 1806 of yacc.c  */
-#line 679 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 126:
-
-/* Line 1806 of yacc.c  */
-#line 685 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 127:
-
-/* Line 1806 of yacc.c  */
-#line 690 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 131:
-
-/* Line 1806 of yacc.c  */
-#line 699 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5685,5 +5644,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 706 "parser.yy"
+#line 665 "parser.yy"
     {
 			Token fn;
@@ -5696,5 +5655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 716 "parser.yy"
+#line 675 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5705,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 723 "parser.yy"
+#line 682 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
@@ -5712,5 +5671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 730 "parser.yy"
+#line 689 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     break;
@@ -5719,5 +5678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 736 "parser.yy"
+#line 695 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5726,5 +5685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 741 "parser.yy"
+#line 700 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5733,5 +5692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
+#line 702 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -5744,5 +5703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
+#line 708 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5751,5 +5710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 756 "parser.yy"
+#line 715 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5758,5 +5717,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 720 "parser.yy"
     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5765,5 +5724,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 726 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
@@ -5772,5 +5731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+#line 728 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
@@ -5779,5 +5738,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
+#line 730 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5786,5 +5745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 732 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5801,5 +5760,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 742 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5808,5 +5767,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 785 "parser.yy"
+#line 744 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5818,5 +5777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 795 "parser.yy"
+#line 754 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5825,5 +5784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 797 "parser.yy"
+#line 756 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5832,306 +5791,306 @@
 
 /* Line 1806 of yacc.c  */
+#line 761 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
+    break;
+
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 763 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 767 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+    break;
+
+  case 162:
+
+/* Line 1806 of yacc.c  */
+#line 768 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_default() ); }
+    break;
+
+  case 164:
+
+/* Line 1806 of yacc.c  */
+#line 774 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
+    break;
+
+  case 165:
+
+/* Line 1806 of yacc.c  */
+#line 778 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 166:
+
+/* Line 1806 of yacc.c  */
+#line 783 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 168:
+
+/* Line 1806 of yacc.c  */
+#line 789 "parser.yy"
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
+    break;
+
+  case 169:
+
+/* Line 1806 of yacc.c  */
+#line 791 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
+    break;
+
+  case 170:
+
+/* Line 1806 of yacc.c  */
+#line 796 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 172:
+
+/* Line 1806 of yacc.c  */
 #line 802 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
-    break;
-
-  case 160:
+    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
+    break;
+
+  case 173:
 
 /* Line 1806 of yacc.c  */
 #line 804 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
-    break;
-
-  case 161:
+    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+    break;
+
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 806 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+    break;
+
+  case 175:
 
 /* Line 1806 of yacc.c  */
 #line 808 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
-    break;
-
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_default() ); }
-    break;
-
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
-    break;
-
-  case 165:
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
+    break;
+
+  case 176:
+
+/* Line 1806 of yacc.c  */
+#line 813 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
+    break;
+
+  case 178:
 
 /* Line 1806 of yacc.c  */
 #line 819 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
-    break;
-
-  case 166:
-
-/* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
-  case 168:
+  case 179:
+
+/* Line 1806 of yacc.c  */
+#line 821 "parser.yy"
+    { (yyval.sn) = 0; }
+    break;
+
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 826 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
+    break;
+
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 828 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
+    break;
+
+  case 182:
 
 /* Line 1806 of yacc.c  */
 #line 830 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
-    break;
-
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 832 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
-    break;
-
-  case 170:
+    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
+    break;
+
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 835 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+    break;
+
+  case 184:
 
 /* Line 1806 of yacc.c  */
 #line 837 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
-    break;
-
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
-    { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
-    break;
-
-  case 174:
-
-/* Line 1806 of yacc.c  */
-#line 847 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
-    break;
-
-  case 175:
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+    break;
+
+  case 185:
+
+/* Line 1806 of yacc.c  */
+#line 842 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
+    break;
+
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 846 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 187:
 
 /* Line 1806 of yacc.c  */
 #line 849 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
-    break;
-
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 854 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
+    break;
+
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 853 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
+    break;
+
+  case 189:
+
+/* Line 1806 of yacc.c  */
+#line 856 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
 
-  case 178:
+  case 190:
 
 /* Line 1806 of yacc.c  */
 #line 860 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 179:
+    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
+    break;
+
+  case 191:
 
 /* Line 1806 of yacc.c  */
 #line 862 "parser.yy"
-    { (yyval.sn) = 0; }
-    break;
-
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 867 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
-    break;
-
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 869 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
-    break;
-
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 871 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
-    break;
-
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 876 "parser.yy"
-    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
-    break;
-
-  case 184:
-
-/* Line 1806 of yacc.c  */
-#line 878 "parser.yy"
-    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
-    break;
-
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
-    break;
-
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
-    break;
-
-  case 187:
+    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 192:
+
+/* Line 1806 of yacc.c  */
+#line 864 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 193:
+
+/* Line 1806 of yacc.c  */
+#line 866 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
+    break;
+
+  case 194:
+
+/* Line 1806 of yacc.c  */
+#line 868 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
+    break;
+
+  case 195:
+
+/* Line 1806 of yacc.c  */
+#line 873 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
+    break;
+
+  case 196:
+
+/* Line 1806 of yacc.c  */
+#line 875 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
+    break;
+
+  case 197:
+
+/* Line 1806 of yacc.c  */
+#line 877 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
+    break;
+
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 884 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 886 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 888 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 202:
 
 /* Line 1806 of yacc.c  */
 #line 890 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
-    break;
-
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
-    break;
-
-  case 189:
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 895 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 204:
 
 /* Line 1806 of yacc.c  */
 #line 897 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
-    break;
-
-  case 190:
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 899 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 206:
 
 /* Line 1806 of yacc.c  */
 #line 901 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
-    break;
-
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
-    break;
-
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
-    break;
-
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
-    break;
-
-  case 194:
-
-/* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
-    break;
-
-  case 195:
-
-/* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
-    break;
-
-  case 196:
-
-/* Line 1806 of yacc.c  */
-#line 916 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
-    break;
-
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 918 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 925 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
-    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
-    break;
-
-  case 201:
-
-/* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
-    break;
-
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
-    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
-    break;
-
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 936 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
-    break;
-
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
 
-  case 205:
-
-/* Line 1806 of yacc.c  */
-#line 940 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
-    break;
-
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 942 "parser.yy"
-    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
-    break;
-
   case 207:
 
 /* Line 1806 of yacc.c  */
-#line 947 "parser.yy"
+#line 906 "parser.yy"
     {
 			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
@@ -6142,5 +6101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 919 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6152,5 +6111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 965 "parser.yy"
+#line 924 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6159,5 +6118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 967 "parser.yy"
+#line 926 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6169,96 +6128,96 @@
 
 /* Line 1806 of yacc.c  */
+#line 935 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 937 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
+    break;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 939 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
+    break;
+
+  case 216:
+
+/* Line 1806 of yacc.c  */
+#line 941 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
+    break;
+
+  case 217:
+
+/* Line 1806 of yacc.c  */
+#line 943 "parser.yy"
+    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
+    break;
+
+  case 218:
+
+/* Line 1806 of yacc.c  */
+#line 948 "parser.yy"
+    { (yyval.flag) = false; }
+    break;
+
+  case 219:
+
+/* Line 1806 of yacc.c  */
+#line 950 "parser.yy"
+    { (yyval.flag) = true; }
+    break;
+
+  case 220:
+
+/* Line 1806 of yacc.c  */
+#line 955 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 223:
+
+/* Line 1806 of yacc.c  */
+#line 962 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
+    break;
+
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 967 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
+    break;
+
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 969 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
+    break;
+
+  case 226:
+
+/* Line 1806 of yacc.c  */
+#line 974 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 227:
+
+/* Line 1806 of yacc.c  */
 #line 976 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
-    break;
-
-  case 214:
+    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
+    break;
+
+  case 228:
 
 /* Line 1806 of yacc.c  */
 #line 978 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
-    break;
-
-  case 215:
-
-/* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
-    break;
-
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
-    break;
-
-  case 217:
-
-/* Line 1806 of yacc.c  */
-#line 984 "parser.yy"
-    { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
-    break;
-
-  case 218:
-
-/* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
-    { (yyval.flag) = false; }
-    break;
-
-  case 219:
-
-/* Line 1806 of yacc.c  */
-#line 991 "parser.yy"
-    { (yyval.flag) = true; }
-    break;
-
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 996 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 1003 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
-    break;
-
-  case 224:
-
-/* Line 1806 of yacc.c  */
-#line 1008 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
-    break;
-
-  case 225:
-
-/* Line 1806 of yacc.c  */
-#line 1010 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
-    break;
-
-  case 226:
-
-/* Line 1806 of yacc.c  */
-#line 1015 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 227:
-
-/* Line 1806 of yacc.c  */
-#line 1017 "parser.yy"
-    { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
-    break;
-
-  case 228:
-
-/* Line 1806 of yacc.c  */
-#line 1019 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6267,5 +6226,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1024 "parser.yy"
+#line 983 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6277,5 +6236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1029 "parser.yy"
+#line 988 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6287,5 +6246,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 998 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6294,5 +6253,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1046 "parser.yy"
+#line 1005 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6301,5 +6260,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1051 "parser.yy"
+#line 1010 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6308,5 +6267,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1058 "parser.yy"
+#line 1017 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6315,5 +6274,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1031 "parser.yy"
     {}
     break;
@@ -6322,5 +6281,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1073 "parser.yy"
+#line 1032 "parser.yy"
     {}
     break;
@@ -6329,5 +6288,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1102 "parser.yy"
+#line 1061 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6339,5 +6298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1109 "parser.yy"
+#line 1068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6349,5 +6308,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1114 "parser.yy"
+#line 1073 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6359,5 +6318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1124 "parser.yy"
+#line 1083 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6369,5 +6328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1129 "parser.yy"
+#line 1088 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6379,5 +6338,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1134 "parser.yy"
+#line 1093 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6389,5 +6348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1142 "parser.yy"
+#line 1101 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6399,5 +6358,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1147 "parser.yy"
+#line 1106 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6409,5 +6368,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1152 "parser.yy"
+#line 1111 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6419,5 +6378,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1157 "parser.yy"
+#line 1116 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6429,5 +6388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+#line 1121 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6439,5 +6398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1170 "parser.yy"
+#line 1129 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6448,5 +6407,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+#line 1152 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6457,5 +6416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1156 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6466,5 +6425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1204 "parser.yy"
+#line 1163 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6473,5 +6432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1208 "parser.yy"
+#line 1167 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6480,5 +6439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1213 "parser.yy"
+#line 1172 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6490,5 +6449,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1218 "parser.yy"
+#line 1177 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6500,5 +6459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1223 "parser.yy"
+#line 1182 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6510,5 +6469,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1234 "parser.yy"
+#line 1193 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6520,5 +6479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1239 "parser.yy"
+#line 1198 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6530,5 +6489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1244 "parser.yy"
+#line 1203 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6540,5 +6499,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1249 "parser.yy"
+#line 1208 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6550,5 +6509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1254 "parser.yy"
+#line 1213 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6560,5 +6519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1263 "parser.yy"
+#line 1222 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6570,5 +6529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1268 "parser.yy"
+#line 1227 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6580,5 +6539,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1285 "parser.yy"
+#line 1244 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6590,5 +6549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1290 "parser.yy"
+#line 1249 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6600,5 +6559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1312 "parser.yy"
+#line 1271 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6607,5 +6566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1283 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6614,5 +6573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+#line 1294 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6621,5 +6580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1296 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6628,5 +6587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+#line 1298 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6635,5 +6594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+#line 1300 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6642,5 +6601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
+#line 1302 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6649,5 +6608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+#line 1304 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6658,5 +6617,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1308 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6668,205 +6627,289 @@
 
 /* Line 1806 of yacc.c  */
+#line 1317 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 307:
+
+/* Line 1806 of yacc.c  */
+#line 1319 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 309:
+
+/* Line 1806 of yacc.c  */
+#line 1330 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 310:
+
+/* Line 1806 of yacc.c  */
+#line 1335 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1337 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1339 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1341 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1344 "parser.yy"
+    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
+    break;
+
+  case 315:
+
+/* Line 1806 of yacc.c  */
+#line 1346 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1349 "parser.yy"
+    { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
+    break;
+
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1351 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+    break;
+
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1356 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
 #line 1358 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1362 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1364 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1366 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1370 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1372 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1374 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1376 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1378 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1380 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1387 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1389 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1391 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1371 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1393 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1399 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1406 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 310:
-
-/* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 311:
-
-/* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1382 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 314:
-
-/* Line 1806 of yacc.c  */
-#line 1384 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1386 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
-    break;
-
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 328:
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1410 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
 
 /* Line 1806 of yacc.c  */
 #line 1415 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 329:
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
 
 /* Line 1806 of yacc.c  */
 #line 1417 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 330:
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
 
 /* Line 1806 of yacc.c  */
 #line 1419 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
-    break;
-
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1426 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1421 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1427 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1428 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1429 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1431 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 339:
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1437 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1439 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 354:
 
 /* Line 1806 of yacc.c  */
@@ -6875,5 +6918,5 @@
     break;
 
-  case 340:
+  case 355:
 
 /* Line 1806 of yacc.c  */
@@ -6882,127 +6925,43 @@
     break;
 
-  case 341:
+  case 356:
 
 /* Line 1806 of yacc.c  */
 #line 1449 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 342:
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 357:
 
 /* Line 1806 of yacc.c  */
 #line 1454 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 343:
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 358:
 
 /* Line 1806 of yacc.c  */
 #line 1456 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 344:
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
 
 /* Line 1806 of yacc.c  */
 #line 1458 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1466 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 348:
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 362:
 
 /* Line 1806 of yacc.c  */
 #line 1468 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 349:
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
+    break;
+
+  case 363:
 
 /* Line 1806 of yacc.c  */
 #line 1470 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1476 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1484 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1488 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1497 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 362:
-
-/* Line 1806 of yacc.c  */
-#line 1507 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
-    break;
-
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7014,5 +6973,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1514 "parser.yy"
+#line 1475 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7021,5 +6980,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
+#line 1477 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -7028,5 +6987,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
+#line 1479 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -7035,5 +6994,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1520 "parser.yy"
+#line 1481 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7042,5 +7001,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1525 "parser.yy"
+#line 1486 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7049,5 +7008,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1527 "parser.yy"
+#line 1488 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7056,5 +7015,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
+#line 1493 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7063,5 +7022,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1534 "parser.yy"
+#line 1495 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7070,5 +7029,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1540 "parser.yy"
+#line 1501 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7077,5 +7036,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1543 "parser.yy"
+#line 1504 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7088,5 +7047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1553 "parser.yy"
+#line 1514 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7095,5 +7054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
+#line 1516 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7102,5 +7061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1557 "parser.yy"
+#line 1518 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7109,75 +7068,75 @@
 
 /* Line 1806 of yacc.c  */
+#line 1523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1525 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
+    break;
+
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1530 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
+    break;
+
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1532 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1535 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 385:
+
+/* Line 1806 of yacc.c  */
+#line 1538 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1544 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 388:
+
+/* Line 1806 of yacc.c  */
+#line 1546 "parser.yy"
+    { (yyval.en) = (yyvsp[(1) - (1)].en); }
+    break;
+
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1551 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+    break;
+
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1560 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
+    break;
+
+  case 392:
+
+/* Line 1806 of yacc.c  */
 #line 1562 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1564 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
-    break;
-
-  case 382:
-
-/* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
-    break;
-
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1574 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1583 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1585 "parser.yy"
-    { (yyval.en) = (yyvsp[(1) - (1)].en); }
-    break;
-
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 391:
-
-/* Line 1806 of yacc.c  */
-#line 1599 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 392:
-
-/* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7189,5 +7148,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1606 "parser.yy"
+#line 1567 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7196,5 +7155,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
+#line 1569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7203,5 +7162,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1613 "parser.yy"
+#line 1574 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7210,5 +7169,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1615 "parser.yy"
+#line 1576 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7217,131 +7176,131 @@
 
 /* Line 1806 of yacc.c  */
+#line 1581 "parser.yy"
+    { (yyval.en) = 0; }
+    break;
+
+  case 398:
+
+/* Line 1806 of yacc.c  */
+#line 1583 "parser.yy"
+    { (yyval.en) = (yyvsp[(2) - (2)].en); }
+    break;
+
+  case 399:
+
+/* Line 1806 of yacc.c  */
+#line 1590 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 403:
+
+/* Line 1806 of yacc.c  */
+#line 1598 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1600 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1602 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 407:
+
+/* Line 1806 of yacc.c  */
+#line 1610 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1612 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1614 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
+
+/* Line 1806 of yacc.c  */
 #line 1620 "parser.yy"
-    { (yyval.en) = 0; }
-    break;
-
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
-    { (yyval.en) = (yyvsp[(2) - (2)].en); }
-    break;
-
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1629 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1625 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1637 "parser.yy"
+  case 415:
+
+/* Line 1806 of yacc.c  */
+#line 1632 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
+    break;
+
+  case 418:
+
+/* Line 1806 of yacc.c  */
+#line 1639 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 404:
-
-/* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 405:
+  case 419:
 
 /* Line 1806 of yacc.c  */
 #line 1641 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1649 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 409:
+  case 421:
+
+/* Line 1806 of yacc.c  */
+#line 1650 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 422:
 
 /* Line 1806 of yacc.c  */
 #line 1653 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1659 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1664 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 415:
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 423:
+
+/* Line 1806 of yacc.c  */
+#line 1655 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
+    break;
+
+  case 428:
+
+/* Line 1806 of yacc.c  */
+#line 1665 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 430:
 
 /* Line 1806 of yacc.c  */
 #line 1671 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
-    break;
-
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1678 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1689 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 422:
-
-/* Line 1806 of yacc.c  */
-#line 1692 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
-    break;
-
-  case 423:
-
-/* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
-    break;
-
-  case 428:
-
-/* Line 1806 of yacc.c  */
-#line 1704 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 430:
-
-/* Line 1806 of yacc.c  */
-#line 1710 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7353,5 +7312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1715 "parser.yy"
+#line 1676 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7363,5 +7322,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1724 "parser.yy"
+#line 1685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7370,5 +7329,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1733 "parser.yy"
+#line 1694 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7377,5 +7336,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+#line 1696 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7384,5 +7343,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1760 "parser.yy"
+#line 1721 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7391,5 +7350,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1768 "parser.yy"
+#line 1729 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7398,5 +7357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1773 "parser.yy"
+#line 1734 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7405,110 +7364,110 @@
 
 /* Line 1806 of yacc.c  */
+#line 1736 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1742 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 456:
+
+/* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1748 "parser.yy"
+    { (yyval.in) = 0; }
+    break;
+
+  case 459:
+
+/* Line 1806 of yacc.c  */
+#line 1750 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+    break;
+
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1751 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
+    break;
+
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1753 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+    break;
+
+  case 463:
+
+/* Line 1806 of yacc.c  */
+#line 1769 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
+    break;
+
+  case 465:
+
+/* Line 1806 of yacc.c  */
 #line 1775 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 455:
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 466:
 
 /* Line 1806 of yacc.c  */
 #line 1781 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
-    { (yyval.in) = 0; }
-    break;
-
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
-    break;
-
-  case 460:
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
+    break;
+
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1784 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1786 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1788 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
+    break;
+
+  case 470:
 
 /* Line 1806 of yacc.c  */
 #line 1790 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
-    break;
-
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1792 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
-    break;
-
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
-    break;
-
-  case 465:
+    { (yyval.en) = (yyvsp[(4) - (6)].en); }
+    break;
+
+  case 472:
 
 /* Line 1806 of yacc.c  */
 #line 1814 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1820 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
-    break;
-
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1823 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
-    break;
-
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
-    break;
-
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
-    break;
-
-  case 470:
-
-/* Line 1806 of yacc.c  */
-#line 1829 "parser.yy"
-    { (yyval.en) = (yyvsp[(4) - (6)].en); }
-    break;
-
-  case 472:
-
-/* Line 1806 of yacc.c  */
-#line 1853 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7517,5 +7476,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+#line 1816 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7524,5 +7483,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
+#line 1818 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7531,5 +7490,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1824 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7538,5 +7497,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+#line 1826 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7545,5 +7504,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+#line 1831 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7552,5 +7511,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1876 "parser.yy"
+#line 1837 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7559,5 +7518,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1881 "parser.yy"
+#line 1842 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7566,5 +7525,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+#line 1844 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7573,5 +7532,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1889 "parser.yy"
+#line 1850 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7580,5 +7539,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1852 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7587,5 +7546,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+#line 1854 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7594,5 +7553,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+#line 1859 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7601,5 +7560,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1861 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7608,5 +7567,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+#line 1866 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7618,5 +7577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1910 "parser.yy"
+#line 1871 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7625,5 +7584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1912 "parser.yy"
+#line 1873 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7632,5 +7591,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1917 "parser.yy"
+#line 1878 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
@@ -7639,5 +7598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1920 "parser.yy"
+#line 1881 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
@@ -7646,5 +7605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1922 "parser.yy"
+#line 1883 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7653,5 +7612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1927 "parser.yy"
+#line 1888 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7660,5 +7619,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1929 "parser.yy"
+#line 1890 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7667,5 +7626,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7674,5 +7633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1936 "parser.yy"
+#line 1897 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7681,5 +7640,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+#line 1899 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7688,5 +7647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1943 "parser.yy"
+#line 1904 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7698,5 +7657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+#line 1909 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7708,5 +7667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1956 "parser.yy"
+#line 1917 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7718,5 +7677,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+#line 1922 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7728,5 +7687,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+#line 1927 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7739,5 +7698,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1976 "parser.yy"
+#line 1937 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7746,5 +7705,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1986 "parser.yy"
+#line 1947 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7756,5 +7715,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1991 "parser.yy"
+#line 1952 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7766,5 +7725,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1996 "parser.yy"
+#line 1957 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7776,5 +7735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2004 "parser.yy"
+#line 1965 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7786,5 +7745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2009 "parser.yy"
+#line 1970 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7796,5 +7755,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2019 "parser.yy"
+#line 1980 "parser.yy"
     {}
     break;
@@ -7803,5 +7762,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2021 "parser.yy"
+#line 1982 "parser.yy"
     { parseTree = parseTree != nullptr ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
     break;
@@ -7810,5 +7769,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2027 "parser.yy"
+#line 1988 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) != nullptr ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7817,5 +7776,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2032 "parser.yy"
+#line 1993 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7824,5 +7783,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2040 "parser.yy"
+#line 2001 "parser.yy"
     {}
     break;
@@ -7831,5 +7790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2042 "parser.yy"
+#line 2003 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7841,5 +7800,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2047 "parser.yy"
+#line 2008 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7852,5 +7811,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2053 "parser.yy"
+#line 2014 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7863,5 +7822,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2068 "parser.yy"
+#line 2029 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7874,5 +7833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2074 "parser.yy"
+#line 2035 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7885,5 +7844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2083 "parser.yy"
+#line 2044 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7896,5 +7855,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2089 "parser.yy"
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7907,5 +7866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2095 "parser.yy"
+#line 2056 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7918,5 +7877,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2101 "parser.yy"
+#line 2062 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7929,5 +7888,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
+#line 2068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7940,5 +7899,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2115 "parser.yy"
+#line 2076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7951,5 +7910,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+#line 2082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7962,5 +7921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2129 "parser.yy"
+#line 2090 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7973,5 +7932,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2135 "parser.yy"
+#line 2096 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7984,96 +7943,96 @@
 
 /* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2116 "parser.yy"
+    { delete (yyvsp[(3) - (5)].str); }
+    break;
+
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2121 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 548:
+
+/* Line 1806 of yacc.c  */
+#line 2128 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2134 "parser.yy"
+    { (yyval.decl) = 0; }
+    break;
+
+  case 554:
+
+/* Line 1806 of yacc.c  */
+#line 2145 "parser.yy"
+    { delete (yyvsp[(3) - (4)].en); }
+    break;
+
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2149 "parser.yy"
+    { delete (yyvsp[(1) - (1)].tok); }
+    break;
+
+  case 556:
+
+/* Line 1806 of yacc.c  */
 #line 2150 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
-    break;
-
-  case 544:
-
-/* Line 1806 of yacc.c  */
-#line 2156 "parser.yy"
-    { delete (yyvsp[(3) - (5)].str); }
-    break;
-
-  case 545:
-
-/* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 548:
-
-/* Line 1806 of yacc.c  */
-#line 2168 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2174 "parser.yy"
-    { (yyval.decl) = 0; }
-    break;
-
-  case 554:
-
-/* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
-    { delete (yyvsp[(3) - (4)].en); }
-    break;
-
-  case 555:
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2151 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2152 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2187 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 561:
 
 /* Line 1806 of yacc.c  */
 #line 2190 "parser.yy"
-    { delete (yyvsp[(1) - (1)].tok); }
-    break;
-
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2191 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
-  case 557:
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 562:
 
 /* Line 1806 of yacc.c  */
 #line 2192 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
-  case 558:
-
-/* Line 1806 of yacc.c  */
-#line 2193 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
-  case 559:
-
-/* Line 1806 of yacc.c  */
-#line 2228 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 561:
-
-/* Line 1806 of yacc.c  */
-#line 2231 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2233 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 563:
 
 /* Line 1806 of yacc.c  */
-#line 2238 "parser.yy"
+#line 2197 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8085,5 +8044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+#line 2202 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8092,418 +8051,418 @@
 
 /* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2218 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2220 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2222 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2227 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2229 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2238 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2241 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2246 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
 #line 2248 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2250 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2250 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2259 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2268 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2283 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2285 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2287 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2294 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2296 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2303 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2305 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2320 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2323 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2325 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2331 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2336 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2338 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2349 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2268 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2270 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2279 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2370 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2282 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2287 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2375 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2380 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2382 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2384 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2389 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2391 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2393 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2395 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2402 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2291 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2296 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2324 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2326 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2337 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2342 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2344 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2435 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2364 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2440 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2372 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2379 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2381 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2386 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2388 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2397 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2414 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2416 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2421 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2423 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2430 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2432 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2441 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2443 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 627:
+  case 632:
 
 /* Line 1806 of yacc.c  */
 #line 2445 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2486 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8515,5 +8474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+#line 2450 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8525,5 +8484,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
+#line 2458 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8532,5 +8491,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+#line 2460 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8539,5 +8498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+#line 2462 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8546,5 +8505,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2467 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8553,5 +8512,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+#line 2469 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8560,5 +8519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2515 "parser.yy"
+#line 2474 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8567,5 +8526,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2517 "parser.yy"
+#line 2476 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8574,5 +8533,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+#line 2491 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8581,5 +8540,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2534 "parser.yy"
+#line 2493 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8588,614 +8547,614 @@
 
 /* Line 1806 of yacc.c  */
+#line 2498 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2500 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2502 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2504 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2512 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2516 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2525 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2531 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2533 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
 #line 2539 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2541 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2543 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2562 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2567 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2571 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2573 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2575 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2581 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2555 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2583 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2557 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2585 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2562 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2564 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2566 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2594 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2584 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2586 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2601 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2615 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2617 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2638 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2640 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2645 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2610 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2647 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2612 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2649 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2651 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2663 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2633 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2642 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2653 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2680 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2690 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2692 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2694 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2696 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2707 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2709 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2711 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2713 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2715 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2717 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2719 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2721 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2723 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2725 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2730 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2732 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2679 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2681 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2686 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2709 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2711 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2721 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2766 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2731 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2777 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2733 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2779 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2781 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2783 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2785 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2787 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2748 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2794 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2750 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2796 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2798 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2804 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2764 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2766 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2771 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2778 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2780 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 731:
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2809 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
+    break;
+
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2814 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
+    break;
+
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2816 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
+    break;
+
+  case 746:
 
 /* Line 1806 of yacc.c  */
 #line 2818 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2820 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2822 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2826 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2828 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2835 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2837 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2839 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2841 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2843 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2845 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2850 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2855 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
-    break;
-
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2857 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2859 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
-    break;
-
   case 749:
 
 /* Line 1806 of yacc.c  */
-#line 2883 "parser.yy"
+#line 2842 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9204,5 +9163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2885 "parser.yy"
+#line 2844 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9211,5 +9170,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9214 "Parser/parser.cc"
+#line 9173 "Parser/parser.cc"
       default: break;
     }
@@ -9442,5 +9401,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2888 "parser.yy"
+#line 2847 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/parser.h	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -262,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 156 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/Parser/parser.yy	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 22 14:30:56 2016
-// Update Count     : 1944
+// Last Modified On : Wed Aug 24 16:21:37 2016
+// Update Count     : 1962
 //
 
@@ -54,45 +54,4 @@
 #include "TypeData.h"
 #include "LinkageSpec.h"
-
-union DeclQualifiers {
-	unsigned int value;									// assume 32-bits
-	struct {
-		bool Extern : 1;
-		bool Static : 1;
-		bool Auto : 1;
-		bool Register : 1;
-		bool Inline : 1;
-		bool Fortran : 1;
-		bool Noreturn : 1;
-		bool Threadlocal : 1;
-		bool Extension : 1;
-		bool Lvalue : 1;
-		bool Const : 1;
-		bool Volatile : 1;
-		bool Restrict : 1;
-		bool Atomic : 1;
-	} qual;
-}; // DeclQualifiers
-DeclQualifiers declQualifiers = { 0 };
-
-union DeclType {
-	unsigned int value;									// assume 32-bits
-	struct {
-		bool Char : 1;
-		bool Bool : 1;
-		bool Short : 1;
-		bool Int : 1;
-		bool Float : 1;
-		bool Double : 1;
-		bool Long : 1;
-		bool Signed : 1;
-		bool Unsigned : 1;
-		bool Void : 1;
-		bool Complex : 1;
-		bool Imaginary : 1;
-		bool Valist : 1;
-	} type;
-}; // DeclType
-DeclType declTypes = { 0 };
 
 extern DeclarationNode * parseTree;
@@ -1328,5 +1287,5 @@
 	type_qualifier_name
 	| attribute
-	//{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
+		//{ $$ = DeclarationNode::newQualifier( DeclarationNode::Attribute ); }
 	;
 
@@ -1382,9 +1341,11 @@
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
 	| INLINE											// C99
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+		{ $$ = new DeclarationNode; $$->isInline = true; }
 	| FORTRAN											// C99
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
 	| NORETURN											// C11
-		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+		{ $$ = new DeclarationNode; $$->isNoreturn = true; }
 	| THREADLOCAL										// C11
 		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
@@ -2153,6 +2114,5 @@
 asm_name_opt:											// GCC
 	// empty
-	| ASM '(' string_literal_list ')' attribute_list_opt
-		{ delete $3; }
+	| ASM '(' string_literal_list ')' attribute_list_opt { delete $3; }	// FIX ME: unimplemented
 	;
 
@@ -2183,13 +2143,12 @@
 	// empty
 	| any_word
-	| any_word '(' comma_expression_opt ')'
-		{ delete $3; }
+	| any_word '(' comma_expression_opt ')'	{ delete $3; } // FIX ME: unimplemented
 	;
 
 any_word:												// GCC
-	identifier_or_type_name { delete $1; }
-	| storage_class { delete $1; }
-	| basic_type_name { delete $1; }
-	| type_qualifier { delete $1; }
+	identifier_or_type_name { delete $1; }				// FIX ME: unimplemented
+	| storage_class { delete $1; }						// FIX ME: unimplemented
+	| basic_type_name { delete $1; }					// FIX ME: unimplemented
+	| type_qualifier { delete $1; }						// FIX ME: unimplemented
 	;
 
Index: src/tests/.expect/declarationErrors.txt
===================================================================
--- src/tests/.expect/declarationErrors.txt	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/tests/.expect/declarationErrors.txt	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -1,16 +1,66 @@
 CFA Version 1.0.0 (debug)
-Error: invalid combination of storage classes in declaration of x9: static volatile const short int 
+Error: invalid combination of storage classes in declaration of x9: static const volatile short int 
 
-Error: invalid combination of storage classes in declaration of x18: static const volatile instance of struct __anonymous0
+Error: invalid combination of storage classes in declaration of x18: static const volatile instance of const volatile struct __anonymous0
   with members 
    with body 
 
 
-Error: invalid combination of storage classes in declaration of x19: static const volatile volatile instance of struct __anonymous1
+Error: duplicate qualifier volatile in declaration of x19: static const volatile instance of const volatile struct __anonymous1
   with members 
    with body 
 
 
-Error: invalid combination of storage classes in declaration of x28: static volatile const instance of type Int
+Error: invalid combination of storage classes in declaration of x28: static const volatile instance of type Int
+
+Error: duplicate qualifier const in declaration of f01: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f02: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f03: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f04: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f05: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier volatile in declaration of f06: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const in declaration of f07: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f08: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f09: static inline function
+  with no parameters 
+  returning const volatile int 
+
+
+Error: duplicate qualifier const, volatile in declaration of f09: static inline function
+  with no parameters 
+  returning const volatile int 
+
 
 make: *** [declarationErrors] Error 1
Index: src/tests/declarationErrors.c
===================================================================
--- src/tests/declarationErrors.c	(revision 2acf5fcd906a54378fddc29b0575320efe7c6e19)
+++ src/tests/declarationErrors.c	(revision c1c11129b7b459ededc97d8b5200227481c001a9)
@@ -10,10 +10,8 @@
 // Created On       : Wed Aug 17 08:23:43 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 17 08:27:15 2016
-// Update Count     : 2
+// Last Modified On : Thu Aug 25 18:16:40 2016
+// Update Count     : 5
 // 
 
-const short static int volatile x4;
-const static volatile short int x4;
 static short int volatile static const x9;				// duplicate static
 struct { int i; } const static volatile static x18;		// duplicate static
@@ -29,5 +27,8 @@
 volatile static const volatile inline int f06();		// duplicate volatile
 const static const volatile int inline f07();			// duplicate const
-volatile static const int inline volatile f08();		// duplicate volatile
+volatile static const int inline const volatile f08();		// duplicate volatile
+
+volatile static const int inline const volatile f09();		// duplicate volatile
+volatile static const int inline const volatile f09();		// duplicate volatile
 
 //Dummy main
