Index: src/SynTree/CompoundStmt.cc
===================================================================
--- src/SynTree/CompoundStmt.cc	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/CompoundStmt.cc	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  5 07:46:03 2015
-// Update Count     : 2
+// Last Modified On : Tue Jun 23 11:37:49 2015
+// Update Count     : 3
 //
 
@@ -33,5 +33,5 @@
 }
 
-void CompoundStmt::print( std::ostream &os, int indent ) {
+void CompoundStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "CompoundStmt" << endl ;
 	printAll( kids, os, indent + 2 );
Index: src/SynTree/DeclStmt.cc
===================================================================
--- src/SynTree/DeclStmt.cc	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/DeclStmt.cc	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  8 17:24:38 2015
-// Update Count     : 3
+// Last Modified On : Tue Jun 23 11:38:15 2015
+// Update Count     : 4
 //
 
@@ -28,5 +28,5 @@
 }
 
-void DeclStmt::print( std::ostream &os, int indent ) {
+void DeclStmt::print( std::ostream &os, int indent ) const {
 	assert( decl != 0 );
 	os << "Declaration of ";
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/Declaration.h	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 12 23:55:26 2015
-// Update Count     : 24
+// Last Modified On : Sat Jun 13 09:10:31 2015
+// Update Count     : 25
 //
 
@@ -101,5 +101,5 @@
 	typedef DeclarationWithType Parent;
   public:
-	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline );
+	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn );
 	FunctionDecl( const FunctionDecl &other );
 	virtual ~FunctionDecl();
@@ -113,5 +113,5 @@
 	void set_statements( CompoundStmt *newValue ) { statements = newValue; }
 	bool get_isInline() const { return isInline; }
-//	void set_isInline( bool newValue ) { isInline = newValue; }
+	bool get_isNoreturn() const { return isNoreturn; }
 	std::list< std::string >& get_oldIdents() { return oldIdents; }
 	std::list< Declaration* >& get_oldDecls() { return oldDecls; }
@@ -125,5 +125,5 @@
 	FunctionType *type;
 	CompoundStmt *statements;
-	bool isInline;
+	bool isInline, isNoreturn;
 	std::list< std::string > oldIdents;
 	std::list< Declaration* > oldDecls;
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/FunctionDecl.cc	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:12:20 2015
-// Update Count     : 14
+// Last Modified On : Sat Jun 13 09:10:32 2015
+// Update Count     : 16
 //
 
@@ -21,6 +21,6 @@
 #include "utility.h"
 
-FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline )
-		: Parent( name, sc, linkage ), type( type ), statements( statements ), isInline( isInline ) {
+FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Type linkage, FunctionType *type, CompoundStmt *statements, bool isInline, bool isNoreturn )
+		: Parent( name, sc, linkage ), type( type ), statements( statements ), isInline( isInline ), isNoreturn( isNoreturn ) {
 	// this is a brazen hack to force the function "main" to have C linkage
 	if ( name == "main" ) {
@@ -30,5 +30,5 @@
 
 FunctionDecl::FunctionDecl( const FunctionDecl &other )
-		: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ), isInline( other.isInline ) {
+	: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ), isInline( other.isInline ), isNoreturn( other.isNoreturn ) {
 }
 
@@ -60,4 +60,7 @@
 		os << "inline ";
 	} // if
+	if ( isNoreturn ) {
+		os << "_Noreturn ";
+	} // if
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
 		os << DeclarationNode::storageName[ get_storageClass() ] << ' ';
@@ -70,17 +73,17 @@
 
 	if ( ! oldIdents.empty() ) {
-		os << string( indent+2, ' ' ) << "with parameter names" << endl;
+		os << string( indent + 2, ' ' ) << "with parameter names" << endl;
 		for ( std::list< std::string >::const_iterator i = oldIdents.begin(); i != oldIdents.end(); ++i ) {
-			os << string( indent+4, ' ' ) << *i << endl;
+			os << string( indent + 4, ' ' ) << *i << endl;
 		} // for
 	} // if
 
 	if ( ! oldDecls.empty() ) {
-		os << string( indent+2, ' ' ) << "with parameter declarations" << endl;
-		printAll( oldDecls, os, indent+4 );
+		os << string( indent + 2, ' ' ) << "with parameter declarations" << endl;
+		printAll( oldDecls, os, indent + 4 );
 	} // if
 	if ( statements ) {
-		os << string( indent+2, ' ' ) << "with body " << endl;
-		statements->print( os, indent+4 );
+		os << string( indent + 2, ' ' ) << "with body " << endl;
+		statements->print( os, indent + 4 );
 	} // if
 }
