Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/DeclarationNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 20:49:31 2016
-// Update Count     : 164
+// Last Modified On : Sun Aug  7 08:01:55 2016
+// Update Count     : 165
 //
 
@@ -49,5 +49,6 @@
 	newnode->name = name;
 	newnode->storageClasses = storageClasses;
-	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+//PAB	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+	newnode->bitfieldWidth = bitfieldWidth;
 	newnode->hasEllipsis = hasEllipsis;
 	newnode->initializer = initializer;
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/ExpressionNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,13 +10,14 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 15:07:19 2016
-// Update Count     : 409
+// Last Modified On : Sun Aug  7 09:23:12 2016
+// Update Count     : 437
 //
 
 #include <cassert>
 #include <cctype>
+#include <climits>
+#include <cstdio>
 #include <algorithm>
 #include <sstream>
-#include <cstdio>
 
 #include "ParseNode.h"
@@ -37,4 +38,5 @@
 ExpressionNode::ExpressionNode( const ExpressionNode &other ) : ParseNode( other.name ), extension( other.extension ) {
 	if ( other.argName ) {
+		std::cout << "ExpressionNode" << std::endl;
 		argName = other.argName->clone();
 	} else {
@@ -83,60 +85,143 @@
 }
 
-// CommaExprNode *ExpressionNode::add_to_list( ExpressionNode *exp ) {
-// 	return new CommaExprNode( this, exp );
-// }
-
-//##############################################################################
-
-ConstantNode::ConstantNode( ConstantExpr *expr ) : expr( expr ) {
-} // ConstantNode::ConstantNode
-
-ConstantNode *ConstantNode::appendstr( const std::string *newValue ) {
-	assert( newValue != 0 );
-
-	string value = expr->get_constant()->get_value();
-
-	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
-	value.insert( value.length() - 1, newValue->substr( 1, newValue->length() - 2 ) );
-	expr->get_constant()->set_value( value );
-
-	delete newValue;									// allocated by lexer
-	return this;
-}
-
-void ConstantNode::printOneLine( std::ostream &os, int indent ) const {
-	// os << string( indent, ' ' );
-	// printDesignation( os );
-
-	// switch ( type ) {
-	//   case Integer:
-	//   case Float:
-	// 	os << value ;
-	// 	break;
-	//   case Character:
-	// 	os << "'" << value << "'";
-	// 	break;
-	//   case String:
-	// 	os << '"' << value << '"';
-	// 	break;
-	// } // switch
-
-	// os << ' ';
-}
-
-void ConstantNode::print( std::ostream &os, int indent ) const {
-	printOneLine( os, indent );
-	os << endl;
-}
-
-Expression *ConstantNode::build() const {
-	return expr->clone();
-}
-
-//##############################################################################
-
-VarRefNode::VarRefNode() : isLabel( false ) {}
-
-VarRefNode::VarRefNode( const string *name_, bool labelp ) : ExpressionNode( name_ ), isLabel( labelp ) {}
+//##############################################################################
+
+// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
+//
+//		prefix action constant action suffix
+//
+// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
+//
+//		constant BEGIN CONT ...
+//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
+//
+// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
+// type.
+
+static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
+
+static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
+static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
+static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
+static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
+static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
+static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
+
+ConstantNode *build_constantInteger( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
+		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
+	};
+	bool dec = true, Unsigned = false;					// decimal, unsigned constant
+	int size;											// 0 => int, 1 => long, 2 => long long
+	unsigned long long v;								// converted integral value
+	size_t last = str.length() - 1;						// last character of constant
+
+	if ( str[0] == '0' ) {								// octal/hex constant ?
+		dec = false;
+		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
+			sscanf( (char *)str.c_str(), "%llx", &v );
+			//printf( "%llx %llu\n", v, v );
+		} else {										// octal constant
+			sscanf( (char *)str.c_str(), "%llo", &v );
+			//printf( "%llo %llu\n", v, v );
+		} // if
+	} else {											// decimal constant ?
+		sscanf( (char *)str.c_str(), "%llu", &v );
+		//printf( "%llu %llu\n", v, v );
+	} // if
+
+	if ( v <= INT_MAX ) {								// signed int
+		size = 0;
+	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
+		size = 0;
+		Unsigned = true;								// unsigned
+	} else if ( v <= LONG_MAX ) {						// signed long int
+		size = 1;
+	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
+		size = 1;
+		Unsigned = true;								// unsigned long int
+	} else if ( v <= LLONG_MAX ) {						// signed long long int
+		size = 2;
+	} else {											// unsigned long long int
+		size = 2;
+		Unsigned = true;								// unsigned long long int
+	} // if
+
+	if ( checkU( str[last] ) ) {						// suffix 'u' ?
+		Unsigned = true;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
+			size = 1;
+			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
+				size = 2;
+			} // if
+		} // if
+	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
+		size = 1;
+		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'll' ?
+			size = 2;
+			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} else {
+			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
+				Unsigned = true;
+			} // if
+		} // if
+	} // if
+
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ) ) );
+} // build_constantInteger
+
+ConstantNode *build_constantFloat( std::string & str ) {
+	static const BasicType::Kind kind[2][3] = {
+		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
+		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
+	};
+
+	bool complx = false;								// real, complex
+	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
+	// floating-point constant has minimum of 2 characters: 1. or .1
+	size_t last = str.length() - 1;
+
+	if ( checkI( str[last] ) ) {						// imaginary ?
+		complx = true;
+		last -= 1;										// backup one character
+	} // if
+
+	if ( checkF( str[last] ) ) {						// float ?
+		size = 0;
+	} else if ( checkD( str[last] ) ) {					// double ?
+		size = 1;
+	} else if ( checkL( str[last] ) ) {					// long double ?
+		size = 2;
+	} // if
+	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
+		complx = true;
+	} // if
+
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ) ) );
+} // build_constantFloat
+
+ConstantNode *build_constantChar( std::string & str ) {
+	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ) ) );
+} // build_constantChar
+
+ConstantNode *build_constantStr( std::string & str ) {
+	// string should probably be a primitive type
+	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
+				new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
+											toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
+								   false, false );
+	return new ConstantNode( new ConstantExpr( Constant( at, str ) ) );
+} // build_constantStr
+
+//##############################################################################
+
+//Expression *build_varref( ExpressionNode expr ) {
+//	return new NameExpr( get_name(), maybeBuild<Expression>( get_argName() ) );
+//}
+
+VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( name ), isLabel( labelp ) {}
 
 VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {
@@ -171,6 +256,5 @@
 			double value;
 			if ( ss >> value ) {
-				// this is a floating point constant. It MUST be
-				// ".0" or ".1", otherwise the program is invalid
+				// this is a floating point constant. It MUST be ".0" or ".1", otherwise the program is invalid
 				if ( ! (var->get_name() == ".0" || var->get_name() == ".1") ) {
 					throw SemanticError( "invalid designator name: " + var->get_name() );
@@ -201,6 +285,5 @@
 
 	if ( isArrayIndex ) {
-		// need to traverse entire structure and change any instances of 0 or 1 to
-		// ConstantExpr
+		// need to traverse entire structure and change any instances of 0 or 1 to ConstantExpr
 		DesignatorFixer fixer;
 		ret = ret->acceptMutator( fixer );
@@ -240,5 +323,5 @@
 static const char *OperName[] = {
 	// diadic
-	"SizeOf", "AlignOf", "OffsetOf", "Attr", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
+	"SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?*?", "?/?", "?%?", "||", "&&",
 	"?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?",
 	"?=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",
@@ -249,10 +332,4 @@
 
 //##############################################################################
-
-CompositeExprNode::CompositeExprNode( Expression *expr ) : expr( expr ) {}
-CompositeExprNode::CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
-CompositeExprNode::~CompositeExprNode() { delete expr; }
-void CompositeExprNode::print( std::ostream &, int indent ) const { assert( false ); }
-void CompositeExprNode::printOneLine( std::ostream &, int indent ) const { assert( false ); }
 
 Expression *build_cast( TypeValueNode * arg, ExpressionNode *expr_node ) {
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/ParseNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,143 +10,10 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jul 24 02:17:01 2016
-// Update Count     : 90
+// Last Modified On : Sat Aug  6 08:26:11 2016
+// Update Count     : 93
 // 
 
-#include <climits>
 #include "ParseNode.h"
 using namespace std;
-
-// Difficult to separate extra parts of constants during lexing because actions are not allow in the middle of patterns:
-//
-//		prefix action constant action suffix
-//
-// Alternatively, breaking a pattern using BEGIN does not work if the following pattern can be empty:
-//
-//		constant BEGIN CONT ...
-//		<CONT>(...)? BEGIN 0 ... // possible empty suffix
-//
-// because the CONT rule is NOT triggered if the pattern is empty. Hence, constants are reparsed here to determine their
-// type.
-
-static Type::Qualifiers emptyQualifiers;				// no qualifiers on constants
-
-static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
-static inline bool checkL( char c ) { return c == 'l' || c == 'L'; }
-static inline bool checkF( char c ) { return c == 'f' || c == 'F'; }
-static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
-static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
-static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
-
-ConstantNode *makeConstantInteger( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt },
-		{ BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt },
-	};
-	bool dec = true, Unsigned = false;					// decimal, unsigned constant
-	int size;											// 0 => int, 1 => long, 2 => long long
-	unsigned long long v;								// converted integral value
-	size_t last = str.length() - 1;						// last character of constant
-
-	if ( str[0] == '0' ) {								// octal/hex constant ?
-		dec = false;
-		if ( last != 0 && checkX( str[1] ) ) {			// hex constant ?
-			sscanf( (char *)str.c_str(), "%llx", &v );
-			//printf( "%llx %llu\n", v, v );
-		} else {										// octal constant
-			sscanf( (char *)str.c_str(), "%llo", &v );
-			//printf( "%llo %llu\n", v, v );
-		} // if
-	} else {											// decimal constant ?
-		sscanf( (char *)str.c_str(), "%llu", &v );
-		//printf( "%llu %llu\n", v, v );
-	} // if
-
-	if ( v <= INT_MAX ) {								// signed int
-		size = 0;
-	} else if ( v <= UINT_MAX && ! dec ) {				// unsigned int
-		size = 0;
-		Unsigned = true;								// unsigned
-	} else if ( v <= LONG_MAX ) {						// signed long int
-		size = 1;
-	} else if ( v <= ULONG_MAX && ( ! dec || LONG_MAX == LLONG_MAX ) ) { // signed long int
-		size = 1;
-		Unsigned = true;								// unsigned long int
-	} else if ( v <= LLONG_MAX ) {						// signed long long int
-		size = 2;
-	} else {											// unsigned long long int
-		size = 2;
-		Unsigned = true;								// unsigned long long int
-	} // if
-
-	if ( checkU( str[last] ) ) {						// suffix 'u' ?
-		Unsigned = true;
-		if ( last > 0 && checkL( str[last - 1] ) ) {	// suffix 'l' ?
-			size = 1;
-			if ( last > 1 && checkL( str[last - 2] ) ) { // suffix 'll' ?
-				size = 2;
-			} // if
-		} // if
-	} else if ( checkL( str[ last ] ) ) {				// suffix 'l' ?
-		size = 1;
-		if ( last > 0 && checkL( str[last - 1] ) ) { // suffix 'll' ?
-			size = 2;
-			if ( last > 1 && checkU( str[last - 2] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} else {
-			if ( last > 0 && checkU( str[last - 1] ) ) { // suffix 'u' ?
-				Unsigned = true;
-			} // if
-		} // if
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str ), nullptr ) );
-} // makeConstantInteger
-
-ConstantNode *makeConstantFloat( std::string & str ) {
-	static const BasicType::Kind kind[2][3] = {
-		{ BasicType::Float, BasicType::Double, BasicType::LongDouble },
-		{ BasicType::FloatComplex, BasicType::DoubleComplex, BasicType::LongDoubleComplex },
-	};
-
-	bool complx = false;								// real, complex
-	int size = 1;										// 0 => float, 1 => double (default), 2 => long double
-	// floating-point constant has minimum of 2 characters: 1. or .1
-	size_t last = str.length() - 1;
-
-	if ( checkI( str[last] ) ) {						// imaginary ?
-		complx = true;
-		last -= 1;										// backup one character
-	} // if
-
-	if ( checkF( str[last] ) ) {						// float ?
-		size = 0;
-	} else if ( checkD( str[last] ) ) {					// double ?
-		size = 1;
-	} else if ( checkL( str[last] ) ) {					// long double ?
-		size = 2;
-	} // if
-	if ( ! complx && checkI( str[last - 1] ) ) {		// imaginary ?
-		complx = true;
-	} // if
-
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str ), nullptr ) );
-} // makeConstantFloat
-
-ConstantNode *makeConstantChar( std::string & str ) {
-	return new ConstantNode( new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str ), nullptr ) );
-} // makeConstantChar
-
-ConstantNode *makeConstantStr( std::string & str ) {
-	// string should probably be a primitive type
-	ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( emptyQualifiers, BasicType::Char ),
-								   new ConstantExpr(
-									   Constant( new BasicType( emptyQualifiers, BasicType::UnsignedInt ),
-												 toString( str.size()+1-2 ) ) ),  // +1 for '\0' and -2 for '"'
-								   false, false );
-	return new ConstantNode( new ConstantExpr( Constant( at, str ), nullptr ) );
-} // makeConstantStr
-
 
 // Builder
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/ParseNode.h	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 13:40:15 2016
-// Update Count     : 307
+// Last Modified On : Sun Aug  7 09:37:16 2016
+// Update Count     : 333
 //
 
