Index: doc/LaTeXmacros/common.tex
===================================================================
--- doc/LaTeXmacros/common.tex	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ doc/LaTeXmacros/common.tex	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -11,6 +11,6 @@
 %% Created On       : Sat Apr  9 10:06:17 2016
 %% Last Modified By : Peter A. Buhr
-%% Last Modified On : Thu Aug  4 13:22:46 2016
-%% Update Count     : 230
+%% Last Modified On : Sun Aug 14 08:27:29 2016
+%% Update Count     : 231
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -154,5 +154,5 @@
 }%
 \newcommand{\etal}{%
-	\@ifnextchar{.}{\abbrevFont{et al}}%
+	\@ifnextchar{.}{\abbrevFont{et~al}}%
 	        {\abbrevFont{et al}.\xspace}%
 }%
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/DeclarationNode.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 08:39:20 2016
-// Update Count     : 169
+// Last Modified On : Sat Aug 13 18:56:58 2016
+// Update Count     : 171
 //
 
@@ -470,6 +470,6 @@
 
 		// there may be typedefs chained onto the type
-		if ( o->get_link() ) {
-			set_link( o->get_link()->clone() );
+		if ( o->get_next() ) {
+			set_last( o->get_next()->clone() );
 		} // if
 	} // if
@@ -757,5 +757,5 @@
 DeclarationNode *DeclarationNode::appendList( DeclarationNode *node ) {
 	if ( node != 0 ) {
-		set_link( node );
+		set_last( node );
 	} // if
 	return this;
@@ -794,5 +794,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast<DeclarationNode *>( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -831,5 +831,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode *>( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -848,5 +848,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast< DeclarationNode *>( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/ExpressionNode.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug 10 11:07:38 2016
-// Update Count     : 486
+// Last Modified On : Thu Aug 11 20:24:36 2016
+// Update Count     : 487
 //
 
@@ -309,57 +309,4 @@
 
 //##############################################################################
- 
-// ForCtlExprNode::ForCtlExprNode( ParseNode *init_, ExpressionNode *cond, ExpressionNode *incr ) throw ( SemanticError ) : condition( cond ), change( incr ) {
-// 	if ( init_ == 0 )
-// 		init = 0;
-// 	else {
-// 		DeclarationNode *decl;
-// 		ExpressionNode *exp;
-
-// 		if (( decl = dynamic_cast<DeclarationNode *>(init_) ) != 0)
-// 			init = new StatementNode( decl );
-// 		else if (( exp = dynamic_cast<ExpressionNode *>( init_)) != 0)
-// 			init = new StatementNode( StatementNode::Exp, exp );
-// 		else
-// 			throw SemanticError("Error in for control expression");
-// 	}
-// }
-
-// ForCtlExprNode::ForCtlExprNode( const ForCtlExprNode &other )
-// 	: ExpressionNode( other ), init( maybeClone( other.init ) ), condition( maybeClone( other.condition ) ), change( maybeClone( other.change ) ) {
-// }
-
-// ForCtlExprNode::~ForCtlExprNode() {
-// 	delete init;
-// 	delete condition;
-// 	delete change;
-// }
-
-// Expression *ForCtlExprNode::build() const {
-// 	// this shouldn't be used!
-// 	assert( false );
-// 	return 0;
-// }
-
-// void ForCtlExprNode::print( std::ostream &os, int indent ) const{
-// 	os << string( indent,' ' ) << "For Control Expression -- :" << endl;
-
-// 	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-// 	if ( init != 0 )
-// 		init->printList( os, indent + 4 );
-
-// 	os << string( indent + 2, ' ' ) << "condition: " << endl;
-// 	if ( condition != 0 )
-// 		condition->print( os, indent + 4 );
-// 	os << string( indent + 2, ' ' ) << "increment: " << endl;
-// 	if ( change != 0 )
-// 		change->print( os, indent + 4 );
-// }
-
-// void ForCtlExprNode::printOneLine( std::ostream &, int indent ) const {
-// 	assert( false );
-// }
-
-//##############################################################################
 
 Expression *build_typevalue( DeclarationNode *decl ) {
Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/InitializerNode.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:20:24 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jul  4 15:37:15 2016
-// Update Count     : 15
+// Last Modified On : Sat Aug 13 18:55:11 2016
+// Update Count     : 18
 //
 
@@ -25,8 +25,8 @@
 	: expr( _expr ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode *>( get_next() );
 
 	if ( kids != 0 )
-		set_link( 0 );
+		set_last( 0 );
 }
 
@@ -34,8 +34,8 @@
 	: expr( 0 ), aggregate( aggrp ), designator( des ), kids( 0 ), maybeConstructed( true ) {
 	if ( init != 0 )
-		set_link(init);
+		set_last( init );
 
 	if ( aggrp )
-		kids = dynamic_cast< InitializerNode *>( get_link() );
+		kids = dynamic_cast< InitializerNode *>( get_next() );
 
 	if ( kids != 0 )
@@ -58,5 +58,5 @@
 			while ( curdes != 0) {
 				curdes->printOneLine(os);
-				curdes = (ExpressionNode *)(curdes->get_link());
+				curdes = (ExpressionNode *)(curdes->get_next());
 				if ( curdes ) os << ", ";
 			} // while
@@ -72,5 +72,5 @@
 
 	InitializerNode *moreInit;
-	if  ( get_link() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_link() ) ) != 0) )
+	if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
 		moreInit->printOneLine( os );
 }
Index: src/Parser/ParseNode.cc
===================================================================
--- src/Parser/ParseNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/ParseNode.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:26:29 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 23:32:47 2016
-// Update Count     : 94
+// Last Modified On : Sat Aug 13 18:55:35 2016
+// Update Count     : 98
 // 
 
@@ -31,11 +31,10 @@
 	ParseNode *current = this;
 
-	while ( current->get_link() != 0 )
-	current = current->get_link();
-
+	while ( current->get_next() != 0 )
+	current = current->get_next();
 	return current;
 }
 
-ParseNode *ParseNode::set_link( ParseNode *next_ ) {
+ParseNode *ParseNode::set_last( ParseNode *next_ ) {
 	if ( next_ != 0 ) get_last()->next = next_;
 	return this;
@@ -54,6 +53,5 @@
 
 ParseNode &ParseNode::operator,( ParseNode &p ) {
-	set_link( &p );
-
+	set_last( &p );
 	return *this;
 }
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/ParseNode.h	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 12:24:11 2016
-// Update Count     : 443
+// Last Modified On : Sun Aug 14 08:09:54 2016
+// Update Count     : 469
 //
 
@@ -45,8 +45,8 @@
 	virtual ~ParseNode();
 
-	ParseNode *get_link() const { return next; }
+	ParseNode *get_next() const { return next; }
+	ParseNode *set_next( ParseNode *newlink ) { next = newlink; return this; }
 	ParseNode *get_last();
-	ParseNode *set_link( ParseNode * );
-	void set_next( ParseNode *newlink ) { next = newlink; }
+	ParseNode *set_last( ParseNode * );
 
 	virtual ParseNode *clone() const { return 0; };
@@ -343,6 +343,4 @@
 	~StatementNode();
 
-	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
-
 	StatementNode *set_block( StatementNode *b ) { block = b; return this; }
 	StatementNode *get_block() const { return block; }
@@ -357,7 +355,6 @@
 
 	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
-	void setCatchRest( bool newVal ) { isCatchRest = newVal; }
-
-	std::string get_target() const;
+
+	void setCatchRest( bool newVal ) { catchAny = newVal; }
 
 	// StatementNode *add_controlexp( ExpressionNode * );
@@ -368,5 +365,5 @@
 	virtual StatementNode *clone() const;
 	virtual Statement *build() const;
-  private:
+  public:
 	static const char *StType[];
 	Type type;
@@ -374,13 +371,14 @@
 	StatementNode *block;
 	std::list<std::string> labels;
-	std::string *target;				// target label for jump statements
+	std::string *target;								// target label for jump statements
 	DeclarationNode *decl;
-	bool isCatchRest;
+	bool catchAny;
 }; // StatementNode
 
 class StatementNode2 : public StatementNode {
   public:
-	StatementNode2() {}
+	StatementNode2() { stmt = nullptr; }
 	StatementNode2( Statement *stmt ) : stmt( stmt ) {}
+	StatementNode2( DeclarationNode *decl );
 	virtual ~StatementNode2() {}
 
@@ -392,6 +390,7 @@
 		return this;
 	}
+	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
+
 	virtual StatementNode *append_last_case( StatementNode * );
-	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
 
 	virtual void print( std::ostream &os, int indent = 0 ) {}
@@ -401,9 +400,11 @@
 }; // StatementNode
 
+Statement *build_expr( ExpressionNode *ctl );
+
 struct ForCtl {
 	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
-		init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
+		init( new StatementNode2( build_expr( expr ) ) ), condition( condition ), change( change ) {}
 	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
-		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
+		init( new StatementNode2( decl ) ), condition( condition ), change( change ) {}
 
 	StatementNode *init;
@@ -412,5 +413,4 @@
 };
 
-Statement *build_expr( ExpressionNode *ctl );
 Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
 Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
@@ -423,4 +423,7 @@
 Statement *build_return( ExpressionNode *ctl );
 Statement *build_throw( ExpressionNode *ctl );
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt );
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny = false );
+Statement *build_finally( StatementNode *stmt );
 
 //##############################################################################
