Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/ExpressionNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 12:28:40 2016
-// Update Count     : 482
+// Last Modified On : Wed Aug 10 11:07:38 2016
+// Update Count     : 486
 //
 
@@ -168,81 +168,7 @@
 //##############################################################################
 
-//Expression *build_varref( ExpressionNode expr ) {
-//	return new NameExpr( get_name(), maybeBuild<Expression>( get_argName() ) );
-//}
-
-// VarRefNode::VarRefNode( const string *name, bool labelp ) : ExpressionNode( nullptr, name ), isLabel( labelp ) {}
-
-// VarRefNode::VarRefNode( const VarRefNode &other ) : ExpressionNode( other ), isLabel( other.isLabel ) {}
-
-// Expression *VarRefNode::build() const {
-// 	return new NameExpr( get_name(), maybeBuild< Expression >( get_argName() ) );
-// }
-
-// void VarRefNode::printOneLine( std::ostream &os, int indent ) const {
-// 	printDesignation( os );
-// 	os << get_name() << ' ';
-// }
-
-// void VarRefNode::print( std::ostream &os, int indent ) const {
-// 	printDesignation( os );
-// 	os << string( indent, ' ' ) << "Referencing: ";
-// 	os << "Variable: " << get_name();
-// 	os << endl;
-// }
-
 NameExpr * build_varref( const string *name, bool labelp ) {
 	return new NameExpr( *name, nullptr );
 }
-
-//##############################################################################
-
-// DesignatorNode::DesignatorNode( ExpressionNode *expr, bool isArrayIndex, bool isVarRef ) : isArrayIndex( isArrayIndex ) {
-// 	set_argName( expr );
-// }
-
-// DesignatorNode::DesignatorNode( const DesignatorNode &other ) : ExpressionNode( other ), isArrayIndex( other.isArrayIndex ) {}
-
-// class DesignatorFixer : public Mutator {
-//   public:
-// 	virtual Expression* mutate( NameExpr *nameExpr ) {
-// 		if ( nameExpr->get_name() == "0" || nameExpr->get_name() == "1" ) {
-// 			Constant val( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nameExpr->get_name() );
-// 			delete nameExpr;
-// 			return new ConstantExpr( val );
-// 		}
-// 		return nameExpr;
-// 	}
-// };
-
-// Expression *DesignatorNode::build() const {
-// 	return maybeBuild<Expression>(get_argName());
-// }
-
-// void DesignatorNode::printOneLine( std::ostream &os, int indent ) const {
-// 	if ( get_argName() ) {
-// 		if ( isArrayIndex ) {
-// 			os << "[";
-// 			get_argName()->printOneLine( os, indent );
-// 			os << "]";
-// 		} else {
-// 			os << ".";
-// 			get_argName()->printOneLine( os, indent );
-// 		}
-// 	} // if
-// }
-
-// void DesignatorNode::print( std::ostream &os, int indent ) const {
-// 	if ( get_argName() ) {
-// 		if ( isArrayIndex ) {
-// 			os << "[";
-// 			get_argName()->print( os, indent );
-// 			os << "]";
-// 		} else {
-// 			os << ".";
-// 			get_argName()->print( os, indent );
-// 		}
-// 	} // if
-// }
 
 //##############################################################################
@@ -366,35 +292,4 @@
 //##############################################################################
 
-// Expression *AsmExprNode::build() const {
-// 	return new AsmExpr( maybeBuild< Expression >( inout ), (ConstantExpr *)maybeBuild<Expression>(constraint), maybeBuild<Expression>(operand) );
-// }
-
-// void AsmExprNode::print( std::ostream &os, int indent ) const {
-// 	os << string( indent, ' ' ) << "Assembler Expression:" << endl;
-// 	if ( inout ) {
-// 		os << string( indent, ' ' ) << "inout: " << std::endl;
-// 		inout->print( os, indent + 2 );
-// 	} // if
-// 	if ( constraint ) {
-// 		os << string( indent, ' ' ) << "constraint: " << std::endl;
-// 		constraint->print( os, indent + 2 );
-// 	} // if
-// 	if ( operand ) {
-// 		os << string( indent, ' ' ) << "operand: " << std::endl;
-// 		operand->print( os, indent + 2 );
-// 	} // if
-// }
-
-// void AsmExprNode::printOneLine( std::ostream &os, int indent ) const {
-// 	printDesignation( os );
-// 	os << "( ";
-// 	if ( inout ) inout->printOneLine( os, indent + 2 );
-// 	os << ", ";
-// 	if ( constraint ) constraint->printOneLine( os, indent + 2 );
-// 	os << ", ";
-// 	if ( operand ) operand->printOneLine( os, indent + 2 );
-// 	os << ") ";
-// }
-
 Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand ) {
 	return new AsmExpr( maybeBuild< Expression >( inout ), constraint, maybeBuild<Expression>(operand) );
@@ -409,26 +304,4 @@
 //##############################################################################
 
-// ValofExprNode::ValofExprNode( StatementNode *s ): body( s ) {}
-
-// ValofExprNode::ValofExprNode( const ValofExprNode &other ) : ExpressionNode( other ), body( maybeClone( body ) ) {
-// }
-
-// ValofExprNode::~ValofExprNode() {
-// 	delete body;
-// }
-
-// void ValofExprNode::print( std::ostream &os, int indent ) const {
-// 	os << string( indent, ' ' ) << "Valof Expression:" << std::endl;
-// 	get_body()->print( os, indent + 4);
-// }
-
-// void ValofExprNode::printOneLine( std::ostream &, int indent ) const {
-// 	assert( false );
-// }
-
-// Expression *ValofExprNode::build() const {
-// 	return new UntypedValofExpr( maybeBuild<Statement>(get_body()), nullptr );
-// }
-
 Expression *build_valexpr( StatementNode *s ) {
 	return new UntypedValofExpr( maybeBuild<Statement>(s), nullptr );
@@ -436,77 +309,57 @@
 
 //##############################################################################
-
-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 );
-}
-
-//##############################################################################
-
-// TypeValueNode::TypeValueNode( DeclarationNode *decl ) : decl( decl ) {
-// }
-
-// TypeValueNode::TypeValueNode( const TypeValueNode &other ) : ExpressionNode( other ), decl( maybeClone( other.decl ) ) {
-// }
-
-// Expression *TypeValueNode::build() const {
-// 	return new TypeExpr( decl->buildType() );
-// }
-
-// void TypeValueNode::print( std::ostream &os, int indent ) const {
-// 	os << std::string( indent, ' ' ) << "Type:";
-// 	get_decl()->print( os, indent + 2);
-// }
-
-// void TypeValueNode::printOneLine( std::ostream &os, int indent ) const {
-// 	os << "Type:";
-// 	get_decl()->print( os, indent + 2);
-// }
+ 
+// 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 ) {
@@ -515,52 +368,4 @@
 
 //##############################################################################