@@ -95,4 +98,7 @@
 	if ( isInline ) {
 		os << "inline ";
+	} // if
+	if ( isNoreturn ) {
+		os << "_Noreturn ";
 	} // if
 	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/Statement.cc	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun  5 07:51:04 2015
-// Update Count     : 15
+// Last Modified On : Tue Jun 23 11:42:09 2015
+// Update Count     : 21
 //
 
@@ -30,5 +30,5 @@
 Statement::Statement( std::list<Label> _labels ) : labels(_labels ) {}
 
-void Statement::print( std::ostream &, int indent ) {}
+void Statement::print( std::ostream &, int indent ) const {}
 
 Statement::~Statement() {}
@@ -38,5 +38,5 @@
 ExprStmt::~ExprStmt() {}
 
-void ExprStmt::print( std::ostream &os, int indent ) {
+void ExprStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Expression Statement:" << endl;
 	expr->print( os, indent + 2 );
@@ -58,5 +58,5 @@
 }
 
-void BranchStmt::print( std::ostream &os, int indent ) {
+void BranchStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Branch (" << brType[type] << ")" << endl ;
 }
@@ -68,5 +68,5 @@
 }
 
-void ReturnStmt::print( std::ostream &os, int indent ) {
+void ReturnStmt::print( std::ostream &os, int indent ) const {
 	os << std::string( indent, ' ' ) << string ( isThrow? "Throw":"Return" ) << " Statement, returning: ";
 	if ( expr != 0 ) expr->print( os );
@@ -79,5 +79,5 @@
 IfStmt::~IfStmt() {}
 
-void IfStmt::print( std::ostream &os, int indent ) {
+void IfStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "If on condition: " << endl ;
 	condition->print( os, indent + 4 );
@@ -103,5 +103,5 @@
 void SwitchStmt::add_case( CaseStmt *c ) {}
 
-void SwitchStmt::print( std::ostream &os, int indent ) {
+void SwitchStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Switch on condition: ";
 	condition->print( os );
@@ -109,7 +109,7 @@
 
 	// branches
-	std::list<Statement *>::iterator i;
+	std::list<Statement *>::const_iterator i;
 	for ( i = branches.begin(); i != branches.end(); i++)
-		(*i )->print( os, indent + 4 );
+		(*i)->print( os, indent + 4 );
 
 	//for_each( branches.begin(), branches.end(), mem_fun( bind1st(&Statement::print ), os ));
@@ -130,8 +130,8 @@
 }
 
-void CaseStmt::print( std::ostream &os, int indent ) {
+void CaseStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' );
 
-	if ( isDefault())
+	if ( isDefault() )
 		os << "Default ";
 	else {
@@ -142,5 +142,5 @@
 	os << endl;
 
-	std::list<Statement *>::iterator i;
+	std::list<Statement *>::const_iterator i;
 	for ( i = stmts.begin(); i != stmts.end(); i++)
 		(*i )->print( os, indent + 4 );
@@ -158,5 +158,5 @@
 void ChooseStmt::add_case( CaseStmt *c ) {}
 
-void ChooseStmt::print( std::ostream &os, int indent ) {
+void ChooseStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Choose on condition: ";
 	condition->print( os );
@@ -164,5 +164,5 @@
 
 	// branches
-	std::list<Statement *>::iterator i;
+	std::list<Statement *>::const_iterator i;
 	for ( i = branches.begin(); i != branches.end(); i++)
 		(*i )->print( os, indent + 4 );
@@ -171,5 +171,5 @@
 }
 
-void FallthruStmt::print( std::ostream &os, int indent ) {
+void FallthruStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Fall-through statement" << endl;
 }
@@ -183,5 +183,5 @@
 }
 
-void WhileStmt::print( std::ostream &os, int indent ) {
+void WhileStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "While on condition: " << endl ;
 	condition->print( os, indent + 4 );
@@ -203,7 +203,7 @@
 }
 
-void ForStmt::print( std::ostream &os, int indent ) {
+void ForStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Labels: {";
-	for (std::list<Label>::iterator it = get_labels().begin(); it != get_labels().end(); ++it) {
+	for ( std::list<Label>::const_iterator it = get_labels().begin(); it != get_labels().end(); ++it) {
 		os << *it << ",";
 	}
@@ -245,5 +245,5 @@
 }
 
-void TryStmt::print( std::ostream &os, int indent ) {
+void TryStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Try Statement" << endl;
 	os << string( indent + 2, ' ' ) << "with block: " << endl;
@@ -252,6 +252,5 @@
 	// handlers
 	os << string( indent + 2, ' ' ) << "and handlers: " << endl;
-	std::list<Statement *>::iterator i;
-	for ( i = handlers.begin(); i != handlers.end(); i++)
+	for ( std::list<Statement *>::const_iterator i = handlers.begin(); i != handlers.end(); i++)
 		(*i )->print( os, indent + 4 );
 
@@ -272,5 +271,5 @@
 }
 
-void CatchStmt::print( std::ostream &os, int indent ) {
+void CatchStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Catch Statement" << endl;
 
@@ -294,5 +293,5 @@
 }
 
-void FinallyStmt::print( std::ostream &os, int indent ) {
+void FinallyStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Finally Statement" << endl;
 	os << string( indent + 2, ' ' ) << "with block: " << endl;
@@ -304,5 +303,5 @@
 NullStmt::~NullStmt() {}
 
-void NullStmt::print( std::ostream &os, int indent ) {
+void NullStmt::print( std::ostream &os, int indent ) const {
 	os << string( indent, ' ' ) << "Null Statement" << endl ;
 }
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision 68cd1ce1134527e1c664cfdf84df37a7025de8a7)
+++ src/SynTree/Statement.h	(revision de62360d1d2709386152807b3d18e159e241ab1f)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun  4 14:03:31 2015
-// Update Count     : 14
+// Last Modified On : Tue Jun 23 11:44:27 2015
+// Update Count     : 20
 //
 
@@ -28,9 +28,10 @@
 
 	std::list<Label> & get_labels() { return labels; }
+	const std::list<Label> & get_labels() const { return labels; }
 
 	virtual Statement *clone() const = 0;
 	virtual void accept( Visitor &v ) = 0;
 	virtual Statement *acceptMutator( Mutator &m ) = 0;
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   protected:
 	std::list<Label> labels;
@@ -48,5 +49,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual CompoundStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	std::list<Statement*> kids;
@@ -64,5 +65,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression *expr;
@@ -84,5 +85,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression *condition;
@@ -106,5 +107,5 @@
 
 	virtual SwitchStmt *clone() const { return new SwitchStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression * condition;
@@ -127,5 +128,5 @@
 
 	virtual ChooseStmt *clone() const { return new ChooseStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression *condition;
@@ -141,5 +142,5 @@
 
 	virtual FallthruStmt *clone() const { return new FallthruStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
 };
 
@@ -153,5 +154,5 @@
 		std::list<Statement *> stmts = std::list<Statement *>() );
 
-	bool isDefault() { return _isDefault; }
+	bool isDefault() const { return _isDefault; }
 	void set_default(bool b) { _isDefault = b; }
 
@@ -166,5 +167,5 @@
 
 	virtual CaseStmt *clone() const { return new CaseStmt( *this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression * condition;
@@ -189,5 +190,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression *condition;
@@ -214,5 +215,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Statement *initialization;
@@ -224,5 +225,5 @@
 class BranchStmt : public Statement {
   public:
-	enum Type { Goto = 0 , Break, Continue };
+	enum Type { Goto = 0, Break, Continue };
 
 	BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError);
@@ -243,5 +244,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	static const char *brType[];
@@ -263,5 +264,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Expression *expr;
@@ -279,5 +280,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
 	
   private:
@@ -300,5 +301,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
 	
   private:
@@ -322,5 +323,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
 	
   private:
@@ -341,5 +342,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	CompoundStmt *block;
@@ -360,5 +361,5 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-	virtual void print( std::ostream &os, int indent = 0 );
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	Declaration *decl;