@@ -30,7 +30,4 @@
 #include "SynTree/Label.h"
 
-class ExpressionNode;
-class CompositeExprNode;
-class CommaExprNode;
 class StatementNode;
 class CompoundStmtNode;
@@ -56,6 +53,6 @@
 	void set_name( const std::string &newValue ) { name = newValue; }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printList( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printList( std::ostream &os, int indent = 0 ) const;
 
 	ParseNode &operator,( ParseNode &);
@@ -68,4 +65,6 @@
 ParseNode *mkList( ParseNode & );
 
+//##############################################################################
+
 class ExpressionNode : public ParseNode {
   public:
@@ -73,9 +72,7 @@
 	ExpressionNode( const std::string * );
 	ExpressionNode( const ExpressionNode &other );
-	virtual ~ExpressionNode() { delete argName; } // cannot delete argName because it might be referenced elsewhere
+	virtual ~ExpressionNode() { delete argName; }
 
 	virtual ExpressionNode *clone() const = 0;
-
-	// virtual CommaExprNode *add_to_list( ExpressionNode * );
 
 	ExpressionNode *get_argName() const { return argName; }
@@ -85,10 +82,10 @@
 	ExpressionNode *set_extension( bool exten ) { extension = exten; return this; }
 
-	virtual void print( std::ostream &, int indent = 0) const = 0;
-	virtual void printOneLine( std::ostream &, int indent = 0) const = 0;
+	virtual void print( std::ostream &os, int indent = 0) const = 0;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const = 0;
 
 	virtual Expression *build() const = 0;
   protected:
-	void printDesignation ( std::ostream &, int indent = 0) const;
+	void printDesignation ( std::ostream &os, int indent = 0) const;
   private:
 	ExpressionNode *argName = 0;
@@ -109,4 +106,6 @@
 };
 
+//##############################################################################
+
 // NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
 class NullExprNode : public ExpressionNode {
@@ -116,37 +115,39 @@
 	virtual NullExprNode *clone() const;
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	virtual Expression *build() const;
 };
 
+//##############################################################################
+
 class ConstantNode : public ExpressionNode {
   public:
-	enum Type { Integer, Float, Character, String };
-
-	ConstantNode( ConstantExpr * );
-	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {};
-	~ConstantNode() { delete expr; }
-
-	virtual ConstantNode *clone() const { return new ConstantNode( *this ); }
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-
-	ConstantNode *appendstr( const std::string *newValue );
-
-	Expression *build() const;
+	ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
+	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
+	virtual ~ConstantNode() {}
+
+	virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
+
+	ConstantExpr *get_expr() const { return expr; }
+
+	virtual void print( std::ostream &os, int indent = 0 ) const {}
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
+
+	Expression *build() const { return expr; }
   private:
 	ConstantExpr *expr;
 };
 
-ConstantNode *makeConstantInteger( std::string & );
-ConstantNode *makeConstantFloat( std::string & );
-ConstantNode *makeConstantChar( std::string & );
-ConstantNode *makeConstantStr( std::string & );
+ConstantNode *build_constantInteger( std::string &str );
+ConstantNode *build_constantFloat( std::string &str );
+ConstantNode *build_constantChar( std::string &str );
+ConstantNode *build_constantStr( std::string &str );
+
+//##############################################################################
 
 class VarRefNode : public ExpressionNode {
   public:
-	VarRefNode();
 	VarRefNode( const std::string *, bool isLabel = false );
 	VarRefNode( const VarRefNode &other );
@@ -156,9 +157,11 @@
 	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	bool isLabel;
 };
+
+//##############################################################################
 
 class DesignatorNode : public ExpressionNode {
@@ -170,9 +173,11 @@
 	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	bool isArrayIndex;
 };
+
+//##############################################################################
 
 class TypeValueNode : public ExpressionNode {
@@ -187,13 +192,31 @@
 	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
   private:
 	DeclarationNode *decl;
+};
+
+//##############################################################################
+
+class CompositeExprNode : public ExpressionNode {
+  public:
+	CompositeExprNode( Expression *expr ) : expr( expr ) {}
+	CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
+	virtual ~CompositeExprNode() {}
+
+	CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
+
+	Expression *build() const { return expr; }
+
+	void print( std::ostream &os, int indent = 0 ) const {}
+	void printOneLine( std::ostream &os, int indent = 0 ) const {}
+  private:
+	Expression *expr;
 };
 
 enum class OperKinds {
 	// diadic
-	SizeOf, AlignOf, OffsetOf, Attr, Plus, Minus, Mul, Div, Mod, Or, And,
+	SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,
 	BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq,
 	Assign, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,
@@ -224,18 +247,5 @@
 Expression *build_range( ExpressionNode * low, ExpressionNode *high );
 
-class CompositeExprNode : public ExpressionNode {
-  public:
-	CompositeExprNode( Expression *expr );
-	CompositeExprNode( const CompositeExprNode &other );
-	virtual ~CompositeExprNode();
-
-	virtual CompositeExprNode *clone() const { return new CompositeExprNode( *this ); }
-	virtual Expression *build() const { return expr->clone(); }
-
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
-  private:
-	Expression *expr;
-};
+//##############################################################################
 
 class AsmExprNode : public ExpressionNode {
@@ -248,6 +258,6 @@
 	virtual Expression *build() const;
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	ExpressionNode *get_inout() const { return inout; };
@@ -265,4 +275,6 @@
 };
 
+//##############################################################################
+
 class LabelNode : public ExpressionNode {
   public:
@@ -270,6 +282,6 @@
 	virtual LabelNode *clone() const { return new LabelNode( *this ); }
 
-	virtual void print( std::ostream &, int indent = 0) const;
-	virtual void printOneLine( std::ostream &, int indent = 0) const;
+	virtual void print( std::ostream &os, int indent = 0) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0) const;
 
 	const std::list< Label > &get_labels() const { return labels; };
@@ -278,4 +290,6 @@
 	std::list< Label > labels;
 };
+
+//##############################################################################
 
 class ForCtlExprNode : public ExpressionNode {
@@ -292,6 +306,6 @@
 	virtual Expression *build() const;
 
-	virtual void print( std::ostream &, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &, int indent = 0 ) const;
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
   private:
 	StatementNode *init;
@@ -299,4 +313,6 @@
 	ExpressionNode *change;
 };
+
+//##############################################################################
 
 class ValofExprNode : public ExpressionNode {
@@ -310,6 +326,6 @@
 
 	StatementNode *get_body() const { return body; }
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream &os, int indent = 0 ) const;
 	Expression *build() const;
 
@@ -317,4 +333,6 @@
 	StatementNode *body;
 };