-
-// CompoundLiteralNode::CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids ) : type( type ), kids( kids ) {}
-// CompoundLiteralNode::CompoundLiteralNode( const CompoundLiteralNode &other ) : ExpressionNode( other ), type( other.type ), kids( other.kids ) {}
-
-// CompoundLiteralNode::~CompoundLiteralNode() {
-// 	delete kids;
-// 	delete type;
-// }
-
-// CompoundLiteralNode *CompoundLiteralNode::clone() const {
-// 	return new CompoundLiteralNode( *this );
-// }
-
-// void CompoundLiteralNode::print( std::ostream &os, int indent ) const {
-// 	os << string( indent,' ' ) << "CompoundLiteralNode:" << endl;
-
-// 	os << string( indent + 2, ' ' ) << "type:" << endl;
-// 	if ( type != 0 )
-// 		type->print( os, indent + 4 );
-
-// 	os << string( indent + 2, ' ' ) << "initialization:" << endl;
-// 	if ( kids != 0 )
-// 		kids->printList( os, indent + 4 );
-// }
-
-// void CompoundLiteralNode::printOneLine( std::ostream &os, int indent ) const {
-// 	os << "( ";
-// 	if ( type ) type->print( os );
-// 	os << ", ";
-// 	if ( kids ) kids->printOneLine( os );
-// 	os << ") ";
-// }
-
-// Expression *CompoundLiteralNode::build() const {
-// 	Declaration * newDecl = maybeBuild<Declaration>(type); // compound literal type
-// 	if ( DeclarationWithType * newDeclWithType = dynamic_cast< DeclarationWithType * >( newDecl ) ) { // non-sue compound-literal type
-// 		return new CompoundLiteralExpr( newDeclWithType->get_type(), maybeBuild<Initializer>(kids) );
-// 	// these types do not have associated type information
-// 	} else if ( StructDecl * newDeclStructDecl = dynamic_cast< StructDecl * >( newDecl )  ) {
-// 		return new CompoundLiteralExpr( new StructInstType( Type::Qualifiers(), newDeclStructDecl->get_name() ), maybeBuild<Initializer>(kids) );
-// 	} else if ( UnionDecl * newDeclUnionDecl = dynamic_cast< UnionDecl * >( newDecl )  ) {
-// 		return new CompoundLiteralExpr( new UnionInstType( Type::Qualifiers(), newDeclUnionDecl->get_name() ), maybeBuild<Initializer>(kids) );
-// 	} else if ( EnumDecl * newDeclEnumDecl = dynamic_cast< EnumDecl * >( newDecl )  ) {
-// 		return new CompoundLiteralExpr( new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ), maybeBuild<Initializer>(kids) );
-// 	} else {
-// 		assert( false );
-// 	} // if
-// }
 
 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids ) {
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/ParseNode.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 12:28:12 2016
-// Update Count     : 389
+// Last Modified On : Wed Aug 10 13:08:46 2016
+// Update Count     : 436
 //
 
@@ -26,4 +26,5 @@
 #include "SynTree/Type.h"
 #include "SynTree/Expression.h"
+#include "SynTree/Statement.h"
 //#include "SynTree/Declaration.h"
 #include "Common/UniqueName.h"
@@ -57,5 +58,5 @@
 	virtual void printList( std::ostream &os, int indent = 0 ) const;
 
-	ParseNode &operator,( ParseNode &);
+	ParseNode &operator,( ParseNode & );
   protected:
 	std::string name;
@@ -134,37 +135,4 @@
 //##############################################################################
 
-// NullExprNode is used in tuples as a place-holder where a tuple component is omitted e.g., [ 2, , 3 ]
-// class NullExprNode : public ExpressionNode {
-//   public:
-// 	NullExprNode() {}
-
-// 	virtual NullExprNode *clone() const { assert( false ); }
-
-// 	virtual void print( std::ostream &os, int indent = 0) const {}
-// 	virtual void printOneLine( std::ostream &os, int indent = 0) const {}
-
-// 	virtual Expression *build() const { assert( false ); return 0; }
-// };
-
-//##############################################################################
-
-// class ConstantNode : public ExpressionNode {
-//   public:
-// 	ConstantNode( ConstantExpr *expr ) : expr( expr ) {}
-// 	ConstantNode( const ConstantNode &other ) : expr( other.expr->clone() ) {}
-// 	virtual ~ConstantNode() {}
-
-// 	virtual ConstantNode *clone() const { assert( false ); return new ConstantNode( *this ); }
-
-// 	ConstantExpr *get_expr() const { return expr; }
-
-// 	virtual void print( std::ostream &os, int indent = 0 ) const {}
-// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const {}
-
-// 	Expression *build() const { return expr; }
-//   private:
-// 	ConstantExpr *expr;
-// };
-
 Expression *build_constantInteger( std::string &str );
 Expression *build_constantFloat( std::string &str );
@@ -174,75 +142,11 @@
 //##############################################################################
 
-// class VarRefNode : public ExpressionNode {
-//   public:
-// 	VarRefNode( const std::string *, bool isLabel = false );
-// 	VarRefNode( const VarRefNode &other );
-
-// 	virtual Expression *build() const ;
-
-// 	virtual VarRefNode *clone() const { return new VarRefNode( *this ); }
-
-// 	virtual void print( std::ostream &os, int indent = 0 ) const;
-// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
-//   private:
-// 	bool isLabel;
-// };
-
 NameExpr *build_varref( const std::string *name, bool labelp = false );
 
 //##############################################################################
 
-// class DesignatorNode : public ExpressionNode {
-//   public:
-// 	DesignatorNode( ExpressionNode *expr, bool isArrayIndex = false );
-// 	DesignatorNode( const DesignatorNode &other );
-
-// 	virtual Expression *build() const ;
-// 	virtual DesignatorNode *clone() const { return new DesignatorNode( *this ); }
-
-// 	virtual void print( std::ostream &os, int indent = 0 ) const;
-// 	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
-//   private:
-// 	bool isArrayIndex;
-// };
-
-//##############################################################################
-
-// class TypeValueNode : public ExpressionNode {
-//   public:
-// 	TypeValueNode( DeclarationNode * );
-// 	TypeValueNode( const TypeValueNode &other );
-
-// 	DeclarationNode *get_decl() const { return decl; }
-
-// 	virtual Expression *build() const ;
-
-// 	virtual TypeValueNode *clone() const { return new TypeValueNode( *this ); }
-
-// 	virtual void print( std::ostream &os, int indent = 0) const;
-// 	virtual void printOneLine( std::ostream &os, int indent = 0) const;
-//   private:
-// 	DeclarationNode *decl;
-// };
-
 Expression *build_typevalue( DeclarationNode *decl );
 
 //##############################################################################
-
-// class CompositeExprNode : public ExpressionNode {
-//   public:
-// 	CompositeExprNode( Expression *expr ) : expr( expr ) {}
-// 	CompositeExprNode( const CompositeExprNode &other ) : expr( other.expr->clone() ) {}
-// 	virtual ~CompositeExprNode() {}
-
-// 	CompositeExprNode *clone() const { assert( false ); return new CompositeExprNode( *this ); }
-
-// 	Expression *build() const { return expr; }
-
-// 	void print( std::ostream &os, int indent = 0 ) const {}
-// 	void printOneLine( std::ostream &os, int indent = 0 ) const {}
-//   private:
-// 	Expression *expr;
-// };
 
 enum class OperKinds {
@@ -282,30 +186,4 @@
 //##############################################################################
 
-// class AsmExprNode : public ExpressionNode {
-//   public:
-// 	AsmExprNode();
-// 	AsmExprNode( ExpressionNode *inout, ConstantNode *constraint, ExpressionNode *operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
-// 	virtual ~AsmExprNode() { delete inout; delete constraint; delete operand; }
-
-// 	virtual AsmExprNode *clone() const { return new AsmExprNode( *this ); }
-// 	virtual Expression *build() const;
-
-// 	virtual void print( std::ostream &os, int indent = 0) const;
-// 	virtual void printOneLine( std::ostream &os, int indent = 0) const;
-
-// 	ExpressionNode *get_inout() const { return inout; };
-// 	void set_inout( ExpressionNode *newValue ) { inout = newValue; }
-
-// 	ConstantNode *get_constraint() const { return constraint; };
-// 	void set_constraint( ConstantNode *newValue ) { constraint = newValue; }
-
-// 	ExpressionNode *get_operand() const { return operand; };
-// 	void set_operand( ExpressionNode *newValue ) { operand = newValue; }
-//   private:
-// 	ExpressionNode *inout;
-// 	ConstantNode *constraint;
-// 	ExpressionNode *operand;
-// };
-
 Expression *build_asm( ExpressionNode *inout, ConstantExpr *constraint, ExpressionNode *operand );
 
@@ -328,71 +206,7 @@
 //##############################################################################
 
-class ForCtlExprNode : public ExpressionNode {
-  public:
-	ForCtlExprNode( ParseNode *, ExpressionNode *, ExpressionNode * ) throw ( SemanticError );
-	ForCtlExprNode( const ForCtlExprNode &other );
-	~ForCtlExprNode();
-
-	StatementNode *get_init() const { return init; }
-	ExpressionNode *get_condition() const { return condition; }
-	ExpressionNode *get_change() const { return change; }
-
-	virtual ForCtlExprNode *clone() const { return new ForCtlExprNode( *this ); }
-	virtual Expression *build() const;
-
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printOneLine( std::ostream &os, int indent = 0 ) const;
-  private:
-	StatementNode *init;
-	ExpressionNode *condition;
-	ExpressionNode *change;
-};
-
-//##############################################################################
-
-// class ValofExprNode : public ExpressionNode {
-//   public:
-// 	ValofExprNode();
-// 	ValofExprNode( StatementNode *s = 0 );
-// 	ValofExprNode( const ValofExprNode &other );
-// 	~ValofExprNode();
-
-// 	virtual ValofExprNode *clone() const { return new ValofExprNode( *this ); }
-
-// 	StatementNode *get_body() const { return body; }
-// 	void print( std::ostream &os, int indent = 0 ) const;
-// 	void printOneLine( std::ostream &os, int indent = 0 ) const;
-// 	Expression *build() const;
-
-//   private:
-// 	StatementNode *body;
-// };
-
 Expression *build_valexpr( StatementNode *s );
 
 //##############################################################################
-
-// class CompoundLiteralNode : public ExpressionNode {
-//   public:
-// 	CompoundLiteralNode( DeclarationNode *type, InitializerNode *kids );
-// 	CompoundLiteralNode( const CompoundLiteralNode &type );
-// 	~CompoundLiteralNode();
-
-// 	virtual CompoundLiteralNode *clone() const;
-
-// 	DeclarationNode *get_type() const { return type; }
-// 	CompoundLiteralNode *set_type( DeclarationNode *t ) { type = t; return this; }
-
-// 	InitializerNode *get_initializer() const { return kids; }
-// 	CompoundLiteralNode *set_initializer( InitializerNode *k ) { kids = k; return this; }
-
-// 	void print( std::ostream &os, int indent = 0 ) const;
-// 	void printOneLine( std::ostream &os, int indent = 0 ) const;
-
-// 	virtual Expression *build() const;
-//   private:
-// 	DeclarationNode *type;
-// 	InitializerNode *kids;
-// };
 
 Expression *build_compoundLiteral( DeclarationNode *decl_node, InitializerNode *kids );
@@ -531,5 +345,5 @@
 	static StatementNode *newCatchStmt( DeclarationNode *d = 0, StatementNode *s = 0, bool catchRestP = false );
 
-	StatementNode *set_block( StatementNode *b ) {	block = b; return this; }
+	StatementNode *set_block( StatementNode *b ) { block = b; return this; }
 	StatementNode *get_block() const { return block; }
 
@@ -539,6 +353,6 @@
 	StatementNode::Type get_type() const { return type; }
 
-	StatementNode *add_label( const std::string * );
-	const std::list<std::string> &get_labels() const { return labels; }
+	virtual StatementNode *add_label( const std::string * );
+	virtual std::list<std::string> get_labels() const { return labels; }
 
 	void addDeclaration( DeclarationNode *newDecl ) { decl = newDecl; }
@@ -565,4 +379,41 @@
 }; // StatementNode
 
+class StatementNode2 : public StatementNode {
+  public:
+	StatementNode2() {}
+	StatementNode2( Statement *stmt ) : stmt( stmt ) {}
+	virtual ~StatementNode2() {}
+
+	virtual StatementNode2 *clone() const { assert( false ); return nullptr; }
+	virtual Statement *build() const { return stmt; }
+
+	virtual StatementNode2 *add_label( const std::string * name ) {
+		stmt->get_labels().emplace_back( *name );
+		return this;
+	}
+	virtual std::list<std::string> get_labels() const { assert( false ); return StatementNode::get_labels(); }
+
+	virtual void print( std::ostream &os, int indent = 0 ) {}
+	virtual void printList( std::ostream &os, int indent = 0 ) {}
+  private:
+	Statement *stmt;
+}; // StatementNode
+
+struct ForCtl {
+	ForCtl( ExpressionNode *expr, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( StatementNode::Exp, expr ) ), condition( condition ), change( change ) {}
+	ForCtl( DeclarationNode *decl, ExpressionNode *condition, ExpressionNode *change ) :
+		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
+
+	StatementNode *init;
+	ExpressionNode *condition;
+	ExpressionNode *change;
+};
+
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt );
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt );
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind = false );
+Statement *build_for( ForCtl *forctl, StatementNode *stmt );
+
 //##############################################################################
 