@@ -429,5 +432,4 @@
   public:
 	CompoundStmtNode();
-	CompoundStmtNode( const std::string * );
 	CompoundStmtNode( StatementNode * );
 	~CompoundStmtNode();
@@ -477,5 +479,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< NodeType *>( cur->get_link() );
+		cur = dynamic_cast< NodeType *>( cur->get_next() );
 	} // while
 	if ( ! errors.isEmpty() ) {
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/StatementNode.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 16:19:45 2016
-// Update Count     : 210
+// Last Modified On : Sun Aug 14 08:09:31 2016
+// Update Count     : 271
 //
 
@@ -34,9 +34,10 @@
 };
 
-StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {}
-
-StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), isCatchRest ( false ) {
+StatementNode::StatementNode() : ParseNode(), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), catchAny( false ) {}
+
+StatementNode::StatementNode( const string *name ) : ParseNode( name ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), decl( 0 ), catchAny( false ) { assert( false ); }
+
+StatementNode::StatementNode( DeclarationNode *decl ) : type( Decl ), control( 0 ), block( 0 ), labels( 0 ), target( 0 ), catchAny( false ) {
+	assert( false );
 	if ( decl ) {
 		if ( DeclarationNode *agg = decl->extractAggregate() ) {
@@ -46,11 +47,11 @@
 			nextStmt->decl = decl;
 			next = nextStmt;
-			if ( decl->get_link() ) {
-				next->set_next( new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) ) );
+			if ( decl->get_next() ) {
+				next->set_next( new StatementNode( dynamic_cast<DeclarationNode *>( decl->get_next() ) ) );
 				decl->set_next( 0 );
 			} // if
 		} else {
-			if ( decl->get_link() ) {
-				next = new StatementNode( dynamic_cast< DeclarationNode* >( decl->get_link() ) );
+			if ( decl->get_next() ) {
+				next = new StatementNode( dynamic_cast<DeclarationNode *>( decl->get_next() ) );
 				decl->set_next( 0 );
 			} // if
@@ -60,9 +61,34 @@
 }
 
-StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), isCatchRest ( false ) {
+StatementNode2::StatementNode2( DeclarationNode *decl ) {
+	if ( decl ) {
+		DeclarationNode *agg = decl->extractAggregate();
+		if ( agg ) {
+			StatementNode *nextStmt = new StatementNode;
+			nextStmt->type = Decl;
+			nextStmt->decl = decl;
+			next = nextStmt;
+			if ( decl->get_next() ) {
+				next->set_next( new StatementNode2( dynamic_cast<DeclarationNode *>(decl->get_next()) ) );
+				decl->set_next( 0 );
+			} // if
+		} else {
+			if ( decl->get_next() ) {
+				next = new StatementNode2( dynamic_cast<DeclarationNode *>( decl->get_next() ) );
+				decl->set_next( 0 );
+			} // if
+			agg = decl;
+		} // if
+		stmt = new DeclStmt( noLabels, maybeBuild<Declaration>(agg) );
+	} else {
+		assert( false );
+	} // if
+}
+
+StatementNode::StatementNode( Type t, ExpressionNode *ctrl_label, StatementNode *block ) : type( t ), control( ctrl_label ), block( block ), labels( 0 ), target( 0 ), decl( 0 ), catchAny( false ) {
 	this->control = ( t == Default ) ? 0 : control;
 }
 
-StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), isCatchRest ( false ) {}
+StatementNode::StatementNode( Type t, string *target ) : type( t ), control( 0 ), block( 0 ), labels( 0 ), target( target ), decl( 0 ), catchAny( false ) {}
 
 StatementNode::~StatementNode() {
@@ -73,20 +99,6 @@
 }
 
-StatementNode * StatementNode::newCatchStmt( DeclarationNode *d, StatementNode *s, bool catchRestP ) {
-	StatementNode *ret = new StatementNode( StatementNode::Catch, 0, s );
-	ret->addDeclaration( d );
-	ret->setCatchRest( catchRestP );
-
-	return ret;
-}
-
-std::string StatementNode::get_target() const{
-	if ( target )
-		return *target;
-
-	return string("");
-}
-
 StatementNode * StatementNode::clone() const {
+	assert( false );
 	StatementNode *newnode = new StatementNode( type, maybeClone( control ), maybeClone( block ) );
 	if ( target ) {
@@ -112,5 +124,5 @@
 			block = stmt;
 		else
-			block->set_link( stmt );
+			block->set_last( stmt );
 	} // if
 	return this;
@@ -120,5 +132,5 @@
 	assert( false );
 	if ( stmt != 0 ) {
-		StatementNode *next = ( StatementNode *)get_link();
+		StatementNode *next = ( StatementNode *)get_next();
 		if ( next && ( next->get_type() == StatementNode::Case || next->get_type() == StatementNode::Default ) )
 			next->append_last_case( stmt );
@@ -127,5 +139,5 @@
 				block = stmt;
 			else
-				block->set_link( stmt );
+				block->set_last( stmt );
 	} // if
 	return this;
@@ -134,5 +146,6 @@
 StatementNode *StatementNode2::append_last_case( StatementNode *stmt ) {
 	StatementNode *prev = this;
-	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_link() ) {
+	// find end of list and maintain previous pointer
+	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
 		StatementNode2 *node = dynamic_cast<StatementNode2 *>(curr);
 		assert( node );
@@ -140,9 +153,10 @@
 		prev = curr;
 	} // for
+	// conver from StatementNode list to Statement list
 	StatementNode2 *node = dynamic_cast<StatementNode2 *>(prev);
 	std::list<Statement *> stmts;
 	buildList( stmt, stmts );
-	CaseStmt * caseStmt;
-	caseStmt = dynamic_cast<CaseStmt *>(node->stmt);
+	// splice any new Statements to end of currents Statements
+	CaseStmt * caseStmt = dynamic_cast<CaseStmt *>(node->stmt);
 	caseStmt->get_statements().splice( caseStmt->get_statements().end(), stmts );
 	return this;
@@ -177,5 +191,5 @@
 				os << string( indent + ParseNode::indent_by, ' ' ) << "Declaration: " << endl;
 				decl->print( os, indent + 2 * ParseNode::indent_by );
-			} else if ( isCatchRest ) {
+			} else if ( catchAny ) {
 				os << string( indent + ParseNode::indent_by, ' ' ) << "Catches the rest " << endl;
 			} else {
@@ -191,7 +205,4 @@
 			block->printList( os, indent + 2 * ParseNode::indent_by );
 		} // if
-		if ( target ) {
-			os << string( indent + ParseNode::indent_by, ' ' ) << "Target: " << get_target() << endl;
-		} // if
 		break;
 	} // switch
@@ -208,5 +219,4 @@
 	} // if
 
-	// try {
 	buildList<Statement, StatementNode>( get_block(), branches );
 
@@ -214,13 +224,14 @@
 	  case Decl:
 		return new DeclStmt( labs, maybeBuild< Declaration >( decl ) );
+		assert( false );
 	  case Exp:
-		{
-			Expression *e = maybeBuild< Expression >( get_control() );
-
-			if ( e )
-				return new ExprStmt( labs, e );
-			else
-				return new NullStmt( labs );
-		}
+		// {
+		// 	Expression *e = maybeBuild< Expression >( get_control() );
+
+		// 	if ( e )
+		// 		return new ExprStmt( labs, e );
+		// 	else
+		// 		return new NullStmt( labs );
+		// }
 		assert( false );
 	  case If:
@@ -279,18 +290,8 @@
 		assert( false );
 	  case Goto:
-		// {
-		// 	if ( get_target() == "" ) {					// computed goto
-		// 		assert( get_control() != 0 );
-		// 		return new BranchStmt( labs, maybeBuild<Expression>(get_control()), BranchStmt::Goto );
-		// 	} // if
-
-		// 	return new BranchStmt( labs, get_target(), BranchStmt::Goto );
-		// }
 		assert( false );
 	  case Break:
-		// return new BranchStmt( labs, get_target(), BranchStmt::Break );
 		assert( false );
 	  case Continue:
-		// return new BranchStmt( labs, get_target(), BranchStmt::Continue );
 		assert( false );
 	  case Return:
@@ -303,32 +304,35 @@
 		assert( false );
 	  case Try:
-		{
-			assert( branches.size() >= 0 );
-			CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front());
-			branches.pop_front();
-			FinallyStmt *finallyBlock = 0;
-			if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) {
-				branches.pop_back();
-			} // if
-			return new TryStmt( labs, tryBlock, branches, finallyBlock );
-		}
+		// {
+		// 	assert( branches.size() >= 0 );
+		// 	CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>( branches.front());
+		// 	branches.pop_front();
+		// 	FinallyStmt *finallyBlock = 0;
+		// 	if ( ( finallyBlock = dynamic_cast<FinallyStmt *>( branches.back())) ) {
+		// 		branches.pop_back();
+		// 	} // if
+		// 	return new TryStmt( labs, tryBlock, branches, finallyBlock );
+		// }
+		assert( false );
 	  case Catch:
-		{
-			assert( branches.size() == 1 );
-
-			return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), isCatchRest );
-		}
+		// {
+		// 	assert( branches.size() == 1 );
+
+		// 	return new CatchStmt( labs, maybeBuild< Declaration >( decl ), branches.front(), catchAny );
+		// }
+		assert( false );
 	  case Finally:
-		{
-			assert( branches.size() == 1 );
-			CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() );
-			assert( block != 0 );
-
-			return new FinallyStmt( labs, block );
-		}
+		// {
+		// 	assert( branches.size() == 1 );
+		// 	CompoundStmt *block = dynamic_cast<CompoundStmt *>( branches.front() );
+		// 	assert( block != 0 );
+
+		// 	return new FinallyStmt( labs, block );
+		// }
+		assert( false );
 	  case Asm:
 		assert( false );
 	  default:
-		// shouldn't be here
+		assert( false );
 		return 0;
 	} // switch
@@ -422,8 +426,27 @@
 }
 
+Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( catch_stmt, branches );
+	CompoundStmt *tryBlock = dynamic_cast<CompoundStmt *>(maybeBuild<Statement>(try_stmt));
+	assert( tryBlock );
+	FinallyStmt *finallyBlock = dynamic_cast<FinallyStmt *>(maybeBuild<Statement>(finally_stmt) );
+	return new TryStmt( noLabels, tryBlock, branches, finallyBlock );
+}
+Statement *build_catch( DeclarationNode *decl, StatementNode *stmt, bool catchAny ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+	return new CatchStmt( noLabels, maybeBuild<Declaration>(decl), branches.front(), catchAny );
+}
+Statement *build_finally( StatementNode *stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+	return new FinallyStmt( noLabels, dynamic_cast<CompoundStmt *>( branches.front() ) );
+}
+
 
 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
-
-CompoundStmtNode::CompoundStmtNode( const string *name_ ) : StatementNode( name_ ), first( 0 ), last( 0 ) {}
 
 CompoundStmtNode::CompoundStmtNode( StatementNode *stmt ) : first( stmt ) {
@@ -441,6 +464,6 @@
 void CompoundStmtNode::add_statement( StatementNode *stmt ) {
 	if ( stmt != 0 ) {
-		last->set_link( stmt );
-		last = ( StatementNode *)( stmt->get_link());
+		last->set_last( stmt );
+		last = ( StatementNode *)( stmt->get_next());
 	} // if
 }
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/TypeData.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug  7 07:51:48 2016
-// Update Count     : 58
+// Last Modified On : Sat Aug 13 18:38:41 2016
+// Update Count     : 59
 //
 
@@ -495,5 +495,5 @@
 			decl = new FunctionDecl( name, sc, linkage, buildFunction(), 0, isInline, isNoreturn );
 		} // if
