Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/AggregateDecl.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 23:56:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  6 15:31:23 2017
-// Update Count     : 17
+// Last Modified On : Tue Mar  7 07:31:47 2017
+// Update Count     : 19
 //
 
@@ -20,5 +20,5 @@
 
 
-AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes ) : Parent( name, DeclarationNode::NoStorageClass, LinkageSpec::Cforall ), body( false ), attributes( attributes ) {
+AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes ) : Parent( name, DeclarationNode::StorageClasses(), LinkageSpec::Cforall ), body( false ), attributes( attributes ) {
 }
 
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/Declaration.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  1 20:11:57 2017
-// Update Count     : 17
+// Last Modified On : Tue Mar  7 07:31:11 2017
+// Update Count     : 23
 //
 
@@ -27,10 +27,10 @@
 static IdMapType idMap;
 
-Declaration::Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage )
-		: name( name ), storageClass( sc ), linkage( linkage ), uniqueId( 0 ) {
+Declaration::Declaration( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage )
+		: name( name ), storageClasses( scs ), linkage( linkage ), uniqueId( 0 ) {
 }
 
 Declaration::Declaration( const Declaration &other )
-	: name( other.name ), storageClass( other.storageClass ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
+	: name( other.name ), storageClasses( other.storageClasses ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
 }
 
@@ -66,5 +66,5 @@
 
 
-AsmDecl::AsmDecl( AsmStmt *stmt ) : Declaration( "", DeclarationNode::NoStorageClass, LinkageSpec::C ), stmt( stmt ) {
+AsmDecl::AsmDecl( AsmStmt *stmt ) : Declaration( "", DeclarationNode::StorageClasses(), LinkageSpec::C ), stmt( stmt ) {
 }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/Declaration.h	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar  3 20:59:27 2017
-// Update Count     : 96
+// Last Modified On : Tue Mar  7 07:40:42 2017
+// Update Count     : 113
 //
 
@@ -28,5 +28,5 @@
 class Declaration : public BaseSyntaxNode {
   public:
-	Declaration( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage );
+	Declaration( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage );
 	Declaration( const Declaration &other );
 	virtual ~Declaration();
@@ -34,9 +34,12 @@
 	const std::string &get_name() const { return name; }
 	void set_name( std::string newValue ) { name = newValue; }
-	DeclarationNode::StorageClass get_storageClass() const { return storageClass; }
-	void set_storageClass( DeclarationNode::StorageClass newValue ) { storageClass = newValue; }
+
+	DeclarationNode::StorageClasses get_storageClasses() const { return storageClasses; }
+
 	LinkageSpec::Spec get_linkage() const { return linkage; }
 	void set_linkage( LinkageSpec::Spec newValue ) { linkage = newValue; }
+
 	UniqueId get_uniqueId() const { return uniqueId; }
+
 	bool get_extension() const { return extension; }
 	Declaration *set_extension( bool exten ) { extension = exten; return this; }
@@ -53,5 +56,5 @@
   private:
 	std::string name;
-	DeclarationNode::StorageClass storageClass;
+	DeclarationNode::StorageClasses storageClasses;
 	LinkageSpec::Spec linkage;
 	UniqueId uniqueId;
@@ -61,5 +64,5 @@
 class DeclarationWithType : public Declaration {
   public:
-	DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
+	DeclarationWithType( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpecifiers fs );
 	DeclarationWithType( const DeclarationWithType &other );
 	virtual ~DeclarationWithType();
@@ -79,6 +82,6 @@
 	const std::list< Attribute * >& get_attributes() const { return attributes; }
 
-	DeclarationNode::FuncSpec get_funcSpec() const { return fs; }
-	void set_functionSpecifiers( DeclarationNode::FuncSpec newValue ) { fs = newValue; }
+	DeclarationNode::FuncSpecifiers get_funcSpec() const { return fs; }
+	//void set_functionSpecifiers( DeclarationNode::FuncSpecifiers newValue ) { fs = newValue; }
 
 	virtual DeclarationWithType *clone() const = 0;
@@ -95,5 +98,5 @@
 	ConstantExpr *asmName;
 	std::list< Attribute * > attributes;
-	DeclarationNode::FuncSpec fs;
+	DeclarationNode::FuncSpecifiers fs;
 };
 
@@ -101,6 +104,6 @@
 	typedef DeclarationWithType Parent;
   public:
-	ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init,
-				const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
+	ObjectDecl( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init,
+				const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpecifiers fs = DeclarationNode::FuncSpecifiers() );
 	ObjectDecl( const ObjectDecl &other );
 	virtual ~ObjectDecl();
@@ -129,6 +132,6 @@
 	typedef DeclarationWithType Parent;
   public:
-	FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements,
-				  const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpec fs = DeclarationNode::FuncSpec() );
+	FunctionDecl( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements,
+				  const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpecifiers fs = DeclarationNode::FuncSpecifiers() );
 	FunctionDecl( const FunctionDecl &other );
 	virtual ~FunctionDecl();
@@ -155,5 +158,5 @@
 	typedef Declaration Parent;
   public:
-	NamedTypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type );
+	NamedTypeDecl( const std::string &name, DeclarationNode::StorageClasses scs, Type *type );
 	NamedTypeDecl( const NamedTypeDecl &other );
 	virtual ~NamedTypeDecl();
@@ -190,5 +193,5 @@
 	};
 
-	TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind );
+	TypeDecl( const std::string &name, DeclarationNode::StorageClasses scs, Type *type, Kind kind );
 	TypeDecl( const TypeDecl &other );
 
@@ -211,5 +214,5 @@
 	typedef NamedTypeDecl Parent;
   public:
-	TypedefDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type ) : Parent( name, sc, type ) {}
+	TypedefDecl( const std::string &name, DeclarationNode::StorageClasses scs, Type *type ) : Parent( name, scs, type ) {}
 	TypedefDecl( const TypedefDecl &other ) : Parent( other ) {}
 
Index: src/SynTree/DeclarationWithType.cc
===================================================================
--- src/SynTree/DeclarationWithType.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/DeclarationWithType.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar  3 20:59:28 2017
-// Update Count     : 19
+// Last Modified On : Tue Mar  7 07:32:14 2017
+// Update Count     : 23
 //
 
@@ -19,10 +19,10 @@
 #include "Common/utility.h"
 
-DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpec fs )
-	: Declaration( name, sc, linkage ), asmName( nullptr ), attributes( attributes ), fs( fs ) {
+DeclarationWithType::DeclarationWithType( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpecifiers fs )
+	: Declaration( name, scs, linkage ), asmName( nullptr ), attributes( attributes ), fs( fs ) {
 }
 
 DeclarationWithType::DeclarationWithType( const DeclarationWithType &other )
-	: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ), fs( other.fs ) {
+		: Declaration( other ), mangleName( other.mangleName ), scopeLevel( other.scopeLevel ), fs( other.fs ) {
 	cloneAll( other.attributes, attributes );
 	asmName = maybeClone( other.asmName );
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/FunctionDecl.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar  3 21:29:41 2017
-// Update Count     : 55
+// Last Modified On : Tue Mar  7 07:54:58 2017
+// Update Count     : 68
 //
 
@@ -26,8 +26,6 @@
 extern bool translation_unit_nomain;
 
-FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, DeclarationNode::FuncSpec fs )
-		: Parent( name, sc, linkage, attributes, fs ), type( type ), statements( statements ) {
-	set_functionSpecifiers( fs );
-
+FunctionDecl::FunctionDecl( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, DeclarationNode::FuncSpecifiers fs )
+	: Parent( name, scs, linkage, attributes, fs ), type( type ), statements( statements ) {
 	// hack forcing the function "main" to have Cforall linkage to replace main even if it is inside an extern
 	if ( name == "main" ) {
@@ -37,5 +35,5 @@
 
 FunctionDecl::FunctionDecl( const FunctionDecl &other )
-	: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
+		: Parent( other ), type( maybeClone( other.type ) ), statements( maybeClone( other.statements ) ) {
 }
 
@@ -67,7 +65,5 @@
 	printAll( get_attributes(), os, indent );
 
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 	DeclarationNode::print_FuncSpec( os, get_funcSpec() );
 
@@ -95,7 +91,5 @@
 	// xxx - should printShort print attributes?
 
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 	DeclarationNode::print_FuncSpec( os, get_funcSpec() );
 
Index: src/SynTree/NamedTypeDecl.cc
===================================================================
--- src/SynTree/NamedTypeDecl.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/NamedTypeDecl.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb 28 16:13:24 2017
-// Update Count     : 4
+// Last Modified On : Tue Mar  7 07:39:41 2017
+// Update Count     : 10
 //
 
@@ -18,6 +18,6 @@
 #include "Common/utility.h"
 
-NamedTypeDecl::NamedTypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *base )
-	: Parent( name, sc, LinkageSpec::Cforall ), base( base ) {}
+NamedTypeDecl::NamedTypeDecl( const std::string &name, DeclarationNode::StorageClasses scs, Type *base )
+	: Parent( name, scs, LinkageSpec::Cforall ), base( base ) {}
 
 NamedTypeDecl::NamedTypeDecl( const NamedTypeDecl &other )
@@ -39,7 +39,5 @@
 		os << get_name() << ": ";
 	} // if
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 	os << typeString();
 	if ( base ) {
@@ -63,7 +61,5 @@
 		os << get_name() << ": ";
 	} // if
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 	os << typeString();
 	if ( base ) {
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/ObjectDecl.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar  3 20:59:27 2017
-// Update Count     : 45
+// Last Modified On : Tue Mar  7 07:55:24 2017
+// Update Count     : 54
 //
 
@@ -22,7 +22,6 @@
 #include "Statement.h"
 
-ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClass sc, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, DeclarationNode::FuncSpec fs )
-	: Parent( name, sc, linkage, attributes, fs ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
-	set_functionSpecifiers( fs );
+ObjectDecl::ObjectDecl( const std::string &name, DeclarationNode::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, DeclarationNode::FuncSpecifiers fs )
+	: Parent( name, scs, linkage, attributes, fs ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) {
 }
 
@@ -48,7 +47,5 @@
 	printAll( get_attributes(), os, indent );
 
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 
 	if ( get_type() ) {
@@ -84,7 +81,5 @@
 	// xxx - should printShort print attributes?
 
-	if ( get_storageClass() != DeclarationNode::NoStorageClass ) {
-		os << DeclarationNode::storageClassNames[ get_storageClass() ] << ' ';
-	} // if
+	DeclarationNode::print_StorageClass( os, get_storageClasses() );
 
 	if ( get_type() ) {
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision dd020c0cdff72537d5b1dffcf6920c72db9d585a)
+++ src/SynTree/TypeDecl.cc	(revision a7c90d4d68e0538c8215b52b958e12c56980c401)
@@ -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:14:35 2015
-// Update Count     : 2
+// Last Modified On : Tue Mar  7 07:39:09 2017
+// Update Count     : 4
 //
 
@@ -18,5 +18,5 @@
 #include "Common/utility.h"
 
-TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any || kind == Ttype ) {
+TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClasses scs, Type *type, Kind kind ) : Parent( name, scs, type ), kind( kind ), sized( kind == Any || kind == Ttype ) {
 }
 