@@ -602,5 +453,5 @@
 
 template< typename SynTreeType, typename NodeType >
-void buildList( const NodeType *firstNode, std::list< SynTreeType *> &outputList ) {
+void buildList( const NodeType *firstNode, std::list< SynTreeType * > &outputList ) {
 	SemanticError errors;
 	std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/StatementNode.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 10:14:33 2016
-// Update Count     : 141
+// Last Modified On : Wed Aug 10 13:54:21 2016
+// Update Count     : 170
 //
 
@@ -206,50 +206,55 @@
 		}
 	  case If:
-		{
-			Statement *thenb = 0, *elseb = 0;
-			assert( branches.size() >= 1 );
-
-			thenb = branches.front();
-			branches.pop_front();
-			if ( ! branches.empty() ) {
-				elseb = branches.front();
-				branches.pop_front();
-			} // if
-			return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
-		}
-	  case While:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
-	  case Do:
-		assert( branches.size() == 1 );
-		return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
-	  case For:
-		{
-			assert( branches.size() == 1 );
-
-			ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
-			assert( ctl != 0 );
-
-			std::list<Statement *> init;
-			if ( ctl->get_init() != 0 ) {
-				buildList( ctl->get_init(), init );
-			} // if
-
-			Expression *cond = 0;
-			if ( ctl->get_condition() != 0 )
-				cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
-
-			Expression *incr = 0;
-			if ( ctl->get_change() != 0 )
-				incr = maybeBuild<Expression>(ctl->get_change());
-
-			return new ForStmt( labs, init, cond, incr, branches.front() );
-		}
+		// {
+		// 	Statement *thenb = 0, *elseb = 0;
+		// 	assert( branches.size() >= 1 );
+
+		// 	thenb = branches.front();
+		// 	branches.pop_front();
+		// 	if ( ! branches.empty() ) {
+		// 		elseb = branches.front();
+		// 		branches.pop_front();
+		// 	} // if
+		// 	return new IfStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), thenb, elseb );
+		// }
+		assert( false );
 	  case Switch:
-		return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		//return new SwitchStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		assert( false );
 	  case Case:
-		return new CaseStmt( labs, maybeBuild<Expression>(get_control()), branches );
+		return new CaseStmt( labs, maybeBuild<Expression>(get_control() ), branches );
 	  case Default:
 		return new CaseStmt( labs, 0, branches, true );
+	  case While:
+		// assert( branches.size() == 1 );
+		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front() );
+		assert( false );
+	  case Do:
+		// assert( branches.size() == 1 );
+		// return new WhileStmt( labs, notZeroExpr( maybeBuild<Expression>(get_control()) ), branches.front(), true );
+		assert( false );
+	  case For:
+	  	// {
+	  	// 	assert( branches.size() == 1 );
+
+	  	// 	ForCtlExprNode *ctl = dynamic_cast<ForCtlExprNode *>( get_control() );
+	  	// 	assert( ctl != 0 );
+
+	  	// 	std::list<Statement *> init;
+	  	// 	if ( ctl->get_init() != 0 ) {
+	  	// 		buildList( ctl->get_init(), init );
+	  	// 	} // if
+
+	  	// 	Expression *cond = 0;
+	  	// 	if ( ctl->get_condition() != 0 )
+	  	// 		cond = notZeroExpr( maybeBuild<Expression>(ctl->get_condition()) );
+
+	  	// 	Expression *incr = 0;
+	  	// 	if ( ctl->get_change() != 0 )
+	  	// 		incr = maybeBuild<Expression>(ctl->get_change());
+
+	  	// 	return new ForStmt( labs, init, cond, incr, branches.front() );
+	  	// }
+		assert( false );
 	  case Goto:
 		{
@@ -305,4 +310,56 @@
 }
 
+Statement *build_if( ExpressionNode *ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
+	Statement *thenb, *elseb = 0;
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( then_stmt, branches );
+	assert( branches.size() >= 1 );
+	thenb = branches.front();
+
+	if ( else_stmt ) {
+		std::list<Statement *> branches;
+		buildList<Statement, StatementNode>( else_stmt, branches );
+		assert( branches.size() >= 1 );
+		elseb = branches.front();
+	} // if
+	return new IfStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), thenb, elseb );
+}
+
+Statement *build_switch( ExpressionNode *ctl, StatementNode *stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() >= 1 );
+	return new SwitchStmt( noLabels, maybeBuild<Expression>(ctl), branches );
+}
+
+Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+	return new WhileStmt( noLabels, notZeroExpr( maybeBuild<Expression>(ctl) ), branches.front(), kind );
+}
+
+Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
+	std::list<Statement *> branches;
+	buildList<Statement, StatementNode>( stmt, branches );
+	assert( branches.size() == 1 );
+
+	std::list<Statement *> init;
+	if ( forctl->init != 0 ) {
+		buildList( forctl->init, init );
+	} // if
+
+	Expression *cond = 0;
+	if ( forctl->condition != 0 )
+		cond = notZeroExpr( maybeBuild<Expression>(forctl->condition) );
+
+	Expression *incr = 0;
+	if ( forctl->change != 0 )
+		incr = maybeBuild<Expression>(forctl->change);
+
+	delete forctl;
+	return new ForStmt( noLabels, init, cond, incr, branches.front() );
+}
+
 
 CompoundStmtNode::CompoundStmtNode() : first( 0 ), last( 0 ) {}
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/parser.cc	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -357,4 +357,5 @@
 	StatementNode *sn;
 	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
@@ -365,5 +366,5 @@
 
 /* Line 293 of yacc.c  */
-#line 368 "Parser/parser.cc"
+#line 369 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -377,5 +378,5 @@
 
 /* Line 343 of yacc.c  */
-#line 380 "Parser/parser.cc"
+#line 381 "Parser/parser.cc"
 
 #ifdef short