-		for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_link() ) ) {
+		for ( DeclarationNode *cur = function->idList; cur != 0; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
 			if ( cur->get_name() != "" ) {
 				decl->get_oldIdents().insert( decl->get_oldIdents().end(), cur->get_name() );
@@ -909,5 +909,5 @@
 	buildList( enumeration->constants, ret->get_members() );
 	std::list< Declaration * >::iterator members = ret->get_members().begin();
-	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
+	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_next() ), ++members ) {
 		if ( cur->get_enumeratorValue() != NULL ) {
 			ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/parser.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -1035,65 +1035,65 @@
      657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
      692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
-     726,   728,   730,   740,   742,   753,   754,   756,   761,   763,
-     767,   768,   773,   774,   778,   783,   784,   788,   790,   796,
-     797,   801,   803,   805,   807,   813,   814,   818,   820,   825,
-     827,   829,   834,   836,   841,   843,   847,   850,   854,   857,
-     861,   863,   865,   867,   872,   874,   876,   885,   887,   889,
-     891,   893,   898,   900,   902,   904,   909,   922,   923,   928,
-     930,   935,   939,   941,   943,   945,   947,   953,   954,   960,
-     961,   965,   966,   971,   973,   979,   980,   982,   987,   989,
-     996,   998,  1002,  1003,  1008,  1010,  1014,  1015,  1019,  1021,
-    1025,  1026,  1030,  1031,  1035,  1036,  1051,  1052,  1053,  1054,
-    1055,  1059,  1064,  1071,  1081,  1086,  1091,  1099,  1104,  1109,
-    1114,  1119,  1127,  1149,  1154,  1161,  1163,  1170,  1175,  1180,
-    1191,  1196,  1201,  1206,  1211,  1220,  1225,  1233,  1234,  1235,
-    1236,  1242,  1247,  1255,  1256,  1257,  1258,  1262,  1263,  1264,
-    1265,  1270,  1271,  1280,  1281,  1286,  1287,  1292,  1294,  1296,
-    1298,  1300,  1303,  1302,  1314,  1315,  1317,  1327,  1328,  1333,
-    1337,  1339,  1341,  1343,  1345,  1347,  1349,  1351,  1356,  1358,
-    1360,  1362,  1364,  1366,  1368,  1370,  1372,  1374,  1376,  1378,
-    1380,  1386,  1387,  1389,  1391,  1393,  1398,  1399,  1405,  1406,
-    1408,  1410,  1415,  1417,  1419,  1421,  1426,  1427,  1429,  1431,
-    1436,  1437,  1439,  1444,  1445,  1447,  1449,  1454,  1456,  1458,
-    1463,  1464,  1468,  1470,  1476,  1475,  1479,  1481,  1486,  1488,
-    1494,  1495,  1500,  1501,  1503,  1504,  1513,  1514,  1516,  1518,
-    1523,  1525,  1531,  1532,  1534,  1537,  1540,  1545,  1546,  1551,
-    1556,  1560,  1562,  1568,  1567,  1574,  1576,  1582,  1583,  1591,
-    1592,  1596,  1597,  1598,  1600,  1602,  1609,  1610,  1612,  1614,
-    1619,  1620,  1626,  1627,  1631,  1632,  1637,  1638,  1639,  1641,
-    1649,  1650,  1652,  1655,  1657,  1661,  1662,  1663,  1665,  1667,
-    1671,  1676,  1684,  1685,  1694,  1696,  1701,  1702,  1703,  1707,
-    1708,  1709,  1713,  1714,  1715,  1719,  1720,  1721,  1726,  1727,
-    1728,  1729,  1735,  1736,  1738,  1743,  1744,  1749,  1750,  1751,
-    1752,  1753,  1768,  1769,  1774,  1775,  1781,  1783,  1786,  1788,
-    1790,  1813,  1814,  1816,  1818,  1823,  1824,  1826,  1831,  1836,
-    1837,  1843,  1842,  1846,  1850,  1852,  1854,  1860,  1861,  1866,
-    1871,  1873,  1878,  1880,  1881,  1883,  1888,  1890,  1892,  1897,
-    1899,  1904,  1909,  1917,  1923,  1922,  1936,  1937,  1942,  1943,
-    1947,  1952,  1957,  1965,  1970,  1981,  1982,  1993,  1994,  2000,
-    2001,  2005,  2006,  2007,  2010,  2009,  2020,  2029,  2035,  2041,
-    2050,  2056,  2062,  2068,  2074,  2082,  2088,  2096,  2102,  2111,
-    2112,  2113,  2117,  2121,  2123,  2128,  2129,  2133,  2134,  2139,
-    2145,  2146,  2149,  2151,  2152,  2156,  2157,  2158,  2159,  2193,
-    2195,  2196,  2198,  2203,  2208,  2213,  2215,  2217,  2222,  2224,
-    2226,  2228,  2233,  2235,  2244,  2246,  2247,  2252,  2254,  2256,
-    2261,  2263,  2265,  2270,  2272,  2274,  2283,  2284,  2285,  2289,
-    2291,  2293,  2298,  2300,  2302,  2307,  2309,  2311,  2326,  2328,
-    2329,  2331,  2336,  2337,  2342,  2344,  2346,  2351,  2353,  2355,
-    2357,  2362,  2364,  2366,  2376,  2378,  2379,  2381,  2386,  2388,
-    2390,  2395,  2397,  2399,  2401,  2406,  2408,  2410,  2441,  2443,
-    2444,  2446,  2451,  2456,  2464,  2466,  2468,  2473,  2475,  2480,
-    2482,  2496,  2497,  2499,  2504,  2506,  2508,  2510,  2512,  2517,
-    2518,  2520,  2522,  2527,  2529,  2531,  2537,  2539,  2541,  2545,
-    2547,  2549,  2551,  2565,  2566,  2568,  2573,  2575,  2577,  2579,
-    2581,  2586,  2587,  2589,  2591,  2596,  2598,  2600,  2606,  2607,
-    2609,  2618,  2621,  2623,  2626,  2628,  2630,  2643,  2644,  2646,
-    2651,  2653,  2655,  2657,  2659,  2664,  2665,  2667,  2669,  2674,
-    2676,  2684,  2685,  2686,  2691,  2692,  2696,  2698,  2700,  2702,
-    2704,  2706,  2713,  2715,  2717,  2719,  2721,  2723,  2725,  2727,
-    2729,  2731,  2736,  2738,  2740,  2745,  2771,  2772,  2774,  2778,
-    2779,  2783,  2785,  2787,  2789,  2791,  2793,  2800,  2802,  2804,
-    2806,  2808,  2810,  2815,  2820,  2822,  2824,  2842,  2844,  2849,
-    2850
+     726,   728,   730,   740,   742,   753,   754,   756,   760,   762,
+     766,   767,   772,   773,   777,   782,   783,   787,   789,   795,
+     796,   800,   802,   804,   806,   812,   813,   817,   819,   824,
+     826,   828,   833,   835,   840,   842,   846,   849,   853,   856,
+     860,   862,   864,   866,   871,   873,   875,   880,   882,   884,
+     886,   888,   893,   895,   897,   899,   904,   916,   917,   922,
+     924,   929,   933,   935,   937,   939,   941,   947,   948,   954,
+     955,   959,   960,   965,   967,   973,   974,   976,   981,   983,
+     990,   992,   996,   997,  1002,  1004,  1008,  1009,  1013,  1015,
+    1019,  1020,  1024,  1025,  1029,  1030,  1045,  1046,  1047,  1048,
+    1049,  1053,  1058,  1065,  1075,  1080,  1085,  1093,  1098,  1103,
+    1108,  1113,  1121,  1143,  1148,  1155,  1157,  1164,  1169,  1174,
+    1185,  1190,  1195,  1200,  1205,  1214,  1219,  1227,  1228,  1229,
+    1230,  1236,  1241,  1249,  1250,  1251,  1252,  1256,  1257,  1258,
+    1259,  1264,  1265,  1274,  1275,  1280,  1281,  1286,  1288,  1290,
+    1292,  1294,  1297,  1296,  1308,  1309,  1311,  1321,  1322,  1327,
+    1331,  1333,  1335,  1337,  1339,  1341,  1343,  1345,  1350,  1352,
+    1354,  1356,  1358,  1360,  1362,  1364,  1366,  1368,  1370,  1372,
+    1374,  1380,  1381,  1383,  1385,  1387,  1392,  1393,  1399,  1400,
+    1402,  1404,  1409,  1411,  1413,  1415,  1420,  1421,  1423,  1425,
+    1430,  1431,  1433,  1438,  1439,  1441,  1443,  1448,  1450,  1452,
+    1457,  1458,  1462,  1464,  1470,  1469,  1473,  1475,  1480,  1482,
+    1488,  1489,  1494,  1495,  1497,  1498,  1507,  1508,  1510,  1512,
+    1517,  1519,  1525,  1526,  1528,  1531,  1534,  1539,  1540,  1545,
+    1550,  1554,  1556,  1562,  1561,  1568,  1570,  1576,  1577,  1585,
+    1586,  1590,  1591,  1592,  1594,  1596,  1603,  1604,  1606,  1608,
+    1613,  1614,  1620,  1621,  1625,  1626,  1631,  1632,  1633,  1635,
+    1643,  1644,  1646,  1649,  1651,  1655,  1656,  1657,  1659,  1661,
+    1665,  1670,  1678,  1679,  1688,  1690,  1695,  1696,  1697,  1701,
+    1702,  1703,  1707,  1708,  1709,  1713,  1714,  1715,  1720,  1721,
+    1722,  1723,  1729,  1730,  1732,  1737,  1738,  1743,  1744,  1745,
+    1746,  1747,  1762,  1763,  1768,  1769,  1775,  1777,  1780,  1782,
+    1784,  1807,  1808,  1810,  1812,  1817,  1818,  1820,  1825,  1830,
+    1831,  1837,  1836,  1840,  1844,  1846,  1848,  1854,  1855,  1860,
+    1865,  1867,  1872,  1874,  1875,  1877,  1882,  1884,  1886,  1891,
+    1893,  1898,  1903,  1911,  1917,  1916,  1930,  1931,  1936,  1937,
+    1941,  1946,  1951,  1959,  1964,  1975,  1976,  1987,  1988,  1994,
+    1995,  1999,  2000,  2001,  2004,  2003,  2014,  2023,  2029,  2035,
+    2044,  2050,  2056,  2062,  2068,  2076,  2082,  2090,  2096,  2105,
+    2106,  2107,  2111,  2115,  2117,  2122,  2123,  2127,  2128,  2133,
+    2139,  2140,  2143,  2145,  2146,  2150,  2151,  2152,  2153,  2187,
+    2189,  2190,  2192,  2197,  2202,  2207,  2209,  2211,  2216,  2218,
+    2220,  2222,  2227,  2229,  2238,  2240,  2241,  2246,  2248,  2250,
+    2255,  2257,  2259,  2264,  2266,  2268,  2277,  2278,  2279,  2283,
+    2285,  2287,  2292,  2294,  2296,  2301,  2303,  2305,  2320,  2322,
+    2323,  2325,  2330,  2331,  2336,  2338,  2340,  2345,  2347,  2349,
+    2351,  2356,  2358,  2360,  2370,  2372,  2373,  2375,  2380,  2382,
+    2384,  2389,  2391,  2393,  2395,  2400,  2402,  2404,  2435,  2437,
+    2438,  2440,  2445,  2450,  2458,  2460,  2462,  2467,  2469,  2474,
+    2476,  2490,  2491,  2493,  2498,  2500,  2502,  2504,  2506,  2511,
+    2512,  2514,  2516,  2521,  2523,  2525,  2531,  2533,  2535,  2539,
+    2541,  2543,  2545,  2559,  2560,  2562,  2567,  2569,  2571,  2573,
+    2575,  2580,  2581,  2583,  2585,  2590,  2592,  2594,  2600,  2601,
+    2603,  2612,  2615,  2617,  2620,  2622,  2624,  2637,  2638,  2640,
+    2645,  2647,  2649,  2651,  2653,  2658,  2659,  2661,  2663,  2668,
+    2670,  2678,  2679,  2680,  2685,  2686,  2690,  2692,  2694,  2696,
+    2698,  2700,  2707,  2709,  2711,  2713,  2715,  2717,  2719,  2721,
+    2723,  2725,  2730,  2732,  2734,  2739,  2765,  2766,  2768,  2772,
+    2773,  2777,  2779,  2781,  2783,  2785,  2787,  2794,  2796,  2798,
+    2800,  2802,  2804,  2809,  2814,  2816,  2818,  2836,  2838,  2843,
+    2844
 };
 #endif
@@ -5098,5 +5098,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_link( (yyvsp[(3) - (4)].en) ) ) );
+			(yyval.en) = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(1) - (4)].en) )->set_last( (yyvsp[(3) - (4)].en) ) ) );
 		}
     break;
@@ -5106,5 +5106,5 @@
 /* Line 1806 of yacc.c  */
 #line 398 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -5120,5 +5120,5 @@
 /* Line 1806 of yacc.c  */
 #line 409 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5593,5 +5593,5 @@
 /* Line 1806 of yacc.c  */
 #line 629 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
 
@@ -5600,5 +5600,5 @@
 /* Line 1806 of yacc.c  */
 #line 631 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
+    { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
 
@@ -5607,5 +5607,5 @@
 /* Line 1806 of yacc.c  */
 #line 637 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -5638,5 +5638,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			(yyval.sn) = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_link( (yyvsp[(4) - (6)].en) ) ) ) ) );
+			(yyval.sn) = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( (yyvsp[(2) - (6)].en) )->set_last( (yyvsp[(4) - (6)].en) ) ) ) ) );
 		}
     break;
@@ -5669,5 +5669,5 @@
 /* Line 1806 of yacc.c  */
 #line 694 "parser.yy"
-    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
+    { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
 
@@ -5676,5 +5676,5 @@
 /* Line 1806 of yacc.c  */
 #line 699 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+    { (yyval.sn) = new StatementNode2( (yyvsp[(1) - (1)].decl) ); }
     break;
 
@@ -5684,7 +5684,7 @@
 #line 701 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
-			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
+			(yyval.sn) = new StatementNode2( (yyvsp[(2) - (2)].decl) );
 		}
     break;