+
+//##############################################################################
 
 class TypeData;
@@ -391,6 +409,6 @@
 
 	DeclarationNode *clone() const;
-	void print( std::ostream &, int indent = 0 ) const;
-	void printList( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printList( std::ostream &os, int indent = 0 ) const;
 
 	Declaration *build() const;
@@ -426,4 +444,6 @@
 }; // DeclarationNode
 
+//##############################################################################
+
 class StatementNode : public ParseNode {
   public:
@@ -465,5 +485,5 @@
 	StatementNode *append_last_case( StatementNode * );
 
-	void print( std::ostream &, int indent = 0) const;
+	void print( std::ostream &os, int indent = 0) const;
 	virtual StatementNode *clone() const;
 	virtual Statement *build() const;
@@ -479,4 +499,6 @@
 }; // StatementNode
 
+//##############################################################################
+
 class CompoundStmtNode : public StatementNode {
   public:
@@ -488,9 +510,11 @@
 	void add_statement( StatementNode * );
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	virtual Statement *build() const;
   private:
 	StatementNode *first, *last;
 };
+
+//##############################################################################
 
 class AsmStmtNode : public StatementNode {
@@ -499,5 +523,5 @@
 	~AsmStmtNode();
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	Statement *build() const;
   private:
@@ -509,4 +533,6 @@
 };
 