@@ -1019,80 +1020,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   296,   296,   302,   311,   312,   313,   317,   318,   319,
-     323,   324,   328,   329,   333,   334,   338,   339,   350,   352,
-     354,   356,   361,   362,   368,   372,   374,   375,   377,   378,
-     380,   382,   384,   393,   394,   400,   401,   405,   406,   410,
-     414,   416,   418,   420,   425,   428,   430,   432,   437,   450,
-     452,   454,   456,   458,   460,   462,   464,   466,   468,   470,
-     477,   478,   484,   485,   486,   487,   491,   492,   494,   499,
-     500,   502,   504,   509,   510,   512,   517,   518,   520,   525,
-     526,   528,   530,   532,   537,   538,   540,   545,   546,   551,
-     552,   557,   558,   563,   564,   569,   570,   575,   576,   579,
-     581,   586,   591,   592,   594,   600,   601,   605,   606,   607,
-     608,   609,   610,   611,   612,   613,   614,   615,   621,   623,
-     625,   627,   632,   633,   638,   639,   645,   646,   652,   653,
-     654,   655,   656,   657,   658,   659,   660,   670,   677,   679,
-     689,   690,   695,   697,   703,   705,   709,   710,   715,   720,
-     723,   725,   727,   737,   739,   750,   751,   753,   757,   759,
-     763,   764,   769,   770,   774,   779,   780,   784,   786,   792,
-     793,   797,   799,   801,   803,   809,   810,   814,   816,   821,
-     823,   825,   830,   832,   837,   839,   843,   846,   850,   853,
-     857,   859,   863,   865,   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
+       0,   299,   299,   305,   314,   315,   316,   320,   321,   322,
+     326,   327,   331,   332,   336,   337,   341,   342,   353,   355,
+     357,   359,   364,   365,   371,   375,   377,   378,   380,   381,
+     383,   385,   387,   396,   397,   403,   404,   408,   409,   413,
+     417,   419,   421,   423,   428,   431,   433,   435,   440,   453,
+     455,   457,   459,   461,   463,   465,   467,   469,   471,   473,
+     480,   481,   487,   488,   489,   490,   494,   495,   497,   502,
+     503,   505,   507,   512,   513,   515,   520,   521,   523,   528,
+     529,   531,   533,   535,   540,   541,   543,   548,   549,   554,
+     555,   560,   561,   566,   567,   572,   573,   578,   579,   582,
+     584,   589,   594,   595,   597,   603,   604,   608,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   618,   624,   626,
+     628,   630,   635,   636,   641,   642,   648,   649,   655,   656,
+     657,   658,   659,   660,   661,   662,   663,   673,   680,   682,
+     692,   693,   698,   700,   706,   708,   712,   713,   718,   723,
+     727,   730,   733,   743,   746,   758,   759,   761,   765,   767,
+     771,   772,   777,   778,   782,   787,   788,   792,   794,   800,
+     801,   805,   807,   809,   811,   817,   818,   822,   824,   829,
+     831,   833,   838,   840,   845,   847,   851,   854,   858,   861,
+     865,   867,   871,   873,   880,   882,   884,   893,   895,   897,
+     899,   901,   906,   908,   910,   912,   917,   930,   931,   936,
+     938,   943,   947,   949,   951,   953,   955,   961,   962,   968,
+     969,   973,   974,   979,   981,   987,   988,   990,   995,   997,
+    1004,  1006,  1010,  1011,  1016,  1018,  1022,  1023,  1027,  1029,
+    1033,  1034,  1038,  1039,  1043,  1044,  1059,  1060,  1061,  1062,
+    1063,  1067,  1072,  1079,  1089,  1094,  1099,  1107,  1112,  1117,
+    1122,  1127,  1135,  1157,  1162,  1169,  1171,  1178,  1183,  1188,
+    1199,  1204,  1209,  1214,  1219,  1228,  1233,  1241,  1242,  1243,
+    1244,  1250,  1255,  1263,  1264,  1265,  1266,  1270,  1271,  1272,
+    1273,  1278,  1279,  1288,  1289,  1294,  1295,  1300,  1302,  1304,
+    1306,  1308,  1311,  1310,  1322,  1323,  1325,  1335,  1336,  1341,
+    1345,  1347,  1349,  1351,  1353,  1355,  1357,  1359,  1364,  1366,
+    1368,  1370,  1372,  1374,  1376,  1378,  1380,  1382,  1384,  1386,
+    1388,  1394,  1395,  1397,  1399,  1401,  1406,  1407,  1413,  1414,
+    1416,  1418,  1423,  1425,  1427,  1429,  1434,  1435,  1437,  1439,
+    1444,  1445,  1447,  1452,  1453,  1455,  1457,  1462,  1464,  1466,
+    1471,  1472,  1476,  1478,  1484,  1483,  1487,  1489,  1494,  1496,
+    1502,  1503,  1508,  1509,  1511,  1512,  1521,  1522,  1524,  1526,
+    1531,  1533,  1539,  1540,  1542,  1545,  1548,  1553,  1554,  1559,
+    1564,  1568,  1570,  1576,  1575,  1582,  1584,  1590,  1591,  1599,
+    1600,  1604,  1605,  1606,  1608,  1610,  1617,  1618,  1620,  1622,
+    1627,  1628,  1634,  1635,  1639,  1640,  1645,  1646,  1647,  1649,
+    1657,  1658,  1660,  1663,  1665,  1669,  1670,  1671,  1673,  1675,
+    1679,  1684,  1692,  1693,  1702,  1704,  1709,  1710,  1711,  1715,
+    1716,  1717,  1721,  1722,  1723,  1727,  1728,  1729,  1734,  1735,
+    1736,  1737,  1743,  1744,  1746,  1751,  1752,  1757,  1758,  1759,
+    1760,  1761,  1776,  1777,  1782,  1783,  1789,  1791,  1794,  1796,
+    1798,  1821,  1822,  1824,  1826,  1831,  1832,  1834,  1839,  1844,
+    1845,  1851,  1850,  1854,  1858,  1860,  1862,  1868,  1869,  1874,
+    1879,  1881,  1886,  1888,  1889,  1891,  1896,  1898,  1900,  1905,
+    1907,  1912,  1917,  1925,  1931,  1930,  1944,  1945,  1950,  1951,
+    1955,  1960,  1965,  1973,  1978,  1989,  1990,  2001,  2002,  2008,
+    2009,  2013,  2014,  2015,  2018,  2017,  2028,  2037,  2043,  2049,
+    2058,  2064,  2070,  2076,  2082,  2090,  2096,  2104,  2110,  2119,
+    2120,  2121,  2125,  2129,  2131,  2136,  2137,  2141,  2142,  2147,
+    2153,  2154,  2157,  2159,  2160,  2164,  2165,  2166,  2167,  2201,
+    2203,  2204,  2206,  2211,  2216,  2221,  2223,  2225,  2230,  2232,
+    2234,  2236,  2241,  2243,  2252,  2254,  2255,  2260,  2262,  2264,
+    2269,  2271,  2273,  2278,  2280,  2282,  2291,  2292,  2293,  2297,
+    2299,  2301,  2306,  2308,  2310,  2315,  2317,  2319,  2334,  2336,
+    2337,  2339,  2344,  2345,  2350,  2352,  2354,  2359,  2361,  2363,
+    2365,  2370,  2372,  2374,  2384,  2386,  2387,  2389,  2394,  2396,
+    2398,  2403,  2405,  2407,  2409,  2414,  2416,  2418,  2449,  2451,
+    2452,  2454,  2459,  2464,  2472,  2474,  2476,  2481,  2483,  2488,
+    2490,  2504,  2505,  2507,  2512,  2514,  2516,  2518,  2520,  2525,
+    2526,  2528,  2530,  2535,  2537,  2539,  2545,  2547,  2549,  2553,
+    2555,  2557,  2559,  2573,  2574,  2576,  2581,  2583,  2585,  2587,
+    2589,  2594,  2595,  2597,  2599,  2604,  2606,  2608,  2614,  2615,
+    2617,  2626,  2629,  2631,  2634,  2636,  2638,  2651,  2652,  2654,
+    2659,  2661,  2663,  2665,  2667,  2672,  2673,  2675,  2677,  2682,
+    2684,  2692,  2693,  2694,  2699,  2700,  2704,  2706,  2708,  2710,
+    2712,  2714,  2721,  2723,  2725,  2727,  2729,  2731,  2733,  2735,
+    2737,  2739,  2744,  2746,  2748,  2753,  2779,  2780,  2782,  2786,
+    2787,  2791,  2793,  2795,  2797,  2799,  2801,  2808,  2810,  2812,
+    2814,  2816,  2818,  2823,  2828,  2830,  2832,  2850,  2852,  2857,
+    2858
 };
 #endif