@@ -5694,5 +5694,5 @@
 /* Line 1806 of yacc.c  */
 #line 707 "parser.yy"
-    { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
+    { (yyval.sn) = new StatementNode2( (yyvsp[(1) - (1)].decl) ); }
     break;
 
@@ -5701,5 +5701,5 @@
 /* Line 1806 of yacc.c  */
 #line 714 "parser.yy"
-    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
+    { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
 
@@ -5743,5 +5743,5 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) : sw;
 		}
     break;
@@ -5760,5 +5760,5 @@
     {
 			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
-			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( (yyvsp[(7) - (9)].decl) ))->set_link( sw )) ) : sw;
+			(yyval.sn) = (yyvsp[(7) - (9)].decl) != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( (yyvsp[(7) - (9)].decl) ))->set_last( sw )) ) : sw;
 		}
     break;
@@ -5781,5 +5781,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 760 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
@@ -5788,6 +5788,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
-    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode2( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
+#line 762 "parser.yy"
+    { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode2( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
 
@@ -5795,12 +5795,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 766 "parser.yy"
+    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
+    break;
+
+  case 161:
+
+/* Line 1806 of yacc.c  */
 #line 767 "parser.yy"
-    { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
-    break;
-
-  case 161:
-
-/* Line 1806 of yacc.c  */
-#line 768 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_default() ); }
     break;
@@ -5809,6 +5809,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 774 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
+#line 773 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     break;
 
@@ -5816,5 +5816,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 777 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5823,5 +5823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
+#line 782 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5830,5 +5830,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 788 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5837,6 +5837,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
+#line 790 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
 
@@ -5844,5 +5844,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 796 "parser.yy"
+#line 795 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5851,5 +5851,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5858,5 +5858,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 804 "parser.yy"
+#line 803 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5865,6 +5865,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 806 "parser.yy"
-    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
+#line 805 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
 
@@ -5872,6 +5872,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 808 "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) ) ) ) ) ) ); }
+#line 807 "parser.yy"
+    { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
 
@@ -5879,5 +5879,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 813 "parser.yy"
+#line 812 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
     break;
@@ -5886,5 +5886,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 818 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5893,5 +5893,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 821 "parser.yy"
+#line 820 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5900,5 +5900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
+#line 825 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
@@ -5907,5 +5907,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 828 "parser.yy"
+#line 827 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     break;
@@ -5914,5 +5914,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 830 "parser.yy"
+#line 829 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
@@ -5921,5 +5921,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 835 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5928,5 +5928,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 837 "parser.yy"
+#line 836 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5935,5 +5935,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
+#line 841 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
@@ -5942,5 +5942,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 846 "parser.yy"
+#line 845 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5949,5 +5949,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
+#line 848 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Continue ) ); }
     break;
@@ -5956,5 +5956,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 853 "parser.yy"
+#line 852 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); delete (yyvsp[(2) - (3)].tok); }
     break;
@@ -5963,5 +5963,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 856 "parser.yy"
+#line 855 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( "", BranchStmt::Break ) ); }
     break;
@@ -5970,5 +5970,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
+#line 859 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_branch( *(yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); delete (yyvsp[(2) - (3)].tok); }
     break;
@@ -5977,5 +5977,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 862 "parser.yy"
+#line 861 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5984,5 +5984,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 864 "parser.yy"
+#line 863 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5991,5 +5991,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 865 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
@@ -5998,5 +5998,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 867 "parser.yy"
     { (yyval.sn) = new StatementNode2( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
@@ -6005,6 +6005,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
+#line 872 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     break;
 
@@ -6012,6 +6012,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
+#line 874 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     break;
 
@@ -6019,81 +6019,77 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 876 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
+    break;
+
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 883 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 885 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode2( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 887 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
+    break;
+
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 889 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode2( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
+    break;
+
+  case 202:
+
+/* Line 1806 of yacc.c  */
+#line 894 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 896 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode2( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 898 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
+    break;
+
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 900 "parser.yy"
+    { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode2( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
+    break;
+
+  case 206:
+
+/* Line 1806 of yacc.c  */
+#line 905 "parser.yy"
     {
-			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
-			(yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (4)].sn),*(yyvsp[(3) - (4)].pn) ))));
+			(yyval.sn) = new StatementNode2( build_finally( (yyvsp[(2) - (2)].sn) ) );
 		}
     break;
 
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 888 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 892 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
-    break;
-
-  case 201:
-
-/* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
-    break;
-
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 899 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
-    { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
-    break;
-
-  case 205:
-
-/* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
-    { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
-    break;
-
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 910 "parser.yy"
-    {
-			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
-			std::cout << "Just created a finally node" << std::endl;
-		}
-    break;
-
   case 208:
 
 /* Line 1806 of yacc.c  */
-#line 924 "parser.yy"
+#line 918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6105,5 +6101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
+#line 923 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6112,5 +6108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+#line 925 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6122,33 +6118,33 @@
 
 /* Line 1806 of yacc.c  */
+#line 934 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
+    break;
+
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 936 "parser.yy"
+    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
+    break;
+
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 938 "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;
+
+  case 215:
+
+/* Line 1806 of yacc.c  */
 #line 940 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
-    break;
-
-  case 213:
+    { (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)].en) ); }
+    break;
+
+  case 216:
 
 /* Line 1806 of yacc.c  */
 #line 942 "parser.yy"
-    { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
-    break;
-
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 944 "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;
-
-  case 215:
-
-/* Line 1806 of yacc.c  */
-#line 946 "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)].en) ); }
-    break;
-
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 948 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6157,5 +6153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 953 "parser.yy"
+#line 947 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6164,5 +6160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 949 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6171,5 +6167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 954 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6178,6 +6174,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 967 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
+#line 961 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
@@ -6185,5 +6181,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
+#line 966 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6192,5 +6188,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
+#line 968 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6199,5 +6195,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
+#line 973 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6206,5 +6202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
+#line 975 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6213,6 +6209,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 983 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
+#line 977 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
@@ -6220,5 +6216,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 982 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6227,5 +6223,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 990 "parser.yy"
+#line 984 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6234,5 +6230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 997 "parser.yy"
+#line 991 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6241,5 +6237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1004 "parser.yy"
+#line 998 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6248,5 +6244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1009 "parser.yy"
+#line 1003 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6255,5 +6251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+#line 1010 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6262,5 +6258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+#line 1024 "parser.yy"
     {}
     break;
@@ -6269,5 +6265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1031 "parser.yy"
+#line 1025 "parser.yy"
     {}
     break;
@@ -6276,5 +6272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1060 "parser.yy"
+#line 1054 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6286,5 +6282,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+#line 1061 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6296,5 +6292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1066 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6306,5 +6302,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+#line 1076 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6316,5 +6312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+#line 1081 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6326,5 +6322,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1092 "parser.yy"
+#line 1086 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6336,5 +6332,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+#line 1094 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6346,5 +6342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+#line 1099 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6356,5 +6352,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1110 "parser.yy"
+#line 1104 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6366,5 +6362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1115 "parser.yy"
+#line 1109 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6376,5 +6372,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1120 "parser.yy"
+#line 1114 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6386,5 +6382,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1128 "parser.yy"
+#line 1122 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6395,5 +6391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1151 "parser.yy"
+#line 1145 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6404,5 +6400,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1155 "parser.yy"
+#line 1149 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6413,5 +6409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+#line 1156 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6420,5 +6416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+#line 1160 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6427,5 +6423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1171 "parser.yy"
+#line 1165 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6437,5 +6433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1176 "parser.yy"
+#line 1170 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6447,5 +6443,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1181 "parser.yy"
+#line 1175 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6457,5 +6453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+#line 1186 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6467,5 +6463,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1191 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6477,5 +6473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1202 "parser.yy"
+#line 1196 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6487,5 +6483,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1207 "parser.yy"
+#line 1201 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6497,5 +6493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+#line 1206 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6507,5 +6503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1221 "parser.yy"
+#line 1215 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6517,5 +6513,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1226 "parser.yy"
+#line 1220 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6527,5 +6523,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1243 "parser.yy"
+#line 1237 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6537,5 +6533,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1248 "parser.yy"
+#line 1242 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6547,5 +6543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1270 "parser.yy"
+#line 1264 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6554,5 +6550,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+#line 1276 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6561,40 +6557,40 @@
 
 /* Line 1806 of yacc.c  */
+#line 1287 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+    break;
+
+  case 298:
+
+/* Line 1806 of yacc.c  */
+#line 1289 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+    break;
+
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1291 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+    break;
+
+  case 300:
+
+/* Line 1806 of yacc.c  */
 #line 1293 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
-    break;
-
-  case 298:
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
+    break;
+
+  case 301:
 
 /* Line 1806 of yacc.c  */
 #line 1295 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
-    break;
-
-  case 299:
+    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
+    break;
+
+  case 302:
 
 /* Line 1806 of yacc.c  */
 #line 1297 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
-    break;
-
-  case 300:
-
-/* Line 1806 of yacc.c  */
-#line 1299 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
-    break;
-
-  case 301:
-
-/* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
-    break;
-
-  case 302:
-
-/* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6605,5 +6601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+#line 1301 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6615,5 +6611,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+#line 1310 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6622,5 +6618,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1318 "parser.yy"
+#line 1312 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6629,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1323 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6636,54 +6632,54 @@
 
 /* Line 1806 of yacc.c  */
+#line 1332 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+    break;
+
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1334 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+    break;
+
+  case 312:
+
+/* Line 1806 of yacc.c  */
+#line 1336 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+    break;
+
+  case 313:
+
+/* Line 1806 of yacc.c  */
 #line 1338 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
-    break;
-
-  case 311:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+    break;
+
+  case 314:
 
 /* Line 1806 of yacc.c  */
 #line 1340 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
-    break;
-
-  case 312:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+    break;
+
+  case 315:
 
 /* Line 1806 of yacc.c  */
 #line 1342 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
-    break;
-
-  case 313:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+    break;
+
+  case 316:
 
 /* Line 1806 of yacc.c  */
 #line 1344 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
-    break;
-
-  case 314:
+    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+    break;
+
+  case 317:
 
 /* Line 1806 of yacc.c  */
 #line 1346 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
-    break;
-
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
-    break;
-
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
-    break;
-
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6692,89 +6688,89 @@
 
 /* Line 1806 of yacc.c  */
+#line 1351 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+    break;
+
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1353 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+    break;
+
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1355 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+    break;
+
+  case 321:
+
+/* Line 1806 of yacc.c  */
 #line 1357 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
-    break;
-
-  case 319:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+    break;
+
+  case 322:
 
 /* Line 1806 of yacc.c  */
 #line 1359 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
-    break;
-
-  case 320:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
+    break;
+
+  case 323:
 
 /* Line 1806 of yacc.c  */
 #line 1361 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
-    break;
-
-  case 321:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
+    break;
+
+  case 324:
 
 /* Line 1806 of yacc.c  */
 #line 1363 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
-    break;
-
-  case 322:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
+    break;
+
+  case 325:
 
 /* Line 1806 of yacc.c  */
 #line 1365 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
-    break;
-
-  case 323:
+    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
+    break;
+
+  case 326:
 
 /* Line 1806 of yacc.c  */
 #line 1367 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
-    break;
-
-  case 324:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+    break;
+
+  case 327:
 
 /* Line 1806 of yacc.c  */
 #line 1369 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
-    break;
-
-  case 325:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+    break;
+
+  case 328:
 
 /* Line 1806 of yacc.c  */
 #line 1371 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
-    break;
-
-  case 326:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
+    break;
+
+  case 329:
 
 /* Line 1806 of yacc.c  */
 #line 1373 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
-    break;
-
-  case 327:
+    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+    break;
+
+  case 330:
 
 /* Line 1806 of yacc.c  */
 #line 1375 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
-    break;
-
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1377 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
-    break;
-
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
-    break;
-
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6783,166 +6779,166 @@
 
 /* Line 1806 of yacc.c  */
+#line 1382 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1384 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1386 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 335:
+
+/* Line 1806 of yacc.c  */
 #line 1388 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1394 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1401 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1403 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1405 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1410 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
+    break;
+
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1412 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1414 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1422 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1424 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1426 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1434 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
-    break;
-
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1428 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1440 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1442 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1444 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1449 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
+    break;
+
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1451 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1453 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1446 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1448 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1450 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1455 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1457 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1459 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 362:
 
 /* Line 1806 of yacc.c  */
-#line 1469 "parser.yy"
+#line 1463 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6951,5 +6947,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
+#line 1465 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6961,26 +6957,26 @@
 
 /* Line 1806 of yacc.c  */
+#line 1470 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+    break;
+
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1472 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
+    break;
+
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1474 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+    break;
+
+  case 367:
+
+/* Line 1806 of yacc.c  */
 #line 1476 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
-    break;
-
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
-    break;
-
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
-    break;
-
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1482 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -6989,5 +6985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1481 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -6996,5 +6992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+#line 1483 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7003,5 +6999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1494 "parser.yy"
+#line 1488 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7010,12 +7006,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1490 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
+    break;
+
+  case 373:
+
+/* Line 1806 of yacc.c  */
 #line 1496 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 373:
-
-/* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7024,7 +7020,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 1505 "parser.yy"
+#line 1499 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (3)].decl);
@@ -7035,5 +7031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1515 "parser.yy"
+#line 1509 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7042,5 +7038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+#line 1511 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7049,5 +7045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+#line 1513 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7056,5 +7052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
+#line 1518 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7063,5 +7059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+#line 1520 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7070,5 +7066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
+#line 1525 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7077,26 +7073,26 @@
 
 /* Line 1806 of yacc.c  */
+#line 1527 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1530 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 385:
+
+/* Line 1806 of yacc.c  */
 #line 1533 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 385:
+  case 387:
 
 /* Line 1806 of yacc.c  */
 #line 1539 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
-    break;
-
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7105,5 +7101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1547 "parser.yy"
+#line 1541 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7112,5 +7108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
+#line 1546 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7119,5 +7115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
+#line 1555 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7126,5 +7122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1563 "parser.yy"
+#line 1557 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7136,5 +7132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1568 "parser.yy"
+#line 1562 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7143,5 +7139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1570 "parser.yy"
+#line 1564 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7150,5 +7146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
+#line 1569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7157,5 +7153,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+#line 1571 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7164,5 +7160,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1582 "parser.yy"
+#line 1576 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7171,5 +7167,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+#line 1578 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7178,5 +7174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+#line 1585 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7185,5 +7181,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1599 "parser.yy"
+#line 1593 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7192,5 +7188,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
+#line 1595 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7199,5 +7195,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1603 "parser.yy"
+#line 1597 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7206,5 +7202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1611 "parser.yy"
+#line 1605 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7213,5 +7209,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1613 "parser.yy"
+#line 1607 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7220,12 +7216,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1609 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
+    break;
+
+  case 411:
+
+/* Line 1806 of yacc.c  */
 #line 1615 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
-    break;
-
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1621 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7234,5 +7230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1626 "parser.yy"
+#line 1620 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7241,5 +7237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
+#line 1627 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7248,5 +7244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1640 "parser.yy"
+#line 1634 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7255,5 +7251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
+#line 1636 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7262,5 +7258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1645 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7269,5 +7265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1654 "parser.yy"
+#line 1648 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7276,5 +7272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1656 "parser.yy"
+#line 1650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7283,12 +7279,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1660 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 430:
+
+/* Line 1806 of yacc.c  */
 #line 1666 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 430:
-
-/* Line 1806 of yacc.c  */
-#line 1672 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7300,5 +7296,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1677 "parser.yy"
+#line 1671 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7310,5 +7306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+#line 1680 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7317,5 +7313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+#line 1689 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7324,5 +7320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1697 "parser.yy"
+#line 1691 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7331,5 +7327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1722 "parser.yy"
+#line 1716 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7338,5 +7334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1730 "parser.yy"
+#line 1724 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7345,5 +7341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+#line 1729 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7352,33 +7348,33 @@
 
 /* Line 1806 of yacc.c  */
+#line 1731 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
+    break;
+
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1733 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 455:
+
+/* Line 1806 of yacc.c  */
 #line 1737 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1739 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 455:
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 456:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 457:
 
 /* Line 1806 of yacc.c  */
 #line 1743 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1749 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7387,5 +7383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1751 "parser.yy"
+#line 1745 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7394,6 +7390,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1752 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
+#line 1746 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
@@ -7401,6 +7397,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1754 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+#line 1748 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
@@ -7408,19 +7404,19 @@
 
 /* Line 1806 of yacc.c  */
+#line 1764 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
+    break;
+
+  case 465:
+
+/* Line 1806 of yacc.c  */
 #line 1770 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
-    break;
-
-  case 465:
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 466:
 
 /* Line 1806 of yacc.c  */
 #line 1776 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
-    break;
-
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7429,26 +7425,26 @@
 
 /* Line 1806 of yacc.c  */
+#line 1779 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1781 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+    break;
+
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1783 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
+    break;
+
+  case 470:
+
+/* Line 1806 of yacc.c  */
 #line 1785 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
-    break;
-
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
-    break;
-
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
-    break;
-
-  case 470:
-
-/* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7457,5 +7453,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+#line 1809 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7464,5 +7460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+#line 1811 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7471,12 +7467,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1813 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 476:
+
+/* Line 1806 of yacc.c  */
 #line 1819 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 476:
-
-/* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7485,5 +7481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+#line 1821 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7492,12 +7488,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1826 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+    break;
+
+  case 480:
+
+/* Line 1806 of yacc.c  */
 #line 1832 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
-    break;
-
-  case 480:
-
-/* Line 1806 of yacc.c  */
-#line 1838 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7506,5 +7502,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1843 "parser.yy"
+#line 1837 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7513,12 +7509,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 1839 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 484:
+
+/* Line 1806 of yacc.c  */
 #line 1845 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 484:
-
-/* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7527,5 +7523,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1853 "parser.yy"
+#line 1847 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7534,5 +7530,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+#line 1849 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7541,5 +7537,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1860 "parser.yy"
+#line 1854 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7548,5 +7544,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1856 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7555,5 +7551,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
+#line 1861 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7565,5 +7561,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1872 "parser.yy"
+#line 1866 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7572,5 +7568,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1874 "parser.yy"
+#line 1868 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7579,5 +7575,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
+#line 1873 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
@@ -7586,6 +7582,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+#line 1876 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
 
@@ -7593,6 +7589,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
+#line 1878 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7600,5 +7596,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1889 "parser.yy"
+#line 1883 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7607,5 +7603,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1885 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7614,5 +7610,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+#line 1887 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7621,5 +7617,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7628,5 +7624,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1894 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7635,5 +7631,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+#line 1899 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7645,5 +7641,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1910 "parser.yy"
+#line 1904 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7655,5 +7651,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+#line 1912 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7665,5 +7661,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+#line 1917 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7675,5 +7671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1928 "parser.yy"
+#line 1922 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7686,5 +7682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+#line 1932 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7693,5 +7689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+#line 1942 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7703,5 +7699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+#line 1947 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7713,5 +7709,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1958 "parser.yy"
+#line 1952 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7723,5 +7719,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+#line 1960 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7733,5 +7729,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1971 "parser.yy"
+#line 1965 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7743,5 +7739,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1981 "parser.yy"
+#line 1975 "parser.yy"
     {}
     break;
@@ -7750,5 +7746,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1983 "parser.yy"
+#line 1977 "parser.yy"
     {
 			if ( theTree ) {
@@ -7763,5 +7759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+#line 1989 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7770,5 +7766,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
+#line 1994 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7777,5 +7773,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
+#line 2002 "parser.yy"
     {}
     break;
@@ -7784,5 +7780,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+#line 2004 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7794,5 +7790,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2015 "parser.yy"
+#line 2009 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7805,7 +7801,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 2021 "parser.yy"
+#line 2015 "parser.yy"
     {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			(yyval.decl) = (yyvsp[(2) - (2)].decl);
@@ -7816,5 +7812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2036 "parser.yy"
+#line 2030 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7827,5 +7823,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2042 "parser.yy"
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7838,5 +7834,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+#line 2045 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7849,5 +7845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
+#line 2051 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7858,4 +7854,15 @@
 
   case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2057 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addFunctionBody( (yyvsp[(3) - (3)].sn) )->addQualifiers( (yyvsp[(1) - (3)].decl) );
+		}
+    break;
+
+  case 533:
 
 /* Line 1806 of yacc.c  */
@@ -7868,19 +7875,8 @@
     break;
 
-  case 533:
+  case 534:
 
 /* Line 1806 of yacc.c  */
 #line 2069 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			(yyval.decl) = (yyvsp[(2) - (3)].decl)->addFunctionBody( (yyvsp[(3) - (3)].sn) )->addQualifiers( (yyvsp[(1) - (3)].decl) );
-		}
-    break;
-
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7893,5 +7889,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2083 "parser.yy"
+#line 2077 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7904,5 +7900,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2089 "parser.yy"
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7915,5 +7911,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2097 "parser.yy"
+#line 2091 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7926,5 +7922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2103 "parser.yy"
+#line 2097 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7937,5 +7933,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2118 "parser.yy"
+#line 2112 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7944,5 +7940,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2128 "parser.yy"
+#line 2122 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7951,12 +7947,12 @@
 
 /* Line 1806 of yacc.c  */
+#line 2129 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 549:
+
+/* Line 1806 of yacc.c  */
 #line 2135 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2141 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7965,5 +7961,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2156 "parser.yy"
+#line 2150 "parser.yy"
     {}
     break;
@@ -7972,5 +7968,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2157 "parser.yy"
+#line 2151 "parser.yy"
     {}
     break;
@@ -7979,5 +7975,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2158 "parser.yy"
+#line 2152 "parser.yy"
     {}
     break;
@@ -7986,5 +7982,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+#line 2153 "parser.yy"
     {}
     break;
@@ -7993,5 +7989,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
+#line 2188 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8000,5 +7996,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
+#line 2191 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8007,5 +8003,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2199 "parser.yy"
+#line 2193 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8014,5 +8010,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2198 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8024,5 +8020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2209 "parser.yy"
+#line 2203 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8031,5 +8027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+#line 2208 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8038,5 +8034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+#line 2210 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8045,5 +8041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+#line 2212 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8052,397 +8048,397 @@
 
 /* Line 1806 of yacc.c  */
+#line 2217 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2219 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2221 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 571:
+
+/* Line 1806 of yacc.c  */
 #line 2223 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2228 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2230 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2239 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2242 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2247 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2249 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2251 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2256 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2258 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2260 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2265 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2267 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2269 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2284 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
+    break;
+
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2293 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2295 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2302 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2304 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2324 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2326 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2337 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2339 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2348 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2357 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2359 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2361 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2374 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
+  case 617:
+
+/* Line 1806 of yacc.c  */
+#line 2376 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2381 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2383 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2390 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2392 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2394 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2401 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2273 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2275 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2301 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2308 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2310 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2312 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2436 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2439 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2441 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2363 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2367 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
-
-/* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2407 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
   case 632:
 
 /* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+#line 2446 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8454,5 +8450,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2457 "parser.yy"
+#line 2451 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8464,5 +8460,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2459 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8471,5 +8467,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2467 "parser.yy"
+#line 2461 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8478,5 +8474,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+#line 2463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8485,5 +8481,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+#line 2468 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8492,5 +8488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
+#line 2470 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8499,5 +8495,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8506,5 +8502,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8513,5 +8509,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+#line 2492 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8520,5 +8516,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+#line 2494 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8527,348 +8523,348 @@
 
 /* Line 1806 of yacc.c  */
+#line 2499 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2501 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2503 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
 #line 2505 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2513 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2515 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2517 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2522 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
+    break;
+
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2526 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2540 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2561 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2563 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2568 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2570 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2509 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2572 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2511 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2574 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2513 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2582 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2584 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2586 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2528 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2591 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2530 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2593 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2595 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2538 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2602 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2613 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2616 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2618 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2621 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2623 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2625 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2646 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2648 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2650 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2652 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2654 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2660 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2599 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2601 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2629 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2654 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2668 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
   case 703:
 
 /* Line 1806 of yacc.c  */
-#line 2687 "parser.yy"
+#line 2681 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8877,51 +8873,72 @@
 
 /* Line 1806 of yacc.c  */
+#line 2691 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2693 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2695 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
 #line 2697 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2699 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2699 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2701 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2701 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2703 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2705 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2707 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
   case 712:
 
 /* Line 1806 of yacc.c  */
+#line 2708 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2710 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2712 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
 #line 2714 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 713:
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 716:
 
 /* Line 1806 of yacc.c  */
@@ -8930,33 +8947,33 @@
     break;
 
-  case 714:
+  case 717:
 
 /* Line 1806 of yacc.c  */
 #line 2718 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2720 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2720 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 718:
+  case 721:
 
 /* Line 1806 of yacc.c  */
@@ -8965,103 +8982,103 @@
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2731 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2733 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2738 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2740 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2767 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2780 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2782 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2784 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2786 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2788 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2795 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2797 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2730 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2799 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2744 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2746 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2784 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2786 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2788 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2790 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2792 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2794 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 737:
+  case 740:
 
 /* Line 1806 of yacc.c  */
@@ -9070,5 +9087,5 @@
     break;
 
-  case 738:
+  case 741:
 
 /* Line 1806 of yacc.c  */
@@ -9077,5 +9094,5 @@
     break;
 
-  case 739:
+  case 742:
 
 /* Line 1806 of yacc.c  */
@@ -9084,29 +9101,8 @@
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
   case 743:
 
 /* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
+#line 2810 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9115,5 +9111,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2821 "parser.yy"
+#line 2815 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9122,5 +9118,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2823 "parser.yy"
+#line 2817 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9129,5 +9125,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2825 "parser.yy"
+#line 2819 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9136,5 +9132,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2849 "parser.yy"
+#line 2843 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9143,5 +9139,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2851 "parser.yy"
+#line 2845 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9150,5 +9146,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9153 "Parser/parser.cc"
+#line 9149 "Parser/parser.cc"
       default: break;
     }
@@ -9381,5 +9377,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2854 "parser.yy"
+#line 2848 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/Parser/parser.yy	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 11 18:02:57 2016
-// Update Count     : 1861
+// Last Modified On : Sat Aug 13 18:59:02 2016
+// Update Count     : 1877
 //
 
@@ -162,5 +162,5 @@
 %type<sn> case_value_list				case_label					case_label_list
 %type<sn> switch_clause_list_opt		switch_clause_list			choose_clause_list_opt		choose_clause_list
-%type<pn> handler_list					handler_clause				finally_clause
+%type<sn> handler_list					handler_clause				finally_clause
 
 // declarations
@@ -389,5 +389,5 @@
 			Token fn;
 			fn.str = new std::string( "?{}" ); // location undefined
-			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_link( $3 ) ) );
+			$$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) );
 		}
 	;
@@ -396,5 +396,5 @@
 	argument_expression
 	| argument_expression_list ',' argument_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -407,5 +407,5 @@
 field_list:												// CFA, tuple field selector
 	field
-	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -627,7 +627,7 @@
 		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
 	| '[' push ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( $4 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
-		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_link( $5 ) ) ); }
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
 	;
 
@@ -635,5 +635,5 @@
 	assignment_expression_opt
 	| tuple_expression_list ',' assignment_expression_opt
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -665,5 +665,5 @@
 			Token fn;
 			fn.str = new std::string( "^?{}" ); // location undefined
-			$$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_link( $4 ) ) ) ) );
+			$$ = new StatementNode2( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
 		}
 	;
@@ -692,18 +692,18 @@
 	block_item
 	| block_item_list push block_item
-		{ if ( $1 != 0 ) { $1->set_link( $3 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
 	;
 
 block_item:
 	declaration											// CFA, new & old style declarations
-		{ $$ = new StatementNode( $1 ); }
+		{ $$ = new StatementNode2( $1 ); }
 	| EXTENSION declaration								// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
-			$$ = new StatementNode( $2 );
+			$$ = new StatementNode2( $2 );
 		}
 	| function_definition
-		{ $$ = new StatementNode( $1 ); }
+		{ $$ = new StatementNode2( $1 ); }
 	| statement pop
 	;
@@ -712,5 +712,5 @@
 	statement
 	| statement_list statement
-		{ if ( $1 != 0 ) { $1->set_link( $2 ); $$ = $1; } }
+		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
 	;
 
@@ -736,5 +736,5 @@
 			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
 			// statement.
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw;
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
@@ -743,5 +743,5 @@
 		{
 			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
-			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
+			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode2( $7 ))->set_last( sw )) ) : sw;
 		}
 	;
@@ -758,8 +758,7 @@
 
 case_value_list:										// CFA
-	//case_value									{ $$ = new StatementNode( StatementNode::Case, $1, 0 ); }
 	case_value									{ $$ = new StatementNode2( build_case( $1 ) ); }
 		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
-	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_link( new StatementNode2( build_case( $3 ) ) ) ); }
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_last( new StatementNode2( build_case( $3 ) ) ) ); }
 	;
 
@@ -772,5 +771,5 @@
 case_label_list:										// CFA
 	case_label
-	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_link( $2 )); }
+	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_last( $2 )); }
 	;
 
@@ -789,5 +788,5 @@
 		{ $$ = $1->append_last_case( new CompoundStmtNode( $2 ) ); }
 	| switch_clause_list case_label_list statement_list
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( $3 ) ) ) ); }
 	;
 
@@ -804,7 +803,7 @@
 		{ $$ = $1->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$2, *$3 ) ) ) ); }
 	| choose_clause_list case_label_list fall_through
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( $3 ))); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
 	| choose_clause_list case_label_list statement_list fall_through_opt
-		{ $$ = (StatementNode *)( $1->set_link( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*$3, *$4 ) ) ) ) ) ); }
 	;
 
@@ -871,37 +870,33 @@
 exception_statement:
 	TRY compound_statement handler_list
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode2( build_try( $2, $3, 0 ) ); }
 	| TRY compound_statement finally_clause
-		{ $$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 )))); }
+		{ $$ = new StatementNode2( build_try( $2, 0, $3 ) ); }
 	| TRY compound_statement handler_list finally_clause
-		{
-			$3->set_link( $4 );
-			$$ = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*$2,*$3 ))));
-		}
+		{ $$ = new StatementNode2( build_try( $2, $3, $4 ) ); }
 	;
 
 handler_list:
-		// There must be at least one catch clause
 	handler_clause
 		// ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
 	| CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode2( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); }
 	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = StatementNode::newCatchStmt( 0, $5, true ); }
+		{ $$ = new StatementNode2( build_catch( 0, $5, true ) ); }
 	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( 0, $6, true ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( 0, $6, true ) ) ); }
 	;
 
 handler_clause:
 	CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode2( build_catch( $5, $8 ) ); }
 	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+	{ $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); }
 	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = StatementNode::newCatchStmt( $5, $8 ); }
+		{ $$ = new StatementNode2( build_catch( $5, $8 ) ); }
 	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = $1->set_link( StatementNode::newCatchStmt( $6, $9 ) ); }
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode2( build_catch( $6, $9 ) ) ); }
 	;
 
@@ -909,6 +904,5 @@
 	FINALLY compound_statement
 		{
-			$$ = new StatementNode( StatementNode::Finally, 0, $2 );
-			std::cout << "Just created a finally node" << std::endl;
+			$$ = new StatementNode2( build_finally( $2 ) );
 		}
 	;
@@ -965,5 +959,5 @@
 	asm_operand
 	| asm_operands_list ',' asm_operand
-		{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
 	;
 
@@ -981,5 +975,5 @@
 		{ $$ = new ExpressionNode( $1 ); }
 	| asm_clobbers_list_opt ',' string_literal_list
-	{ $$ = (ExpressionNode *)$1->set_link( new ExpressionNode( $3 ) ); }
+	{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
 	;
 
@@ -1504,5 +1498,5 @@
 	| EXTENSION field_declaring_list ';'				// GCC
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
@@ -1750,7 +1744,7 @@
 	| initializer
 	| designation initializer					{ $$ = $2->set_designators( $1 ); }
-	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_link( $3 ) ); }
+	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
 	| initializer_list ',' designation initializer
-		{ $$ = (InitializerNode *)( $1->set_link( $4->set_designators( $3 ) ) ); }
+		{ $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
 	;
 
@@ -1774,5 +1768,5 @@
 	designator
 	| designator_list designator
-		{ $$ = (ExpressionNode *)( $1->set_link( $2 ) ); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
 	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
 	;
@@ -1880,7 +1874,7 @@
 	| assignment_expression
 	| type_name_list ',' type_name
-		{ $$ = (ExpressionNode *)( $1->set_link( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
+		{ $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
 	| type_name_list ',' assignment_expression
-		{ $$ = (ExpressionNode *)( $1->set_link( $3 )); }
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
 	;
 
@@ -2020,5 +2014,5 @@
 	| EXTENSION external_definition
 		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_link() )
+			for ( DeclarationNode *iter = $2; iter != NULL; iter = (DeclarationNode *)iter->get_next() )
 				iter->set_extension( true );
 			$$ = $2;
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/SynTree/Statement.cc	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:25:20 2016
-// Update Count     : 61
+// Last Modified On : Fri Aug 12 13:58:48 2016
+// Update Count     : 62
 //
 
@@ -309,6 +309,6 @@
 }
 
-CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool isCatchRest ) :
-	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( isCatchRest ) {
+CatchStmt::CatchStmt( std::list<Label> labels, Declaration *_decl, Statement *_body, bool catchAny ) :
+	Statement( labels ), decl ( _decl ), body( _body ), catchRest ( catchAny ) {
 }
 
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/SynTree/Statement.h	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  4 11:26:02 2016
-// Update Count     : 64
+// Last Modified On : Fri Aug 12 13:57:46 2016
+// Update Count     : 65
 //
 
@@ -314,5 +314,5 @@
 class CatchStmt : public Statement {
   public:
-	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool isCatchRest = false );
+	CatchStmt( std::list<Label> labels, Declaration *decl, Statement *body, bool catchAny = false );
 	CatchStmt( const CatchStmt &other );
 	virtual ~CatchStmt();
Index: src/tests/exception.c
===================================================================
--- src/tests/exception.c	(revision 46b4259ad2f6b8cd730003c71f37b1a91ab7080a)
+++ src/tests/exception.c	(revision 1d4580a95e48c7e901f03961d6c83d9b379b8bd4)
@@ -11,5 +11,5 @@
 	x/4;
     } catch( int ) {
-    } catch( int x ) {
+    } catch( float x ) {
     } catch( struct { int i; } ) {
     } catch( struct { int i; } x ) {
@@ -21,5 +21,5 @@
     } catch( * struct { int i; } x ) {
     } catch( ... ) {
-//    } finally {
+    } finally {
     } // try
 }