+//##############################################################################
+
 class InitializerNode : public ParseNode {
   public:
@@ -525,5 +551,5 @@
 	InitializerNode *next_init() const { return kids; }
 
-	void print( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
 	void printOneLine( std::ostream & ) const;
 
@@ -537,4 +563,6 @@
 };
 
+//##############################################################################
+
 class CompoundLiteralNode : public ExpressionNode {
   public:
@@ -551,6 +579,6 @@
 	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
 
-	void print( std::ostream &, int indent = 0 ) const;
-	void printOneLine( std::ostream &, int indent = 0 ) const;
+	void print( std::ostream &os, int indent = 0 ) const;
+	void printOneLine( std::ostream &os, int indent = 0 ) const;
 
 	virtual Expression *build() const;
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/StatementNode.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:21:02 2016
-// Update Count     : 133
+// Last Modified On : Sun Aug  7 06:42:38 2016
+// Update Count     : 135
 //
 
@@ -106,10 +106,4 @@
 	return this;
 }
-
-// StatementNode *StatementNode::add_controlexp( ExpressionNode *e ) {
-// 	if ( control && e )
-// 		control->add_to_list( e ); // xxx - check this
-// 	return this;
-// }
 
 StatementNode *StatementNode::append_block( StatementNode *stmt ) {
@@ -176,5 +170,5 @@
 		} // if
 		if ( block ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Branches of execution: " << endl;
+			os << string( indent + ParseNode::indent_by, ' ' ) << "Cases: " << endl;
 			block->printList( os, indent + 2 * ParseNode::indent_by );
 		} // if
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/TypeData.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 13 18:03:29 2016
-// Update Count     : 56
+// Last Modified On : Sun Aug  7 07:51:48 2016
+// Update Count     : 58
 //
 
@@ -182,5 +182,6 @@
 		break;
 	  case Array:
-		newtype->array->dimension = maybeClone( array->dimension );
+//PAB		newtype->array->dimension = maybeClone( array->dimension );
+		newtype->array->dimension = array->dimension;
 		newtype->array->isVarLen = array->isVarLen;
 		newtype->array->isStatic = array->isStatic;
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/parser.cc	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -89,7 +89,12 @@
 TypedefTable typedefTable;
 
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
+
 
 /* Line 268 of yacc.c  */
-#line 94 "Parser/parser.cc"
+#line 99 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -342,5 +347,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
@@ -360,5 +365,5 @@
 
 /* Line 293 of yacc.c  */
-#line 363 "Parser/parser.cc"
+#line 368 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -372,5 +377,5 @@
 
 /* Line 343 of yacc.c  */
-#line 375 "Parser/parser.cc"
+#line 380 "Parser/parser.cc"
 
 #ifdef short
@@ -1016,80 +1021,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   291,   291,   297,   306,   307,   308,   312,   313,   314,
-     318,   319,   323,   324,   328,   329,   333,   334,   340,   342,
-     344,   346,   351,   352,   358,   362,   364,   365,   367,   368,
-     370,   372,   374,   383,   384,   390,   391,   392,   397,   399,
-     404,   405,   409,   413,   415,   417,   419,   424,   427,   429,
-     431,   436,   449,   451,   453,   455,   457,   459,   461,   463,
-     465,   467,   469,   476,   477,   483,   484,   485,   486,   490,
-     491,   493,   498,   499,   501,   503,   508,   509,   511,   516,
-     517,   519,   524,   525,   527,   529,   531,   536,   537,   539,
-     544,   545,   550,   551,   556,   557,   562,   563,   568,   569,
-     574,   575,   578,   580,   585,   590,   591,   593,   599,   600,
-     604,   605,   606,   607,   608,   609,   610,   611,   612,   613,
-     614,   620,   622,   624,   626,   631,   632,   637,   638,   644,
-     645,   651,   652,   653,   654,   655,   656,   657,   658,   659,
-     669,   676,   678,   688,   689,   694,   696,   702,   704,   708,
-     709,   714,   719,   722,   724,   726,   736,   738,   749,   750,
-     752,   756,   758,   762,   763,   768,   769,   773,   778,   779,
-     783,   785,   791,   792,   796,   798,   800,   802,   808,   809,
-     813,   815,   820,   822,   824,   829,   831,   836,   838,   842,
-     845,   849,   852,   856,   858,   862,   864,   871,   873,   875,
-     884,   886,   888,   890,   892,   897,   899,   901,   903,   908,
-     921,   922,   927,   929,   934,   938,   940,   942,   944,   946,
-     952,   953,   959,   960,   964,   965,   970,   972,   978,   979,
-     981,   986,   988,   995,   997,  1001,  1002,  1007,  1009,  1013,
-    1014,  1018,  1020,  1024,  1025,  1029,  1030,  1034,  1035,  1050,
-    1051,  1052,  1053,  1054,  1058,  1063,  1070,  1080,  1085,  1090,
-    1098,  1103,  1108,  1113,  1118,  1126,  1148,  1153,  1160,  1162,
-    1169,  1174,  1179,  1190,  1195,  1200,  1205,  1210,  1219,  1224,
-    1232,  1233,  1234,  1235,  1241,  1246,  1254,  1255,  1256,  1257,
-    1261,  1262,  1263,  1264,  1269,  1270,  1279,  1280,  1285,  1286,
-    1291,  1293,  1295,  1297,  1299,  1302,  1301,  1313,  1314,  1316,
-    1326,  1327,  1332,  1336,  1338,  1340,  1342,  1344,  1346,  1348,
-    1350,  1355,  1357,  1359,  1361,  1363,  1365,  1367,  1369,  1371,
-    1373,  1375,  1377,  1379,  1385,  1386,  1388,  1390,  1392,  1397,
-    1398,  1404,  1405,  1407,  1409,  1414,  1416,  1418,  1420,  1425,
-    1426,  1428,  1430,  1435,  1436,  1438,  1443,  1444,  1446,  1448,
-    1453,  1455,  1457,  1462,  1463,  1467,  1469,  1475,  1474,  1478,
-    1480,  1485,  1487,  1493,  1494,  1499,  1500,  1502,  1503,  1512,
-    1513,  1515,  1517,  1522,  1524,  1530,  1531,  1533,  1536,  1539,
-    1544,  1545,  1550,  1555,  1559,  1561,  1567,  1566,  1573,  1575,
-    1581,  1582,  1590,  1591,  1595,  1596,  1597,  1599,  1601,  1608,
-    1609,  1611,  1613,  1618,  1619,  1625,  1626,  1630,  1631,  1636,
-    1637,  1638,  1640,  1648,  1649,  1651,  1654,  1656,  1660,  1661,
-    1662,  1664,  1666,  1670,  1675,  1683,  1684,  1693,  1695,  1700,
-    1701,  1702,  1706,  1707,  1708,  1712,  1713,  1714,  1718,  1719,
-    1720,  1725,  1726,  1727,  1728,  1734,  1735,  1737,  1742,  1743,
-    1748,  1749,  1750,  1751,  1752,  1767,  1768,  1773,  1774,  1782,
-    1784,  1786,  1789,  1791,  1793,  1816,  1817,  1819,  1821,  1826,
-    1827,  1829,  1834,  1839,  1840,  1846,  1845,  1849,  1853,  1855,
-    1857,  1863,  1864,  1869,  1874,  1876,  1881,  1883,  1884,  1886,
-    1891,  1893,  1895,  1900,  1902,  1907,  1912,  1920,  1926,  1925,
-    1939,  1940,  1945,  1946,  1950,  1955,  1960,  1968,  1973,  1984,
-    1985,  1996,  1997,  2003,  2004,  2008,  2009,  2010,  2013,  2012,
-    2023,  2032,  2038,  2044,  2053,  2059,  2065,  2071,  2077,  2085,
-    2091,  2099,  2105,  2114,  2115,  2116,  2120,  2124,  2126,  2131,
-    2132,  2136,  2137,  2142,  2148,  2149,  2152,  2154,  2155,  2159,
-    2160,  2161,  2162,  2196,  2198,  2199,  2201,  2206,  2211,  2216,
-    2218,  2220,  2225,  2227,  2229,  2231,  2236,  2238,  2247,  2249,
-    2250,  2255,  2257,  2259,  2264,  2266,  2268,  2273,  2275,  2277,
-    2286,  2287,  2288,  2292,  2294,  2296,  2301,  2303,  2305,  2310,
-    2312,  2314,  2329,  2331,  2332,  2334,  2339,  2340,  2345,  2347,
-    2349,  2354,  2356,  2358,  2360,  2365,  2367,  2369,  2379,  2381,
-    2382,  2384,  2389,  2391,  2393,  2398,  2400,  2402,  2404,  2409,
-    2411,  2413,  2444,  2446,  2447,  2449,  2454,  2459,  2467,  2469,
-    2471,  2476,  2478,  2483,  2485,  2499,  2500,  2502,  2507,  2509,
-    2511,  2513,  2515,  2520,  2521,  2523,  2525,  2530,  2532,  2534,
-    2540,  2542,  2544,  2548,  2550,  2552,  2554,  2568,  2569,  2571,
-    2576,  2578,  2580,  2582,  2584,  2589,  2590,  2592,  2594,  2599,
-    2601,  2603,  2609,  2610,  2612,  2621,  2624,  2626,  2629,  2631,
-    2633,  2646,  2647,  2649,  2654,  2656,  2658,  2660,  2662,  2667,
-    2668,  2670,  2672,  2677,  2679,  2687,  2688,  2689,  2694,  2695,
-    2699,  2701,  2703,  2705,  2707,  2709,  2716,  2718,  2720,  2722,
-    2724,  2726,  2728,  2730,  2732,  2734,  2739,  2741,  2743,  2748,
-    2774,  2775,  2777,  2781,  2782,  2786,  2788,  2790,  2792,  2794,
-    2796,  2803,  2805,  2807,  2809,  2811,  2813,  2818,  2823,  2825,
-    2827,  2845,  2847,  2852,  2853
+       0,   296,   296,   302,   311,   312,   313,   317,   318,   319,
+     323,   324,   328,   329,   333,   334,   338,   339,   350,   352,
+     354,   356,   361,   362,   368,   372,   374,   375,   377,   378,
+     380,   382,   384,   393,   394,   400,   401,   402,   407,   409,
+     414,   415,   419,   423,   425,   427,   429,   434,   437,   439,
+     441,   446,   459,   461,   463,   465,   467,   469,   471,   473,
+     475,   477,   479,   486,   487,   493,   494,   495,   496,   500,
+     501,   503,   508,   509,   511,   513,   518,   519,   521,   526,
+     527,   529,   534,   535,   537,   539,   541,   546,   547,   549,
+     554,   555,   560,   561,   566,   567,   572,   573,   578,   579,
+     584,   585,   588,   590,   595,   600,   601,   603,   609,   610,
+     614,   615,   616,   617,   618,   619,   620,   621,   622,   623,
+     624,   630,   632,   634,   636,   641,   642,   647,   648,   654,
+     655,   661,   662,   663,   664,   665,   666,   667,   668,   669,
+     679,   686,   688,   698,   699,   704,   706,   712,   714,   718,
+     719,   724,   729,   732,   734,   736,   746,   748,   759,   760,
+     762,   766,   768,   772,   773,   778,   779,   783,   788,   789,
+     793,   795,   801,   802,   806,   808,   810,   812,   818,   819,
+     823,   825,   830,   832,   834,   839,   841,   846,   848,   852,
+     855,   859,   862,   866,   868,   872,   874,   881,   883,   885,
+     894,   896,   898,   900,   902,   907,   909,   911,   913,   918,
+     931,   932,   937,   939,   944,   948,   950,   952,   954,   956,
+     962,   963,   969,   970,   974,   975,   980,   982,   988,   989,
+     991,   996,   998,  1005,  1007,  1011,  1012,  1017,  1019,  1023,
+    1024,  1028,  1030,  1034,  1035,  1039,  1040,  1044,  1045,  1060,
+    1061,  1062,  1063,  1064,  1068,  1073,  1080,  1090,  1095,  1100,
+    1108,  1113,  1118,  1123,  1128,  1136,  1158,  1163,  1170,  1172,
+    1179,  1184,  1189,  1200,  1205,  1210,  1215,  1220,  1229,  1234,
+    1242,  1243,  1244,  1245,  1251,  1256,  1264,  1265,  1266,  1267,
+    1271,  1272,  1273,  1274,  1279,  1280,  1289,  1290,  1295,  1296,
+    1301,  1303,  1305,  1307,  1309,  1312,  1311,  1323,  1324,  1326,
+    1336,  1337,  1342,  1346,  1348,  1350,  1352,  1354,  1356,  1358,
+    1360,  1365,  1367,  1369,  1371,  1373,  1375,  1377,  1379,  1381,
+    1383,  1385,  1387,  1389,  1395,  1396,  1398,  1400,  1402,  1407,
+    1408,  1414,  1415,  1417,  1419,  1424,  1426,  1428,  1430,  1435,
+    1436,  1438,  1440,  1445,  1446,  1448,  1453,  1454,  1456,  1458,
+    1463,  1465,  1467,  1472,  1473,  1477,  1479,  1485,  1484,  1488,
+    1490,  1495,  1497,  1503,  1504,  1509,  1510,  1512,  1513,  1522,
+    1523,  1525,  1527,  1532,  1534,  1540,  1541,  1543,  1546,  1549,
+    1554,  1555,  1560,  1565,  1569,  1571,  1577,  1576,  1583,  1585,
+    1591,  1592,  1600,  1601,  1605,  1606,  1607,  1609,  1611,  1618,
+    1619,  1621,  1623,  1628,  1629,  1635,  1636,  1640,  1641,  1646,
+    1647,  1648,  1650,  1658,  1659,  1661,  1664,  1666,  1670,  1671,
+    1672,  1674,  1676,  1680,  1685,  1693,  1694,  1703,  1705,  1710,
+    1711,  1712,  1716,  1717,  1718,  1722,  1723,  1724,  1728,  1729,
+    1730,  1735,  1736,  1737,  1738,  1744,  1745,  1747,  1752,  1753,
+    1758,  1759,  1760,  1761,  1762,  1777,  1778,  1783,  1784,  1792,
+    1794,  1796,  1799,  1801,  1803,  1826,  1827,  1829,  1831,  1836,
+    1837,  1839,  1844,  1849,  1850,  1856,  1855,  1859,  1863,  1865,
+    1867,  1873,  1874,  1879,  1884,  1886,  1891,  1893,  1894,  1896,
+    1901,  1903,  1905,  1910,  1912,  1917,  1922,  1930,  1936,  1935,
+    1949,  1950,  1955,  1956,  1960,  1965,  1970,  1978,  1983,  1994,
+    1995,  2006,  2007,  2013,  2014,  2018,  2019,  2020,  2023,  2022,
+    2033,  2042,  2048,  2054,  2063,  2069,  2075,  2081,  2087,  2095,
+    2101,  2109,  2115,  2124,  2125,  2126,  2130,  2134,  2136,  2141,
+    2142,  2146,  2147,  2152,  2158,  2159,  2162,  2164,  2165,  2169,
+    2170,  2171,  2172,  2206,  2208,  2209,  2211,  2216,  2221,  2226,
+    2228,  2230,  2235,  2237,  2239,  2241,  2246,  2248,  2257,  2259,
+    2260,  2265,  2267,  2269,  2274,  2276,  2278,  2283,  2285,  2287,
+    2296,  2297,  2298,  2302,  2304,  2306,  2311,  2313,  2315,  2320,
+    2322,  2324,  2339,  2341,  2342,  2344,  2349,  2350,  2355,  2357,
+    2359,  2364,  2366,  2368,  2370,  2375,  2377,  2379,  2389,  2391,
+    2392,  2394,  2399,  2401,  2403,  2408,  2410,  2412,  2414,  2419,
+    2421,  2423,  2454,  2456,  2457,  2459,  2464,  2469,  2477,  2479,
+    2481,  2486,  2488,  2493,  2495,  2509,  2510,  2512,  2517,  2519,
+    2521,  2523,  2525,  2530,  2531,  2533,  2535,  2540,  2542,  2544,
+    2550,  2552,  2554,  2558,  2560,  2562,  2564,  2578,  2579,  2581,
+    2586,  2588,  2590,  2592,  2594,  2599,  2600,  2602,  2604,  2609,
+    2611,  2613,  2619,  2620,  2622,  2631,  2634,  2636,  2639,  2641,
+    2643,  2656,  2657,  2659,  2664,  2666,  2668,  2670,  2672,  2677,
+    2678,  2680,  2682,  2687,  2689,  2697,  2698,  2699,  2704,  2705,
+    2709,  2711,  2713,  2715,  2717,  2719,  2726,  2728,  2730,  2732,
+    2734,  2736,  2738,  2740,  2742,  2744,  2749,  2751,  2753,  2758,
+    2784,  2785,  2787,  2791,  2792,  2796,  2798,  2800,  2802,  2804,
+    2806,  2813,  2815,  2817,  2819,  2821,  2823,  2828,  2833,  2835,
+    2837,  2855,  2857,  2862,  2863
 };
 #endif