@@ -4959,5 +4960,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 299 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -4968,5 +4969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 302 "parser.yy"
+#line 305 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -4977,5 +4978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 311 "parser.yy"
+#line 314 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4984,5 +4985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 312 "parser.yy"
+#line 315 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4991,5 +4992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 313 "parser.yy"
+#line 316 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4998,5 +4999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 338 "parser.yy"
+#line 341 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5005,5 +5006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
+#line 343 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].constant)->get_constant()->get_value(), (yyvsp[(2) - (2)].tok) );
@@ -5016,5 +5017,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 351 "parser.yy"
+#line 354 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5023,5 +5024,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 353 "parser.yy"
+#line 356 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5030,5 +5031,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 355 "parser.yy"
+#line 358 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5037,5 +5038,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 357 "parser.yy"
+#line 360 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -5044,5 +5045,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 367 "parser.yy"
+#line 370 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5051,5 +5052,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 369 "parser.yy"
+#line 372 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5058,5 +5059,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 373 "parser.yy"
+#line 376 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5065,5 +5066,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 376 "parser.yy"
+#line 379 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5072,5 +5073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+#line 382 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5079,5 +5080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 381 "parser.yy"
+#line 384 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5086,5 +5087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 386 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5093,5 +5094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 388 "parser.yy"
     {
 			Token fn;
@@ -5104,5 +5105,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 395 "parser.yy"
+#line 398 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5111,5 +5112,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 400 "parser.yy"
+#line 403 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5118,5 +5119,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 406 "parser.yy"
+#line 409 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5125,5 +5126,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 411 "parser.yy"
+#line 414 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -5132,5 +5133,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 415 "parser.yy"
+#line 418 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5139,5 +5140,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 417 "parser.yy"
+#line 420 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5146,5 +5147,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 419 "parser.yy"
+#line 422 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(3) - (3)].en), build_varref( (yyvsp[(1) - (3)].tok) ) ) ); }
     break;
@@ -5153,5 +5154,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 421 "parser.yy"
+#line 424 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(5) - (7)].en), build_varref( (yyvsp[(1) - (7)].tok) ) ) ); }
     break;
@@ -5160,5 +5161,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 429 "parser.yy"
+#line 432 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5167,5 +5168,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 431 "parser.yy"
+#line 434 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5174,5 +5175,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 433 "parser.yy"
+#line 436 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5181,5 +5182,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 438 "parser.yy"
+#line 441 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5199,5 +5200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 451 "parser.yy"
+#line 454 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5206,5 +5207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 453 "parser.yy"
+#line 456 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5213,5 +5214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 455 "parser.yy"
+#line 458 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5220,5 +5221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 457 "parser.yy"
+#line 460 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5227,5 +5228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 459 "parser.yy"
+#line 462 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5234,5 +5235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 461 "parser.yy"
+#line 464 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5241,5 +5242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 463 "parser.yy"
+#line 466 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5248,5 +5249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 465 "parser.yy"
+#line 468 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5255,5 +5256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
+#line 470 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5262,5 +5263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
+#line 472 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5269,5 +5270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 471 "parser.yy"
+#line 474 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5276,5 +5277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 477 "parser.yy"
+#line 480 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5283,5 +5284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 478 "parser.yy"
+#line 481 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5290,5 +5291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 484 "parser.yy"
+#line 487 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5297,5 +5298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 488 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5304,5 +5305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 486 "parser.yy"
+#line 489 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5311,5 +5312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 490 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5318,5 +5319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5325,5 +5326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 498 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5332,5 +5333,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 501 "parser.yy"
+#line 504 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5339,5 +5340,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 503 "parser.yy"
+#line 506 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5346,5 +5347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 508 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5353,5 +5354,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5360,5 +5361,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
+#line 516 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5367,5 +5368,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 519 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5374,5 +5375,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 521 "parser.yy"
+#line 524 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5381,5 +5382,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 527 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5388,5 +5389,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
+#line 532 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5395,5 +5396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 531 "parser.yy"
+#line 534 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5402,5 +5403,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 533 "parser.yy"
+#line 536 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5409,5 +5410,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 539 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5416,5 +5417,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 541 "parser.yy"
+#line 544 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5423,5 +5424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 547 "parser.yy"
+#line 550 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5430,5 +5431,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 553 "parser.yy"
+#line 556 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5437,5 +5438,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5444,5 +5445,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 565 "parser.yy"
+#line 568 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5451,5 +5452,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 571 "parser.yy"
+#line 574 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5458,5 +5459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 577 "parser.yy"
+#line 580 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5465,5 +5466,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 580 "parser.yy"
+#line 583 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5472,5 +5473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 582 "parser.yy"
+#line 585 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5479,5 +5480,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 596 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5486,5 +5487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+#line 598 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new ExpressionNode( build_binary_ptr( OperKinds::Assign, (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5493,5 +5494,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 600 "parser.yy"
+#line 603 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5500,5 +5501,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
+#line 608 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5507,5 +5508,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 606 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5514,5 +5515,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
+#line 610 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5521,5 +5522,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 611 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5528,5 +5529,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+#line 612 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5535,5 +5536,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
+#line 613 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5542,5 +5543,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5549,5 +5550,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5556,5 +5557,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5563,5 +5564,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 617 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5570,5 +5571,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
+#line 618 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5577,5 +5578,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
+#line 625 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple() ); }
     break;
@@ -5584,5 +5585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 624 "parser.yy"
+#line 627 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (yyvsp[(3) - (5)].en) ) ); }
     break;
@@ -5591,5 +5592,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 626 "parser.yy"
+#line 629 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_link( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5598,5 +5599,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 628 "parser.yy"
+#line 631 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5605,5 +5606,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 634 "parser.yy"
+#line 637 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5612,5 +5613,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 643 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5619,5 +5620,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+#line 648 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5626,5 +5627,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 654 "parser.yy"
+#line 657 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5633,5 +5634,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 661 "parser.yy"
+#line 664 "parser.yy"
     {
 			Token fn;
@@ -5644,5 +5645,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 671 "parser.yy"
+#line 674 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5653,5 +5654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 678 "parser.yy"
+#line 681 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5660,5 +5661,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 685 "parser.yy"
+#line 688 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5667,5 +5668,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 691 "parser.yy"
+#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); } }
     break;
@@ -5674,5 +5675,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 696 "parser.yy"
+#line 699 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5681,5 +5682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 698 "parser.yy"
+#line 701 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -5692,5 +5693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 704 "parser.yy"
+#line 707 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5699,5 +5700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 711 "parser.yy"
+#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); } }
     break;
@@ -5706,5 +5707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 716 "parser.yy"
+#line 719 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5713,6 +5714,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 722 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+#line 726 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
 
@@ -5720,6 +5721,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 724 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
+#line 729 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
 
@@ -5727,6 +5728,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+#line 732 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5734,7 +5735,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 728 "parser.yy"
+#line 734 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
+			StatementNode *sw = new StatementNode2( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -5749,6 +5750,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 738 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+#line 745 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5756,7 +5757,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 740 "parser.yy"
+#line 747 "parser.yy"
     {
-			StatementNode *sw = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) );
+			//StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			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;
 		}
@@ -5766,5 +5768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 750 "parser.yy"
+#line 758 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5773,5 +5775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 752 "parser.yy"
+#line 760 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5780,5 +5782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 757 "parser.yy"
+#line 765 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(1) - (1)].en), 0 ); }
     break;
@@ -5787,5 +5789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 759 "parser.yy"
+#line 767 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_link( new StatementNode( StatementNode::Case, (yyvsp[(3) - (3)].en), 0 ) ) ); }
     break;
@@ -5794,5 +5796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
+#line 771 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
@@ -5801,5 +5803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 764 "parser.yy"
+#line 772 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5808,5 +5810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 770 "parser.yy"
+#line 778 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5815,5 +5817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 774 "parser.yy"
+#line 782 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5822,5 +5824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 779 "parser.yy"
+#line 787 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5829,5 +5831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 785 "parser.yy"
+#line 793 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(2) - (2)].sn) ) ); }
     break;
@@ -5836,5 +5838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 787 "parser.yy"
+#line 795 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( new CompoundStmtNode( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5843,5 +5845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 792 "parser.yy"
+#line 800 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5850,5 +5852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+#line 806 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5857,5 +5859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+#line 808 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(2) - (3)].sn), *(yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
@@ -5864,5 +5866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 802 "parser.yy"
+#line 810 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5871,5 +5873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 804 "parser.yy"
+#line 812 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case( new CompoundStmtNode( (StatementNode *)mkList( (*(yyvsp[(3) - (4)].sn), *(yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
@@ -5878,5 +5880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
+#line 817 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -5885,5 +5887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
+#line 823 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5892,5 +5894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 817 "parser.yy"
+#line 825 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5899,6 +5901,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 822 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
+#line 830 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
@@ -5906,6 +5908,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 824 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
+#line 832 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ) ); }
     break;
 
@@ -5913,6 +5915,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
+#line 834 "parser.yy"
+    { (yyval.sn) = new StatementNode2( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
 
@@ -5920,6 +5922,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
+#line 839 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
 
@@ -5927,6 +5929,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
-    { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
+#line 841 "parser.yy"
+    { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
 
@@ -5934,5 +5936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 838 "parser.yy"
+#line 846 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5941,5 +5943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
+#line 850 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5948,5 +5950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+#line 853 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -5955,5 +5957,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 849 "parser.yy"
+#line 857 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5962,5 +5964,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 852 "parser.yy"
+#line 860 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -5969,5 +5971,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 856 "parser.yy"
+#line 864 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5976,5 +5978,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 858 "parser.yy"
+#line 866 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5983,5 +5985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 860 "parser.yy"
+#line 868 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5990,5 +5992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 864 "parser.yy"
+#line 872 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5997,5 +5999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 874 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6004,5 +6006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 873 "parser.yy"
+#line 881 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6011,5 +6013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 875 "parser.yy"
+#line 883 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6018,5 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 885 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6028,5 +6030,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 888 "parser.yy"
+#line 896 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6035,5 +6037,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
+#line 898 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6042,5 +6044,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 892 "parser.yy"
+#line 900 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6049,5 +6051,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 894 "parser.yy"
+#line 902 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6056,5 +6058,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 899 "parser.yy"
+#line 907 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6063,5 +6065,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+#line 909 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6070,5 +6072,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
+#line 911 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6077,5 +6079,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
+#line 913 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6084,5 +6086,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 910 "parser.yy"
+#line 918 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6094,5 +6096,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 924 "parser.yy"
+#line 932 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6104,5 +6106,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 929 "parser.yy"
+#line 937 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6111,5 +6113,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 931 "parser.yy"
+#line 939 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6121,5 +6123,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 940 "parser.yy"
+#line 948 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6128,5 +6130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 942 "parser.yy"
+#line 950 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6135,5 +6137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 944 "parser.yy"
+#line 952 "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;
@@ -6142,5 +6144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
+#line 954 "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;
@@ -6149,5 +6151,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 948 "parser.yy"
+#line 956 "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;
@@ -6156,5 +6158,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 953 "parser.yy"
+#line 961 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6163,5 +6165,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 963 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6170,5 +6172,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 960 "parser.yy"
+#line 968 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6177,5 +6179,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 967 "parser.yy"
+#line 975 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6184,5 +6186,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
+#line 980 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -6191,5 +6193,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
+#line 982 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asm( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
@@ -6198,5 +6200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 979 "parser.yy"
+#line 987 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6205,5 +6207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 981 "parser.yy"
+#line 989 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -6212,5 +6214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 983 "parser.yy"
+#line 991 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
@@ -6219,5 +6221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 988 "parser.yy"
+#line 996 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6226,5 +6228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 990 "parser.yy"
+#line 998 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6233,5 +6235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 997 "parser.yy"
+#line 1005 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6240,5 +6242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1004 "parser.yy"
+#line 1012 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6247,5 +6249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1009 "parser.yy"
+#line 1017 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6254,5 +6256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+#line 1024 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6261,5 +6263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1030 "parser.yy"
+#line 1038 "parser.yy"
     {}
     break;
@@ -6268,5 +6270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1031 "parser.yy"
+#line 1039 "parser.yy"
     {}
     break;
@@ -6275,5 +6277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1060 "parser.yy"
+#line 1068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6285,5 +6287,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+#line 1075 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6295,5 +6297,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1080 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6305,5 +6307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+#line 1090 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6315,5 +6317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+#line 1095 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6325,5 +6327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1092 "parser.yy"
+#line 1100 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6335,5 +6337,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1100 "parser.yy"
+#line 1108 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6345,5 +6347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1105 "parser.yy"
+#line 1113 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6355,5 +6357,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1110 "parser.yy"
+#line 1118 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6365,5 +6367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1115 "parser.yy"
+#line 1123 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6375,5 +6377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1120 "parser.yy"
+#line 1128 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6385,5 +6387,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1128 "parser.yy"
+#line 1136 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6394,5 +6396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1151 "parser.yy"
+#line 1159 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6403,5 +6405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1155 "parser.yy"
+#line 1163 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6412,5 +6414,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1162 "parser.yy"
+#line 1170 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6419,5 +6421,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1166 "parser.yy"
+#line 1174 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6426,5 +6428,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1171 "parser.yy"
+#line 1179 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6436,5 +6438,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1176 "parser.yy"
+#line 1184 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6446,5 +6448,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1181 "parser.yy"
+#line 1189 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6456,5 +6458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1192 "parser.yy"
+#line 1200 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6466,5 +6468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1197 "parser.yy"
+#line 1205 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6476,5 +6478,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1202 "parser.yy"
+#line 1210 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6486,5 +6488,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1207 "parser.yy"
+#line 1215 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6496,5 +6498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1212 "parser.yy"
+#line 1220 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6506,5 +6508,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1221 "parser.yy"
+#line 1229 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6516,5 +6518,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1226 "parser.yy"
+#line 1234 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6526,5 +6528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1243 "parser.yy"
+#line 1251 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6536,5 +6538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1248 "parser.yy"
+#line 1256 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6546,5 +6548,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1270 "parser.yy"
+#line 1278 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6553,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+#line 1290 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6560,5 +6562,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1293 "parser.yy"
+#line 1301 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6567,5 +6569,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1295 "parser.yy"
+#line 1303 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6574,5 +6576,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1297 "parser.yy"
+#line 1305 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6581,5 +6583,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1299 "parser.yy"
+#line 1307 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6588,5 +6590,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1301 "parser.yy"
+#line 1309 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6595,5 +6597,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1303 "parser.yy"
+#line 1311 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6604,5 +6606,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+#line 1315 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6614,5 +6616,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1316 "parser.yy"
+#line 1324 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6621,5 +6623,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1318 "parser.yy"
+#line 1326 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6628,5 +6630,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1329 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6635,5 +6637,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1338 "parser.yy"
+#line 1346 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6642,5 +6644,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1340 "parser.yy"
+#line 1348 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6649,5 +6651,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1350 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6656,5 +6658,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1352 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6663,5 +6665,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
+#line 1354 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6670,5 +6672,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1348 "parser.yy"
+#line 1356 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6677,5 +6679,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1350 "parser.yy"
+#line 1358 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6684,5 +6686,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1352 "parser.yy"
+#line 1360 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6691,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1357 "parser.yy"
+#line 1365 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6698,5 +6700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1359 "parser.yy"
+#line 1367 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6705,5 +6707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1361 "parser.yy"
+#line 1369 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6712,5 +6714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1363 "parser.yy"
+#line 1371 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6719,5 +6721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1365 "parser.yy"
+#line 1373 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6726,5 +6728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1367 "parser.yy"
+#line 1375 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6733,5 +6735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1369 "parser.yy"
+#line 1377 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6740,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1371 "parser.yy"
+#line 1379 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6747,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1373 "parser.yy"
+#line 1381 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6754,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1375 "parser.yy"
+#line 1383 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6761,5 +6763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1377 "parser.yy"
+#line 1385 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6768,5 +6770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1379 "parser.yy"
+#line 1387 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
@@ -6775,5 +6777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+#line 1389 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
@@ -6782,5 +6784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
+#line 1396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6789,5 +6791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1390 "parser.yy"
+#line 1398 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6796,5 +6798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1392 "parser.yy"
+#line 1400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6803,5 +6805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1394 "parser.yy"
+#line 1402 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -6810,5 +6812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1400 "parser.yy"
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6817,5 +6819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+#line 1415 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6824,5 +6826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+#line 1417 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6831,5 +6833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+#line 1419 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6838,5 +6840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1416 "parser.yy"
+#line 1424 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
@@ -6845,5 +6847,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1418 "parser.yy"
+#line 1426 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6852,5 +6854,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+#line 1428 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -6859,5 +6861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
+#line 1430 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6866,5 +6868,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1428 "parser.yy"
+#line 1436 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6873,5 +6875,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+#line 1438 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6880,23 +6882,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
+#line 1440 "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"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 354:
 
 /* Line 1806 of yacc.c  */
@@ -6905,5 +6893,5 @@
     break;
 
-  case 355:
+  case 352:
 
 /* Line 1806 of yacc.c  */
@@ -6912,8 +6900,22 @@
     break;
 
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1454 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1456 "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"
+#line 1458 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6922,5 +6924,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1455 "parser.yy"
+#line 1463 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6929,5 +6931,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1457 "parser.yy"
+#line 1465 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6936,5 +6938,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1459 "parser.yy"
+#line 1467 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6943,5 +6945,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1469 "parser.yy"
+#line 1477 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl), true ); }
     break;
@@ -6950,5 +6952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
+#line 1479 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -6960,5 +6962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1476 "parser.yy"
+#line 1484 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -6967,5 +6969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
+#line 1486 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), 0, (yyvsp[(5) - (6)].decl), true ); }
     break;
@@ -6974,5 +6976,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+#line 1488 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
     break;
@@ -6981,5 +6983,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1482 "parser.yy"
+#line 1490 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -6988,5 +6990,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+#line 1495 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
@@ -6995,5 +6997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+#line 1497 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
@@ -7002,5 +7004,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1494 "parser.yy"
+#line 1502 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7009,5 +7011,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1496 "parser.yy"
+#line 1504 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7016,5 +7018,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1502 "parser.yy"
+#line 1510 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
     break;
@@ -7023,5 +7025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1505 "parser.yy"
+#line 1513 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7034,5 +7036,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1515 "parser.yy"
+#line 1523 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7041,5 +7043,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+#line 1525 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7048,5 +7050,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+#line 1527 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
@@ -7055,5 +7057,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1524 "parser.yy"
+#line 1532 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7062,5 +7064,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+#line 1534 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
@@ -7069,5 +7071,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1531 "parser.yy"
+#line 1539 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
@@ -7076,5 +7078,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
+#line 1541 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7083,5 +7085,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
+#line 1544 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7090,5 +7092,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1539 "parser.yy"
+#line 1547 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7097,5 +7099,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
+#line 1553 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7104,5 +7106,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1547 "parser.yy"
+#line 1555 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -7111,5 +7113,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
+#line 1560 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7118,5 +7120,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1561 "parser.yy"
+#line 1569 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -7125,5 +7127,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1563 "parser.yy"
+#line 1571 "parser.yy"
     {
 			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
@@ -7135,5 +7137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1568 "parser.yy"
+#line 1576 "parser.yy"
     { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
     break;
@@ -7142,5 +7144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1570 "parser.yy"
+#line 1578 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
     break;
@@ -7149,5 +7151,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1575 "parser.yy"
+#line 1583 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7156,5 +7158,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+#line 1585 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7163,5 +7165,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1582 "parser.yy"
+#line 1590 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -7170,5 +7172,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+#line 1592 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7177,5 +7179,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+#line 1599 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7184,5 +7186,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1599 "parser.yy"
+#line 1607 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7191,5 +7193,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
+#line 1609 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7198,5 +7200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1603 "parser.yy"
+#line 1611 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7205,23 +7207,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1611 "parser.yy"
+#line 1619 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
   case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1613 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 409:
-
-/* 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  */
@@ -7230,8 +7218,22 @@
     break;
 
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1623 "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 1629 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
+    break;
+
   case 412:
 
 /* Line 1806 of yacc.c  */
-#line 1626 "parser.yy"
+#line 1634 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7240,5 +7242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1633 "parser.yy"
+#line 1641 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7247,5 +7249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1640 "parser.yy"
+#line 1648 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7254,5 +7256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1642 "parser.yy"
+#line 1650 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7261,5 +7263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1659 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7268,5 +7270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1654 "parser.yy"
+#line 1662 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7275,5 +7277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1656 "parser.yy"
+#line 1664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7282,5 +7284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1666 "parser.yy"
+#line 1674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7289,5 +7291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1672 "parser.yy"
+#line 1680 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7299,5 +7301,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1677 "parser.yy"
+#line 1685 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7309,5 +7311,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+#line 1694 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7316,5 +7318,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+#line 1703 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7323,16 +7325,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 1697 "parser.yy"
+#line 1705 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
   case 447:
-
-/* Line 1806 of yacc.c  */
-#line 1722 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 451:
 
 /* Line 1806 of yacc.c  */
@@ -7341,8 +7336,15 @@
     break;
 
+  case 451:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
   case 452:
 
 /* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+#line 1743 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7351,5 +7353,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
+#line 1745 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
@@ -7358,5 +7360,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1739 "parser.yy"
+#line 1747 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
     break;
@@ -7365,5 +7367,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1743 "parser.yy"
+#line 1751 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
@@ -7372,5 +7374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+#line 1752 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
@@ -7379,5 +7381,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1749 "parser.yy"
+#line 1757 "parser.yy"
     { (yyval.in) = 0; }
     break;
@@ -7386,5 +7388,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1751 "parser.yy"
+#line 1759 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
@@ -7393,5 +7395,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1752 "parser.yy"
+#line 1760 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
@@ -7400,5 +7402,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1754 "parser.yy"
+#line 1762 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
@@ -7407,5 +7409,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1770 "parser.yy"
+#line 1778 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
@@ -7414,5 +7416,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1776 "parser.yy"
+#line 1784 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -7421,5 +7423,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
+#line 1790 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
@@ -7428,5 +7430,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1785 "parser.yy"
+#line 1793 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7435,5 +7437,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
+#line 1795 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
@@ -7442,5 +7444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
+#line 1797 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
@@ -7449,5 +7451,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
+#line 1799 "parser.yy"
     { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
@@ -7456,5 +7458,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+#line 1823 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7463,5 +7465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+#line 1825 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7470,5 +7472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1819 "parser.yy"
+#line 1827 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7477,5 +7479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
+#line 1833 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7484,5 +7486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+#line 1835 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7491,5 +7493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1832 "parser.yy"
+#line 1840 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -7498,5 +7500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1838 "parser.yy"
+#line 1846 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -7505,5 +7507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1843 "parser.yy"
+#line 1851 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
@@ -7512,5 +7514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1845 "parser.yy"
+#line 1853 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7519,5 +7521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1851 "parser.yy"
+#line 1859 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
@@ -7526,5 +7528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1853 "parser.yy"
+#line 1861 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
@@ -7533,5 +7535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+#line 1863 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
@@ -7540,5 +7542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1860 "parser.yy"
+#line 1868 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7547,5 +7549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1862 "parser.yy"
+#line 1870 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) != 0 ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
@@ -7554,5 +7556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
+#line 1875 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7564,5 +7566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1872 "parser.yy"
+#line 1880 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
@@ -7571,5 +7573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1874 "parser.yy"
+#line 1882 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7578,5 +7580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1879 "parser.yy"
+#line 1887 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
@@ -7585,5 +7587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1882 "parser.yy"
+#line 1890 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
@@ -7592,5 +7594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1884 "parser.yy"
+#line 1892 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -7599,5 +7601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1889 "parser.yy"
+#line 1897 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
@@ -7606,5 +7608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
+#line 1899 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -7613,5 +7615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+#line 1901 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
@@ -7620,5 +7622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1898 "parser.yy"
+#line 1906 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7627,5 +7629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1900 "parser.yy"
+#line 1908 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -7634,5 +7636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1905 "parser.yy"
+#line 1913 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7644,5 +7646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1910 "parser.yy"
+#line 1918 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7654,5 +7656,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1918 "parser.yy"
+#line 1926 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7664,5 +7666,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1923 "parser.yy"
+#line 1931 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7674,5 +7676,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1928 "parser.yy"
+#line 1936 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7685,5 +7687,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+#line 1946 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -7692,5 +7694,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1948 "parser.yy"
+#line 1956 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7702,5 +7704,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1953 "parser.yy"
+#line 1961 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7712,5 +7714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1958 "parser.yy"
+#line 1966 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7722,5 +7724,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1966 "parser.yy"
+#line 1974 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7732,5 +7734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1971 "parser.yy"
+#line 1979 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7742,5 +7744,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1981 "parser.yy"
+#line 1989 "parser.yy"
     {}
     break;
@@ -7749,5 +7751,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1983 "parser.yy"
+#line 1991 "parser.yy"
     {
 			if ( theTree ) {
@@ -7762,5 +7764,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+#line 2003 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
@@ -7769,5 +7771,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
+#line 2008 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7776,5 +7778,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
+#line 2016 "parser.yy"
     {}
     break;
@@ -7783,5 +7785,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2010 "parser.yy"
+#line 2018 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7793,5 +7795,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2015 "parser.yy"
+#line 2023 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7804,5 +7806,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2021 "parser.yy"
+#line 2029 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != NULL; iter = (DeclarationNode *)iter->get_link() )
@@ -7815,5 +7817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2036 "parser.yy"
+#line 2044 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7826,5 +7828,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2042 "parser.yy"
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7837,5 +7839,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+#line 2059 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7848,5 +7850,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
+#line 2065 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7859,5 +7861,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2063 "parser.yy"
+#line 2071 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7870,5 +7872,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2069 "parser.yy"
+#line 2077 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7881,5 +7883,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2075 "parser.yy"
+#line 2083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7892,5 +7894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2083 "parser.yy"
+#line 2091 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7901,15 +7903,4 @@
 
   case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2089 "parser.yy"
-    {
-			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			typedefTable.leaveScope();
-			(yyval.decl) = (yyvsp[(2) - (5)].decl)->addOldDeclList( (yyvsp[(4) - (5)].decl) )->addFunctionBody( (yyvsp[(5) - (5)].sn) )->addQualifiers( (yyvsp[(1) - (5)].decl) );
-		}
-    break;
-
-  case 537:
 
 /* Line 1806 of yacc.c  */
@@ -7922,8 +7913,19 @@
     break;
 
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2105 "parser.yy"
+    {
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			(yyval.decl) = (yyvsp[(2) - (5)].decl)->addOldDeclList( (yyvsp[(4) - (5)].decl) )->addFunctionBody( (yyvsp[(5) - (5)].sn) )->addQualifiers( (yyvsp[(1) - (5)].decl) );
+		}
+    break;
+
   case 538:
 
 /* Line 1806 of yacc.c  */
-#line 2103 "parser.yy"
+#line 2111 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7936,5 +7938,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2118 "parser.yy"
+#line 2126 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -7943,5 +7945,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2128 "parser.yy"
+#line 2136 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7950,5 +7952,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2135 "parser.yy"
+#line 2143 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7957,5 +7959,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2141 "parser.yy"
+#line 2149 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -7964,5 +7966,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2156 "parser.yy"
+#line 2164 "parser.yy"
     {}
     break;
@@ -7971,5 +7973,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2157 "parser.yy"
+#line 2165 "parser.yy"
     {}
     break;
@@ -7978,5 +7980,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2158 "parser.yy"
+#line 2166 "parser.yy"
     {}
     break;
@@ -7985,5 +7987,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+#line 2167 "parser.yy"
     {}
     break;
@@ -7992,5 +7994,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
+#line 2202 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -7999,5 +8001,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2197 "parser.yy"
+#line 2205 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8006,5 +8008,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2199 "parser.yy"
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8013,5 +8015,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2212 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8023,5 +8025,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2209 "parser.yy"
+#line 2217 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8030,5 +8032,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2214 "parser.yy"
+#line 2222 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8037,5 +8039,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2216 "parser.yy"
+#line 2224 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8044,5 +8046,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2218 "parser.yy"
+#line 2226 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8051,5 +8053,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2223 "parser.yy"
+#line 2231 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8058,5 +8060,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2225 "parser.yy"
+#line 2233 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8065,5 +8067,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2227 "parser.yy"
+#line 2235 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8072,5 +8074,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2229 "parser.yy"
+#line 2237 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8079,5 +8081,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2234 "parser.yy"
+#line 2242 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8086,5 +8088,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8093,5 +8095,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8100,5 +8102,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2248 "parser.yy"
+#line 2256 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8107,5 +8109,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2253 "parser.yy"
+#line 2261 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8114,5 +8116,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2255 "parser.yy"
+#line 2263 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8121,5 +8123,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2257 "parser.yy"
+#line 2265 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8128,5 +8130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2262 "parser.yy"
+#line 2270 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8135,5 +8137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2264 "parser.yy"
+#line 2272 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8142,5 +8144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2266 "parser.yy"
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8149,5 +8151,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
+#line 2279 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8156,5 +8158,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2273 "parser.yy"
+#line 2281 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8163,5 +8165,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2275 "parser.yy"
+#line 2283 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8170,5 +8172,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
+#line 2298 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
@@ -8177,5 +8179,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2292 "parser.yy"
+#line 2300 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
@@ -8184,5 +8186,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
+#line 2302 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8191,5 +8193,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
+#line 2307 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8198,5 +8200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2301 "parser.yy"
+#line 2309 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8205,5 +8207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
+#line 2311 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8212,5 +8214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2308 "parser.yy"
+#line 2316 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8219,5 +8221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2310 "parser.yy"
+#line 2318 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8226,5 +8228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2312 "parser.yy"
+#line 2320 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8233,5 +8235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2327 "parser.yy"
+#line 2335 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8240,5 +8242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+#line 2338 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8247,5 +8249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+#line 2340 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8254,5 +8256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
+#line 2346 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8261,5 +8263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
+#line 2351 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8268,5 +8270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
+#line 2353 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8275,5 +8277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
+#line 2355 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8282,5 +8284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
+#line 2360 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8289,5 +8291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
+#line 2362 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8296,5 +8298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2356 "parser.yy"
+#line 2364 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8303,5 +8305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
+#line 2366 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8310,5 +8312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2363 "parser.yy"
+#line 2371 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8317,5 +8319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
+#line 2373 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8324,5 +8326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2367 "parser.yy"
+#line 2375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8331,5 +8333,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2377 "parser.yy"
+#line 2385 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8338,5 +8340,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
+#line 2388 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8345,5 +8347,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2382 "parser.yy"
+#line 2390 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8352,5 +8354,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
+#line 2395 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8359,5 +8361,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2389 "parser.yy"
+#line 2397 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8366,5 +8368,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2391 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8373,5 +8375,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2396 "parser.yy"
+#line 2404 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8380,5 +8382,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8387,5 +8389,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
+#line 2408 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8394,5 +8396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2402 "parser.yy"
+#line 2410 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8401,5 +8403,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2407 "parser.yy"
+#line 2415 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8408,5 +8410,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8415,5 +8417,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2411 "parser.yy"
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8422,5 +8424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
+#line 2450 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8429,5 +8431,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
+#line 2453 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8436,5 +8438,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
+#line 2455 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8443,5 +8445,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2452 "parser.yy"
+#line 2460 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8453,5 +8455,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2457 "parser.yy"
+#line 2465 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8463,5 +8465,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2465 "parser.yy"
+#line 2473 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8470,5 +8472,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2467 "parser.yy"
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8477,5 +8479,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2469 "parser.yy"
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8484,5 +8486,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+#line 2482 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8491,5 +8493,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2476 "parser.yy"
+#line 2484 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8498,5 +8500,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+#line 2489 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
@@ -8505,5 +8507,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+#line 2491 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8512,5 +8514,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2498 "parser.yy"
+#line 2506 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8519,5 +8521,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2500 "parser.yy"
+#line 2508 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8526,5 +8528,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2505 "parser.yy"
+#line 2513 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8533,5 +8535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+#line 2515 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8540,5 +8542,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2509 "parser.yy"
+#line 2517 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8547,5 +8549,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2511 "parser.yy"
+#line 2519 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8554,5 +8556,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2513 "parser.yy"
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8561,5 +8563,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+#line 2527 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8568,5 +8570,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+#line 2529 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8575,5 +8577,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
+#line 2531 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8582,5 +8584,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2528 "parser.yy"
+#line 2536 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8589,5 +8591,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2530 "parser.yy"
+#line 2538 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8596,5 +8598,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2532 "parser.yy"
+#line 2540 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8603,5 +8605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2538 "parser.yy"
+#line 2546 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8610,5 +8612,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
+#line 2548 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -8617,5 +8619,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2546 "parser.yy"
+#line 2554 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
@@ -8624,5 +8626,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
+#line 2556 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
@@ -8631,5 +8633,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
+#line 2558 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
@@ -8638,5 +8640,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
+#line 2560 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
@@ -8645,5 +8647,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2567 "parser.yy"
+#line 2575 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8652,5 +8654,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2569 "parser.yy"
+#line 2577 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8659,5 +8661,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
+#line 2582 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8666,5 +8668,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+#line 2584 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8673,5 +8675,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+#line 2586 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8680,5 +8682,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+#line 2588 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8687,5 +8689,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+#line 2590 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8694,5 +8696,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+#line 2596 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8701,5 +8703,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+#line 2598 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8708,5 +8710,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
+#line 2600 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8715,5 +8717,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2597 "parser.yy"
+#line 2605 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
@@ -8722,5 +8724,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2599 "parser.yy"
+#line 2607 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8729,5 +8731,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2601 "parser.yy"
+#line 2609 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8736,5 +8738,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2608 "parser.yy"
+#line 2616 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8743,5 +8745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
+#line 2627 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
@@ -8750,5 +8752,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
+#line 2630 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8757,5 +8759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
+#line 2632 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
@@ -8764,5 +8766,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2627 "parser.yy"
+#line 2635 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -8771,5 +8773,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2629 "parser.yy"
+#line 2637 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
@@ -8778,5 +8780,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2631 "parser.yy"
+#line 2639 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
@@ -8785,5 +8787,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2645 "parser.yy"
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8792,5 +8794,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2647 "parser.yy"
+#line 2655 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8799,5 +8801,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
+#line 2660 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
@@ -8806,5 +8808,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2654 "parser.yy"
+#line 2662 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8813,5 +8815,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
+#line 2664 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
@@ -8820,5 +8822,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
+#line 2666 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
@@ -8827,5 +8829,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8834,5 +8836,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
+#line 2674 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8841,5 +8843,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2668 "parser.yy"
+#line 2676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
@@ -8848,5 +8850,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2670 "parser.yy"
+#line 2678 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8855,5 +8857,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
+#line 2683 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
@@ -8862,5 +8864,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
+#line 2685 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
@@ -8869,37 +8871,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2687 "parser.yy"
+#line 2695 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
   case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2697 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2699 "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  */
@@ -8908,5 +8882,5 @@
     break;
 
-  case 711:
+  case 707:
 
 /* Line 1806 of yacc.c  */
@@ -8915,8 +8889,36 @@
     break;
 
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2709 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2711 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2713 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2715 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
   case 712:
 
 /* Line 1806 of yacc.c  */
-#line 2714 "parser.yy"
+#line 2722 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8925,5 +8927,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2716 "parser.yy"
+#line 2724 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8932,5 +8934,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2718 "parser.yy"
+#line 2726 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8939,5 +8941,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2720 "parser.yy"
+#line 2728 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8946,5 +8948,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2722 "parser.yy"
+#line 2730 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8953,5 +8955,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
+#line 2732 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8960,5 +8962,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2726 "parser.yy"
+#line 2734 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8967,5 +8969,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2728 "parser.yy"
+#line 2736 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -8974,5 +8976,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2730 "parser.yy"
+#line 2738 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
@@ -8981,5 +8983,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2732 "parser.yy"
+#line 2740 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -8988,5 +8990,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
+#line 2745 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
@@ -8995,5 +8997,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+#line 2747 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
@@ -9002,5 +9004,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2744 "parser.yy"
+#line 2752 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
@@ -9009,5 +9011,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2746 "parser.yy"
+#line 2754 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
@@ -9016,37 +9018,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
+#line 2781 "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  */
@@ -9055,5 +9029,5 @@
     break;
 
-  case 736:
+  case 732:
 
 /* Line 1806 of yacc.c  */
@@ -9062,8 +9036,36 @@
     break;
 
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2796 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2798 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
   case 737:
 
 /* Line 1806 of yacc.c  */
-#line 2801 "parser.yy"
+#line 2809 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9072,5 +9074,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2803 "parser.yy"
+#line 2811 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9079,5 +9081,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2813 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9086,5 +9088,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2807 "parser.yy"
+#line 2815 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9093,5 +9095,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2809 "parser.yy"
+#line 2817 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
@@ -9100,5 +9102,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2811 "parser.yy"
+#line 2819 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -9107,5 +9109,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
+#line 2824 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -9114,5 +9116,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2821 "parser.yy"
+#line 2829 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
@@ -9121,5 +9123,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2823 "parser.yy"
+#line 2831 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9128,5 +9130,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2825 "parser.yy"
+#line 2833 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
@@ -9135,5 +9137,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2849 "parser.yy"
+#line 2857 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -9142,5 +9144,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2851 "parser.yy"
+#line 2859 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9149,5 +9151,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9152 "Parser/parser.cc"
+#line 9154 "Parser/parser.cc"
       default: break;
     }
@@ -9380,5 +9382,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2854 "parser.yy"
+#line 2862 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/parser.h	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -272,4 +272,5 @@
 	StatementNode *sn;
 	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
@@ -280,5 +281,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 283 "Parser/parser.h"
+#line 284 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision d1625f82c40dd212bed00f86dad00c157f461b77)
+++ src/Parser/parser.yy	(revision 3078643badaf4e6783038509fba874449f0d1ae6)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug  9 12:59:11 2016
-// Update Count     : 1821
+// Last Modified On : Wed Aug 10 13:09:53 2016
+// Update Count     : 1844
 //
 
@@ -122,4 +122,5 @@
 	StatementNode *sn;
 	ConstantExpr *constant;
+	ForCtl *fctl;
 	LabelNode *label;
 	InitializerNode *in;
@@ -142,5 +143,7 @@
 %type<en> constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
+//%type<en> argument_expression_list		argument_expression			for_control_expression		assignment_opt
+%type<en> argument_expression_list		argument_expression			assignment_opt
+%type<fctl> for_control_expression
 %type<en> subrange
 %type<en> asm_operands_opt asm_operands_list asm_operand
@@ -720,12 +723,15 @@
 	IF '(' comma_expression ')' statement				%prec THEN
 		// explicitly deal with the shift/reduce conflict on if/else
-		{ $$ = new StatementNode( StatementNode::If, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::If, $3, $5 ); }
+		{ $$ = new StatementNode2( build_if( $3, $5, nullptr ) ); }
 	| IF '(' comma_expression ')' statement ELSE statement
-		{ $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
+		//{ $$ = new StatementNode( StatementNode::If, $3, (StatementNode *)mkList((*$5, *$7 )) ); }
+		{ $$ = new StatementNode2( build_if( $3, $5, $7 ) ); }
 	| SWITCH '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
 	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
 			// The semantics of the declaration list is changed to include associated initialization, which is performed
 			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
@@ -736,8 +742,10 @@
 		}
 	| CHOOSE '(' comma_expression ')' case_clause		// CFA
-		{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		//{ $$ = new StatementNode( StatementNode::Switch, $3, $5 ); }
+		{ $$ = new StatementNode2( build_switch( $3, $5 ) ); }
 	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
 		{
-			StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			//StatementNode *sw = new StatementNode( StatementNode::Switch, $3, $8 );
+			StatementNode *sw = new StatementNode2( build_switch( $3, $8 ) );
 			$$ = $7 != 0 ? new CompoundStmtNode( (StatementNode *)((new StatementNode( $7 ))->set_link( sw )) ) : sw;
 		}
@@ -820,16 +828,16 @@
 iteration_statement:
 	WHILE '(' comma_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::While, $3, $5 ); }
+		{ $$ = new StatementNode2( build_while( $3, $5 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
-		{ $$ = new StatementNode( StatementNode::Do, $5, $2 ); }
+		{ $$ = new StatementNode2( build_while( $5, $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement
-		{ $$ = new StatementNode( StatementNode::For, $4, $6 ); }
+		{ $$ = new StatementNode2( build_for( $4, $6 ) ); }
 	;
 
 for_control_expression:
 	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtlExprNode( $1, $4, $6 ); }
+		{ $$ = new ForCtl( $1, $4, $6 ); }
 	| declaration comma_expression_opt ';' comma_expression_opt // C99
-		{ $$ = new ForCtlExprNode( $1, $2, $4 ); }
+		{ $$ = new ForCtl( $1, $2, $4 ); }
  	;
 
@@ -946,5 +954,5 @@
 		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $4, $6, $8, $10 ); }
 	| ASM asm_volatile_opt GOTO '(' string_literal_list ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
-	{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
+		{ $$ = new AsmStmtNode( StatementNode::Asm, $2, $5, 0, $8, $10, $12 ); }
 	;
 