@@ -4992,5 +4997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 291 "parser.yy"
+#line 296 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5001,5 +5006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 297 "parser.yy"
+#line 302 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5010,6 +5015,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
-    { (yyval.constant) = makeConstantInteger( *(yyvsp[(1) - (1)].tok) ); }
+#line 311 "parser.yy"
+    { (yyval.constant) = build_constantInteger( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5017,6 +5022,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
-    { (yyval.constant) = makeConstantFloat( *(yyvsp[(1) - (1)].tok) ); }
+#line 312 "parser.yy"
+    { (yyval.constant) = build_constantFloat( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5024,6 +5029,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 308 "parser.yy"
-    { (yyval.constant) = makeConstantChar( *(yyvsp[(1) - (1)].tok) ); }
+#line 313 "parser.yy"
+    { (yyval.constant) = build_constantChar( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5031,6 +5036,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 333 "parser.yy"
-    { (yyval.constant) = makeConstantStr( *(yyvsp[(1) - (1)].tok) ); }
+#line 338 "parser.yy"
+    { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -5038,6 +5043,10 @@
 
 /* Line 1806 of yacc.c  */
-#line 334 "parser.yy"
-    { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
+#line 340 "parser.yy"
+    {
+			appendStr( (yyvsp[(1) - (2)].constant)->get_expr()->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
+			delete (yyvsp[(2) - (2)].tok);									// allocated by lexer
+			(yyval.constant) = (yyvsp[(1) - (2)].constant);
+		}
     break;
 
@@ -5045,5 +5054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 341 "parser.yy"
+#line 351 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5052,5 +5061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 343 "parser.yy"
+#line 353 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5059,5 +5068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 345 "parser.yy"
+#line 355 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5066,5 +5075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 347 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5073,5 +5082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 357 "parser.yy"
+#line 367 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5080,5 +5089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 359 "parser.yy"
+#line 369 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5087,5 +5096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 363 "parser.yy"
+#line 373 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5094,5 +5103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 366 "parser.yy"
+#line 376 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5101,5 +5110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 369 "parser.yy"
+#line 379 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5108,5 +5117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 371 "parser.yy"
+#line 381 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5115,5 +5124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 373 "parser.yy"
+#line 383 "parser.yy"
     { (yyval.en) = new CompoundLiteralNode( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ); }
     break;
@@ -5122,5 +5131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 375 "parser.yy"
+#line 385 "parser.yy"
     {
 			Token fn;
@@ -5133,5 +5142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 395 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5140,5 +5149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 390 "parser.yy"
+#line 400 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5147,5 +5156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
+#line 403 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5154,5 +5163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 408 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5161,5 +5170,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
+#line 410 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( (yyvsp[(5) - (9)].en) ) ) ) ); }
     break;
@@ -5168,5 +5177,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 405 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5175,5 +5184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 410 "parser.yy"
+#line 420 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5182,5 +5191,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 424 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5189,5 +5198,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
+#line 426 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_fieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5196,5 +5205,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 428 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(3) - (3)].en), new VarRefNode( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5203,5 +5212,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
+#line 430 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_pfieldSel( (yyvsp[(5) - (7)].en), new VarRefNode( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5210,5 +5219,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 438 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5217,5 +5226,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 440 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5224,5 +5233,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 442 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5231,5 +5240,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 437 "parser.yy"
+#line 447 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5249,5 +5258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
+#line 460 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5256,5 +5265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
+#line 462 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5263,5 +5272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
+#line 464 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5270,5 +5279,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+#line 466 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_sizeOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5277,5 +5286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
+#line 468 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_sizeOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
@@ -5284,5 +5293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
+#line 470 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_offsetOf( new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5291,5 +5300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+#line 472 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ) ); }
     break;
@@ -5298,5 +5307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 464 "parser.yy"
+#line 474 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
@@ -5305,5 +5314,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 476 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_attr( new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5312,5 +5321,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
+#line 478 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_alignOf( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5319,5 +5328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 470 "parser.yy"
+#line 480 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_alignOf( new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ) ); }
     break;
@@ -5326,5 +5335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 476 "parser.yy"
+#line 486 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5333,5 +5342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 477 "parser.yy"
+#line 487 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5340,5 +5349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 483 "parser.yy"
+#line 493 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5347,5 +5356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 484 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5354,5 +5363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 495 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5361,5 +5370,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 486 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5368,5 +5377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 492 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5375,5 +5384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 494 "parser.yy"
+#line 504 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_cast( new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5382,5 +5391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 500 "parser.yy"
+#line 510 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5389,5 +5398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 502 "parser.yy"
+#line 512 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5396,5 +5405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 504 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5403,5 +5412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 510 "parser.yy"
+#line 520 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5410,5 +5419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 512 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5417,5 +5426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
+#line 528 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5424,5 +5433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 520 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5431,5 +5440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 526 "parser.yy"
+#line 536 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5438,5 +5447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 528 "parser.yy"
+#line 538 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5445,5 +5454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 530 "parser.yy"
+#line 540 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5452,5 +5461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 532 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5459,5 +5468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 538 "parser.yy"
+#line 548 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5466,5 +5475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 540 "parser.yy"
+#line 550 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5473,5 +5482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 546 "parser.yy"
+#line 556 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5480,5 +5489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 552 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5487,5 +5496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 558 "parser.yy"
+#line 568 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5494,5 +5503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 564 "parser.yy"
+#line 574 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5501,5 +5510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 570 "parser.yy"
+#line 580 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5508,5 +5517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 576 "parser.yy"
+#line 586 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5515,5 +5524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 579 "parser.yy"
+#line 589 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5522,5 +5531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 581 "parser.yy"
+#line 591 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5529,5 +5538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 592 "parser.yy"
+#line 602 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5536,5 +5545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 594 "parser.yy"
+#line 604 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5543,5 +5552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5550,5 +5559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 604 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5557,5 +5566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5564,5 +5573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 606 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5571,5 +5580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
+#line 617 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5578,5 +5587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 618 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5585,5 +5594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+#line 619 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5592,5 +5601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
+#line 620 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5599,5 +5608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 621 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5606,5 +5615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 622 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5613,5 +5622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 623 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5620,5 +5629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 624 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5627,5 +5636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 621 "parser.yy"
+#line 631 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_tuple() ); }
     break;
@@ -5634,5 +5643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 623 "parser.yy"
+#line 633 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
@@ -5641,5 +5650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 625 "parser.yy"
+#line 635 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5648,5 +5657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 637 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5655,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 633 "parser.yy"
+#line 643 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5662,5 +5671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 639 "parser.yy"
+#line 649 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5669,5 +5678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 644 "parser.yy"
+#line 654 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5676,5 +5685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 653 "parser.yy"
+#line 663 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5683,5 +5692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 660 "parser.yy"
+#line 670 "parser.yy"
     {
 			Token fn;
@@ -5694,5 +5703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 670 "parser.yy"
+#line 680 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5703,5 +5712,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 677 "parser.yy"
+#line 687 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5710,5 +5719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 684 "parser.yy"
+#line 694 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5717,5 +5726,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 690 "parser.yy"
+#line 700 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5724,5 +5733,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 695 "parser.yy"
+#line 705 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5731,5 +5740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 697 "parser.yy"
+#line 707 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5742,5 +5751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 703 "parser.yy"
+#line 713 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5749,5 +5758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 720 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5756,5 +5765,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 715 "parser.yy"
+#line 725 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5763,5 +5772,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 721 "parser.yy"
+#line 731 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5770,5 +5779,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 723 "parser.yy"
+#line 733 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5777,5 +5786,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 725 "parser.yy"
+#line 735 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5784,5 +5793,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 727 "parser.yy"
+#line 737 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5799,5 +5808,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 747 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5806,5 +5815,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
+#line 749 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
@@ -5816,5 +5825,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 749 "parser.yy"
+#line 759 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5823,5 +5832,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 751 "parser.yy"
+#line 761 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5830,5 +5839,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 756 "parser.yy"
+#line 766 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
@@ -5837,5 +5846,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 758 "parser.yy"
+#line 768 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
@@ -5844,5 +5853,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 762 "parser.yy"
+#line 772 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5851,5 +5860,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
+#line 773 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5858,5 +5867,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+#line 779 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5865,5 +5874,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 783 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5872,5 +5881,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 788 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5879,5 +5888,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 784 "parser.yy"
+#line 794 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5886,5 +5895,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 786 "parser.yy"
+#line 796 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5893,5 +5902,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5900,5 +5909,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 797 "parser.yy"
+#line 807 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5907,5 +5916,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 799 "parser.yy"
+#line 809 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5914,5 +5923,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 801 "parser.yy"
+#line 811 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5921,5 +5930,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 803 "parser.yy"
+#line 813 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
@@ -5928,5 +5937,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 808 "parser.yy"
+#line 818 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -5935,5 +5944,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 814 "parser.yy"
+#line 824 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5942,5 +5951,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5949,5 +5958,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+#line 831 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5956,5 +5965,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 833 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -5963,5 +5972,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 825 "parser.yy"
+#line 835 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -5970,5 +5979,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+#line 840 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5977,5 +5986,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 832 "parser.yy"
+#line 842 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5984,5 +5993,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+#line 847 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5991,5 +6000,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 841 "parser.yy"
+#line 851 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5998,5 +6007,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+#line 854 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -6005,5 +6014,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 848 "parser.yy"
+#line 858 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6012,5 +6021,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 851 "parser.yy"
+#line 861 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -6019,5 +6028,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 865 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6026,5 +6035,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
+#line 867 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6033,5 +6042,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 869 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6040,5 +6049,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6047,5 +6056,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 865 "parser.yy"
+#line 875 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6054,5 +6063,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
+#line 882 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6061,5 +6070,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+#line 884 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6068,5 +6077,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 876 "parser.yy"
+#line 886 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6078,5 +6087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 887 "parser.yy"
+#line 897 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6085,5 +6094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 889 "parser.yy"
+#line 899 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6092,5 +6101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 901 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6099,5 +6108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 893 "parser.yy"
+#line 903 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6106,5 +6115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 908 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6113,5 +6122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 900 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6120,5 +6129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 902 "parser.yy"
+#line 912 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6127,5 +6136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 904 "parser.yy"
+#line 914 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6134,5 +6143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 919 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6144,5 +6153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 923 "parser.yy"
+#line 933 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6154,5 +6163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 928 "parser.yy"
+#line 938 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6161,5 +6170,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 930 "parser.yy"
+#line 940 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6171,5 +6180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 949 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6178,5 +6187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 941 "parser.yy"
+#line 951 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6185,5 +6194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 943 "parser.yy"
+#line 953 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
@@ -6192,5 +6201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 945 "parser.yy"
+#line 955 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
@@ -6199,5 +6208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 947 "parser.yy"
+#line 957 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6206,5 +6215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 952 "parser.yy"
+#line 962 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6213,5 +6222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 954 "parser.yy"
+#line 964 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6220,5 +6229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 959 "parser.yy"
+#line 969 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6227,5 +6236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 966 "parser.yy"
+#line 976 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6234,5 +6243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 971 "parser.yy"
+#line 981 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6241,5 +6250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 973 "parser.yy"
+#line 983 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6248,5 +6257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 978 "parser.yy"
+#line 988 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6255,5 +6264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
+#line 990 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6262,5 +6271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 982 "parser.yy"
+#line 992 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6269,5 +6278,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+#line 997 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6276,5 +6285,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 989 "parser.yy"
+#line 999 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6283,5 +6292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 996 "parser.yy"
+#line 1006 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6290,5 +6299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1003 "parser.yy"
+#line 1013 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6297,5 +6306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1008 "parser.yy"
+#line 1018 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6304,5 +6313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1015 "parser.yy"
+#line 1025 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6311,5 +6320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1029 "parser.yy"
+#line 1039 "parser.yy"
     {}
     break;
@@ -6318,5 +6327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+#line 1040 "parser.yy"
     {}
     break;
@@ -6325,5 +6334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1059 "parser.yy"
+#line 1069 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6335,5 +6344,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1066 "parser.yy"
+#line 1076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6345,5 +6354,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1071 "parser.yy"
+#line 1081 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6355,5 +6364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1081 "parser.yy"
+#line 1091 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6365,5 +6374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1086 "parser.yy"
+#line 1096 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6375,5 +6384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1091 "parser.yy"
+#line 1101 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6385,5 +6394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1099 "parser.yy"
+#line 1109 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6395,5 +6404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1104 "parser.yy"
+#line 1114 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6405,5 +6414,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1109 "parser.yy"
+#line 1119 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6415,5 +6424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1114 "parser.yy"
+#line 1124 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6425,5 +6434,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1119 "parser.yy"
+#line 1129 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6435,5 +6444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1127 "parser.yy"
+#line 1137 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6444,5 +6453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1150 "parser.yy"
+#line 1160 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6453,5 +6462,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1154 "parser.yy"
+#line 1164 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6462,5 +6471,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1161 "parser.yy"
+#line 1171 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6469,5 +6478,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1165 "parser.yy"
+#line 1175 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6476,5 +6485,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1170 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6486,5 +6495,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1175 "parser.yy"
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6496,5 +6505,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1180 "parser.yy"
+#line 1190 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6506,5 +6515,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1191 "parser.yy"
+#line 1201 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6516,5 +6525,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1196 "parser.yy"
+#line 1206 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6526,5 +6535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1201 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6536,5 +6545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1206 "parser.yy"
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6546,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1211 "parser.yy"
+#line 1221 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6556,5 +6565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1220 "parser.yy"
+#line 1230 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6566,5 +6575,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1225 "parser.yy"
+#line 1235 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6576,5 +6585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1242 "parser.yy"
+#line 1252 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6586,5 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1247 "parser.yy"
+#line 1257 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6596,5 +6605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1269 "parser.yy"
+#line 1279 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6603,5 +6612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1281 "parser.yy"
+#line 1291 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6610,5 +6619,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1292 "parser.yy"
+#line 1302 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6617,5 +6626,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1294 "parser.yy"
+#line 1304 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6624,5 +6633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1296 "parser.yy"
+#line 1306 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6631,5 +6640,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1298 "parser.yy"
+#line 1308 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6638,5 +6647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1300 "parser.yy"
+#line 1310 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6645,5 +6654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1302 "parser.yy"
+#line 1312 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6654,5 +6663,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1306 "parser.yy"
+#line 1316 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6664,5 +6673,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1315 "parser.yy"
+#line 1325 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6671,5 +6680,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1317 "parser.yy"
+#line 1327 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6678,5 +6687,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1328 "parser.yy"
+#line 1338 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6685,5 +6694,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6692,5 +6701,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+#line 1349 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6699,5 +6708,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+#line 1351 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6706,5 +6715,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1343 "parser.yy"
+#line 1353 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6713,5 +6722,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+#line 1355 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6720,5 +6729,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1347 "parser.yy"
+#line 1357 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6727,5 +6736,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1349 "parser.yy"
+#line 1359 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6734,5 +6743,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1351 "parser.yy"
+#line 1361 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6741,5 +6750,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
+#line 1366 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6748,5 +6757,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1358 "parser.yy"
+#line 1368 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6755,5 +6764,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1360 "parser.yy"
+#line 1370 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6762,5 +6771,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1362 "parser.yy"
+#line 1372 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6769,5 +6778,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1364 "parser.yy"
+#line 1374 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6776,5 +6785,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1366 "parser.yy"
+#line 1376 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6783,5 +6792,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1368 "parser.yy"
+#line 1378 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6790,5 +6799,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1370 "parser.yy"
+#line 1380 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6797,5 +6806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+#line 1382 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6804,5 +6813,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+#line 1384 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6811,5 +6820,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+#line 1386 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6818,5 +6827,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+#line 1388 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -6825,5 +6834,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1380 "parser.yy"
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6832,5 +6841,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+#line 1397 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6839,5 +6848,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1389 "parser.yy"
+#line 1399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6846,5 +6855,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1391 "parser.yy"
+#line 1401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6853,5 +6862,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+#line 1403 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6860,5 +6869,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+#line 1409 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6867,5 +6876,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1406 "parser.yy"
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6874,5 +6883,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1408 "parser.yy"
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6881,5 +6890,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1410 "parser.yy"
+#line 1420 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6888,5 +6897,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+#line 1425 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6895,5 +6904,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
+#line 1427 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6902,5 +6911,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
+#line 1429 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6909,30 +6918,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
+#line 1431 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
   case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1427 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1429 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 352:
-
-/* 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 354:
 
 /* Line 1806 of yacc.c  */
@@ -6941,5 +6929,5 @@
     break;
 
-  case 355:
+  case 351:
 
 /* Line 1806 of yacc.c  */
@@ -6948,8 +6936,29 @@
     break;
 
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1441 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1447 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1449 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 357:
 
 /* Line 1806 of yacc.c  */
-#line 1445 "parser.yy"
+#line 1455 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6958,5 +6967,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+#line 1457 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6965,5 +6974,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6972,5 +6981,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+#line 1464 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6979,5 +6988,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+#line 1466 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6986,5 +6995,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1458 "parser.yy"
+#line 1468 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6993,5 +7002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+#line 1478 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -7000,5 +7009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+#line 1480 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7010,5 +7019,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1475 "parser.yy"
+#line 1485 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7017,5 +7026,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1477 "parser.yy"
+#line 1487 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -7024,5 +7033,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1479 "parser.yy"
+#line 1489 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -7031,5 +7040,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1481 "parser.yy"
+#line 1491 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7038,5 +7047,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
+#line 1496 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -7045,5 +7054,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1488 "parser.yy"
+#line 1498 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7052,5 +7061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1493 "parser.yy"
+#line 1503 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7059,5 +7068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
+#line 1505 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7066,5 +7075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+#line 1511 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7073,5 +7082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1504 "parser.yy"
+#line 1514 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7084,5 +7093,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1514 "parser.yy"
+#line 1524 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7091,5 +7100,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
+#line 1526 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7098,5 +7107,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
+#line 1528 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7105,5 +7114,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1523 "parser.yy"
+#line 1533 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7112,5 +7121,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1525 "parser.yy"
+#line 1535 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7119,5 +7128,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1530 "parser.yy"
+#line 1540 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7126,5 +7135,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1532 "parser.yy"
+#line 1542 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7133,5 +7142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
+#line 1545 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7140,5 +7149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1538 "parser.yy"
+#line 1548 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7147,5 +7156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1544 "parser.yy"
+#line 1554 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7154,5 +7163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1546 "parser.yy"
+#line 1556 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7161,5 +7170,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1551 "parser.yy"
+#line 1561 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7168,5 +7177,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1560 "parser.yy"
+#line 1570 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7175,5 +7184,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
+#line 1572 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7185,5 +7194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1567 "parser.yy"
+#line 1577 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7192,5 +7201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1569 "parser.yy"
+#line 1579 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7199,5 +7208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1574 "parser.yy"
+#line 1584 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7206,5 +7215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
+#line 1586 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7213,5 +7222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1581 "parser.yy"
+#line 1591 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7220,5 +7229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1583 "parser.yy"
+#line 1593 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7227,5 +7236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1590 "parser.yy"
+#line 1600 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7234,5 +7243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1598 "parser.yy"
+#line 1608 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7241,5 +7250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1600 "parser.yy"
+#line 1610 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7248,30 +7257,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
+#line 1612 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
   case 410:
-
-/* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1612 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1614 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 414:
 
 /* Line 1806 of yacc.c  */
@@ -7280,8 +7268,29 @@
     break;
 
+  case 411:
+
+/* Line 1806 of yacc.c  */
+#line 1622 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1624 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 414:
+
+/* Line 1806 of yacc.c  */
+#line 1630 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 415:
 
 /* Line 1806 of yacc.c  */
-#line 1625 "parser.yy"
+#line 1635 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7290,5 +7299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1632 "parser.yy"
+#line 1642 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7297,5 +7306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
+#line 1649 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7304,5 +7313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
+#line 1651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7311,5 +7320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1650 "parser.yy"
+#line 1660 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7318,5 +7327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1653 "parser.yy"
+#line 1663 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7325,5 +7334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1655 "parser.yy"
+#line 1665 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7332,5 +7341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1665 "parser.yy"
+#line 1675 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7339,5 +7348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1671 "parser.yy"
+#line 1681 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7349,5 +7358,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1676 "parser.yy"
+#line 1686 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7359,5 +7368,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1685 "parser.yy"
+#line 1695 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7366,5 +7375,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+#line 1704 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7373,5 +7382,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1696 "parser.yy"
+#line 1706 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7380,5 +7389,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
+#line 1731 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7387,5 +7396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1729 "parser.yy"
+#line 1739 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7394,5 +7403,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1734 "parser.yy"
+#line 1744 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7401,5 +7410,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1736 "parser.yy"
+#line 1746 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7408,5 +7417,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1738 "parser.yy"
+#line 1748 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7415,5 +7424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
+#line 1752 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7422,5 +7431,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1743 "parser.yy"
+#line 1753 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7429,5 +7438,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1748 "parser.yy"
+#line 1758 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7436,5 +7445,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1750 "parser.yy"
+#line 1760 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7443,5 +7452,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1751 "parser.yy"
+#line 1761 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7450,5 +7459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1753 "parser.yy"
+#line 1763 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7457,5 +7466,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1769 "parser.yy"
+#line 1779 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
@@ -7464,5 +7473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
+#line 1785 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
@@ -7471,5 +7480,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1783 "parser.yy"
+#line 1793 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -7478,5 +7487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1785 "parser.yy"
+#line 1795 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7485,5 +7494,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1788 "parser.yy"
+#line 1798 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7492,5 +7501,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1790 "parser.yy"
+#line 1800 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
@@ -7499,5 +7508,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1792 "parser.yy"
+#line 1802 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ), true ); }
     break;
@@ -7506,30 +7515,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1794 "parser.yy"
+#line 1804 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
 
   case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1818 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1820 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 480:
 
 /* Line 1806 of yacc.c  */
@@ -7538,5 +7526,5 @@
     break;
 
-  case 481:
+  case 477:
 
 /* Line 1806 of yacc.c  */
@@ -7545,8 +7533,29 @@
     break;
 
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1832 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1838 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 481:
+
+/* Line 1806 of yacc.c  */
+#line 1840 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 482:
 
 /* Line 1806 of yacc.c  */
-#line 1835 "parser.yy"
+#line 1845 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7555,5 +7564,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1841 "parser.yy"
+#line 1851 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7562,5 +7571,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+#line 1856 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7569,5 +7578,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1848 "parser.yy"
+#line 1858 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7576,5 +7585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1854 "parser.yy"
+#line 1864 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7583,5 +7592,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1856 "parser.yy"
+#line 1866 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7590,5 +7599,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1858 "parser.yy"
+#line 1868 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7597,5 +7606,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1863 "parser.yy"
+#line 1873 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7604,5 +7613,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+#line 1875 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7611,5 +7620,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1870 "parser.yy"
+#line 1880 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7621,5 +7630,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1875 "parser.yy"
+#line 1885 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7628,5 +7637,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1877 "parser.yy"
+#line 1887 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7635,5 +7644,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -7642,5 +7651,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1885 "parser.yy"
+#line 1895 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
@@ -7649,5 +7658,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1887 "parser.yy"
+#line 1897 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7656,5 +7665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1892 "parser.yy"
+#line 1902 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7663,5 +7672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1894 "parser.yy"
+#line 1904 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7670,5 +7679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1896 "parser.yy"
+#line 1906 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7677,5 +7686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1901 "parser.yy"
+#line 1911 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7684,5 +7693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1903 "parser.yy"
+#line 1913 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7691,5 +7700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1908 "parser.yy"
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7701,5 +7710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+#line 1923 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7711,5 +7720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
+#line 1931 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7721,5 +7730,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+#line 1936 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7731,5 +7740,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+#line 1941 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7742,5 +7751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1941 "parser.yy"
+#line 1951 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7749,5 +7758,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1951 "parser.yy"
+#line 1961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7759,5 +7768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1956 "parser.yy"
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7769,5 +7778,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1961 "parser.yy"
+#line 1971 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7779,5 +7788,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1969 "parser.yy"
+#line 1979 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7789,5 +7798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1974 "parser.yy"
+#line 1984 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7799,5 +7808,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1984 "parser.yy"
+#line 1994 "parser.yy"
     {}
     break;
@@ -7806,5 +7815,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1986 "parser.yy"
+#line 1996 "parser.yy"
     {
 			if ( theTree ) {
@@ -7819,5 +7828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1998 "parser.yy"
+#line 2008 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7826,5 +7835,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2003 "parser.yy"
+#line 2013 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7833,5 +7842,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2011 "parser.yy"
+#line 2021 "parser.yy"
     {}
     break;
@@ -7840,5 +7849,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+#line 2023 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7850,5 +7859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2018 "parser.yy"
+#line 2028 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7861,5 +7870,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2024 "parser.yy"
+#line 2034 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7872,5 +7881,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+#line 2049 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7883,5 +7892,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2045 "parser.yy"
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7894,5 +7903,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2054 "parser.yy"
+#line 2064 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7905,5 +7914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2060 "parser.yy"
+#line 2070 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7916,5 +7925,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2066 "parser.yy"
+#line 2076 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7927,5 +7936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+#line 2082 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7938,5 +7947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+#line 2088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7949,5 +7958,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2086 "parser.yy"
+#line 2096 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7960,5 +7969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2092 "parser.yy"
+#line 2102 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7971,5 +7980,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2100 "parser.yy"
+#line 2110 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7982,5 +7991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2106 "parser.yy"
+#line 2116 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7993,5 +8002,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2121 "parser.yy"
+#line 2131 "parser.yy"
     { (yyval.en) = new CompositeExprNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -8000,5 +8009,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2131 "parser.yy"
+#line 2141 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8007,5 +8016,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2138 "parser.yy"
+#line 2148 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8014,5 +8023,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2144 "parser.yy"
+#line 2154 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -8021,5 +8030,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+#line 2169 "parser.yy"
     {}
     break;
@@ -8028,5 +8037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2160 "parser.yy"
+#line 2170 "parser.yy"
     {}
     break;
@@ -8035,5 +8044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
+#line 2171 "parser.yy"
     {}
     break;
@@ -8042,5 +8051,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2162 "parser.yy"
+#line 2172 "parser.yy"
     {}
     break;
@@ -8049,5 +8058,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8056,5 +8065,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2200 "parser.yy"
+#line 2210 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8063,5 +8072,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2202 "parser.yy"
+#line 2212 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8070,5 +8079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2207 "parser.yy"
+#line 2217 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8080,5 +8089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2212 "parser.yy"
+#line 2222 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8087,5 +8096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+#line 2227 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8094,5 +8103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2219 "parser.yy"
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8101,5 +8110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2221 "parser.yy"
+#line 2231 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8108,5 +8117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+#line 2236 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8115,5 +8124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2228 "parser.yy"
+#line 2238 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8122,5 +8131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2230 "parser.yy"
+#line 2240 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8129,5 +8138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2232 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8136,5 +8145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2237 "parser.yy"
+#line 2247 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8143,5 +8152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2239 "parser.yy"
+#line 2249 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8150,5 +8159,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
+#line 2258 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8157,5 +8166,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
+#line 2261 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8164,5 +8173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+#line 2266 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8171,5 +8180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+#line 2268 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8178,5 +8187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+#line 2270 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8185,5 +8194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
+#line 2275 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8192,5 +8201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+#line 2277 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8199,5 +8208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+#line 2279 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8206,5 +8215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2274 "parser.yy"
+#line 2284 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8213,5 +8222,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+#line 2286 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8220,5 +8229,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
+#line 2288 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8227,5 +8236,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+#line 2303 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8234,5 +8243,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+#line 2305 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8241,5 +8250,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
+#line 2307 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8248,5 +8257,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+#line 2312 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8255,5 +8264,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+#line 2314 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8262,5 +8271,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2306 "parser.yy"
+#line 2316 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8269,5 +8278,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2311 "parser.yy"
+#line 2321 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8276,5 +8285,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
+#line 2323 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8283,5 +8292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2315 "parser.yy"
+#line 2325 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8290,5 +8299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+#line 2340 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8297,5 +8306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8304,5 +8313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2335 "parser.yy"
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8311,5 +8320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8318,5 +8327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8325,5 +8334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2348 "parser.yy"
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8332,5 +8341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8339,5 +8348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2355 "parser.yy"
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8346,5 +8355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2357 "parser.yy"
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8353,5 +8362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2359 "parser.yy"
+#line 2369 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8360,5 +8369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2361 "parser.yy"
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8367,5 +8376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2366 "parser.yy"
+#line 2376 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8374,5 +8383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+#line 2378 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8381,5 +8390,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2370 "parser.yy"
+#line 2380 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8388,5 +8397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8395,5 +8404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2383 "parser.yy"
+#line 2393 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8402,5 +8411,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
+#line 2395 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8409,5 +8418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+#line 2400 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8416,5 +8425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
+#line 2402 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8423,5 +8432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2394 "parser.yy"
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8430,5 +8439,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2399 "parser.yy"
+#line 2409 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8437,5 +8446,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
+#line 2411 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8444,5 +8453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+#line 2413 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8451,5 +8460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2405 "parser.yy"
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8458,5 +8467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2410 "parser.yy"
+#line 2420 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8465,5 +8474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2412 "parser.yy"
+#line 2422 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8472,5 +8481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2414 "parser.yy"
+#line 2424 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8479,5 +8488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
+#line 2455 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8486,5 +8495,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2448 "parser.yy"
+#line 2458 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8493,5 +8502,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2450 "parser.yy"
+#line 2460 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8500,5 +8509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2455 "parser.yy"
+#line 2465 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8510,5 +8519,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+#line 2470 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8520,5 +8529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2468 "parser.yy"
+#line 2478 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8527,5 +8536,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+#line 2480 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8534,5 +8543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+#line 2482 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8541,5 +8550,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2477 "parser.yy"
+#line 2487 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8548,5 +8557,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+#line 2489 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8555,5 +8564,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2484 "parser.yy"
+#line 2494 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8562,5 +8571,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2486 "parser.yy"
+#line 2496 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8569,5 +8578,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+#line 2511 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8576,5 +8585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+#line 2513 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8583,5 +8592,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2508 "parser.yy"
+#line 2518 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8590,5 +8599,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2510 "parser.yy"
+#line 2520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8597,5 +8606,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+#line 2522 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8604,30 +8613,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+#line 2524 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
   case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2522 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2524 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 656:
 
 /* Line 1806 of yacc.c  */
@@ -8636,8 +8624,29 @@
     break;
 
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
   case 657:
 
 /* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+#line 2541 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8646,5 +8655,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+#line 2543 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8653,5 +8662,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2535 "parser.yy"
+#line 2545 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8660,5 +8669,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+#line 2551 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8667,5 +8676,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+#line 2553 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8674,5 +8683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+#line 2559 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8681,5 +8690,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
+#line 2561 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8688,5 +8697,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
+#line 2563 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8695,5 +8704,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2555 "parser.yy"
+#line 2565 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8702,5 +8711,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+#line 2580 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8709,5 +8718,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8716,5 +8725,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2577 "parser.yy"
+#line 2587 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8723,5 +8732,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2579 "parser.yy"
+#line 2589 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8730,5 +8739,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2581 "parser.yy"
+#line 2591 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8737,30 +8746,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2583 "parser.yy"
+#line 2593 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
   case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2585 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2591 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2593 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 678:
 
 /* Line 1806 of yacc.c  */
@@ -8769,8 +8757,29 @@
     break;
 
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2603 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2605 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
   case 679:
 
 /* Line 1806 of yacc.c  */
-#line 2600 "parser.yy"
+#line 2610 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8779,5 +8788,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2602 "parser.yy"
+#line 2612 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8786,5 +8795,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2604 "parser.yy"
+#line 2614 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8793,5 +8802,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+#line 2621 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8800,5 +8809,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+#line 2632 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8807,5 +8816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2625 "parser.yy"
+#line 2635 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8814,5 +8823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
+#line 2637 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8821,5 +8830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2630 "parser.yy"
+#line 2640 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8828,5 +8837,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
+#line 2642 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8835,5 +8844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
+#line 2644 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -8842,5 +8851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2648 "parser.yy"
+#line 2658 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8849,5 +8858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
+#line 2660 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8856,5 +8865,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2655 "parser.yy"
+#line 2665 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8863,5 +8872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+#line 2667 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8870,5 +8879,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2659 "parser.yy"
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8877,30 +8886,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
+#line 2671 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
   case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2663 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 702:
 
 /* Line 1806 of yacc.c  */
@@ -8909,8 +8897,29 @@
     break;
 
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2679 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2681 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2683 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
   case 703:
 
 /* Line 1806 of yacc.c  */
-#line 2678 "parser.yy"
+#line 2688 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8919,5 +8928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2680 "parser.yy"
+#line 2690 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8926,5 +8935,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+#line 2700 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8933,5 +8942,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
+#line 2710 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8940,5 +8949,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
+#line 2712 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8947,5 +8956,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
+#line 2714 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8954,5 +8963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2706 "parser.yy"
+#line 2716 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -8961,5 +8970,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2708 "parser.yy"
+#line 2718 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8968,44 +8977,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2710 "parser.yy"
+#line 2720 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
   case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 718:
-
-/* 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 719:
-
-/* 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 720:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 721:
 
 /* Line 1806 of yacc.c  */
@@ -9014,5 +8988,5 @@
     break;
 
-  case 722:
+  case 717:
 
 /* Line 1806 of yacc.c  */
@@ -9021,5 +8995,5 @@
     break;
 
-  case 723:
+  case 718:
 
 /* Line 1806 of yacc.c  */
@@ -9028,5 +9002,5 @@
     break;
 
-  case 724:
+  case 719:
 
 /* Line 1806 of yacc.c  */
@@ -9035,5 +9009,5 @@
     break;
 
-  case 725:
+  case 720:
 
 /* Line 1806 of yacc.c  */
@@ -9042,8 +9016,43 @@
     break;
 
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2741 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2743 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2745 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 726:
 
 /* Line 1806 of yacc.c  */
-#line 2740 "parser.yy"
+#line 2750 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -9052,5 +9061,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2742 "parser.yy"
+#line 2752 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9059,5 +9068,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2747 "parser.yy"
+#line 2757 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9066,5 +9075,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2749 "parser.yy"
+#line 2759 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9073,5 +9082,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2776 "parser.yy"
+#line 2786 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9080,5 +9089,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2787 "parser.yy"
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9087,5 +9096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9094,5 +9103,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2791 "parser.yy"
+#line 2801 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9101,5 +9110,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2793 "parser.yy"
+#line 2803 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9108,5 +9117,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2795 "parser.yy"
+#line 2805 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -9115,5 +9124,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2797 "parser.yy"
+#line 2807 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -9122,5 +9131,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2804 "parser.yy"
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9129,5 +9138,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2806 "parser.yy"
+#line 2816 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9136,5 +9145,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2808 "parser.yy"
+#line 2818 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9143,5 +9152,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2810 "parser.yy"
+#line 2820 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9150,5 +9159,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2812 "parser.yy"
+#line 2822 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9157,5 +9166,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2814 "parser.yy"
+#line 2824 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9164,5 +9173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2819 "parser.yy"
+#line 2829 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9171,5 +9180,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2824 "parser.yy"
+#line 2834 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9178,5 +9187,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2826 "parser.yy"
+#line 2836 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9185,5 +9194,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2828 "parser.yy"
+#line 2838 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9192,5 +9201,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2852 "parser.yy"
+#line 2862 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9199,5 +9208,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2854 "parser.yy"
+#line 2864 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9206,5 +9215,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9209 "Parser/parser.cc"
+#line 9218 "Parser/parser.cc"
       default: break;
     }
@@ -9437,5 +9446,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2857 "parser.yy"
+#line 2867 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/parser.h	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -262,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 115 "parser.yy"
 
 	Token tok;
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision d9e2280190814b3889003b217e8c205b8bbc67a2)
+++ src/Parser/parser.yy	(revision 7bf7fb911dd8bbefbe1a0091ca8f612e760c47dd)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug  5 15:06:44 2016
-// Update Count     : 1756
+// Last Modified On : Sun Aug  7 09:37:48 2016
+// Update Count     : 1764
 //
 
@@ -60,4 +60,9 @@
 std::stack< LinkageSpec::Type > linkageStack;
 TypedefTable typedefTable;
+
+void appendStr( std::string &to, std::string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to.insert( to.length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
 %}
 
@@ -304,7 +309,7 @@
 constant:
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
-INTEGERconstant									{ $$ = makeConstantInteger( *$1 ); }
-	| FLOATINGconstant							{ $$ = makeConstantFloat( *$1 ); }
-	| CHARACTERconstant							{ $$ = makeConstantChar( *$1 ); }
+INTEGERconstant									{ $$ = build_constantInteger( *$1 ); }
+	| FLOATINGconstant							{ $$ = build_constantFloat( *$1 ); }
+	| CHARACTERconstant							{ $$ = build_constantChar( *$1 ); }
 	;
 
@@ -331,6 +336,11 @@
 
 string_literal_list:									// juxtaposed strings are concatenated
-	STRINGliteral								{ $$ = makeConstantStr( *$1 ); }
-	| string_literal_list STRINGliteral			{ $$ = $1->appendstr( $2 ); }
+	STRINGliteral								{ $$ = build_constantStr( *$1 ); }
+	| string_literal_list STRINGliteral
+		{
+			appendStr( $1->get_expr()->get_constant()->get_value(), $2 );
+			delete $2;									// allocated by lexer
+			$$ = $1;
+		}
 	;
 
