Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision c54b0b45ffaa82f6dc63dcd8712ad7755b88438d)
+++ src/SynTree/Type.cc	(revision bf4ac097c572e75965508a6487a639abaf9d6cc9)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 11:26:24 2017
-// Update Count     : 12
+// Last Modified On : Wed Mar 15 21:22:16 2017
+// Update Count     : 15
 //
 
@@ -59,21 +59,5 @@
 }
 
-void Type::Qualifiers::print( std::ostream &os, int indent ) const {
-	if ( isConst ) {
-		os << "const ";
-	} // if
-	if ( isVolatile ) {
-		os << "volatile ";
-	} // if
-	if ( isRestrict ) {
-		os << "restrict ";
-	} // if
-	if ( isLvalue ) {
-		os << "lvalue ";
-	} // if
-	if ( isAtomic ) {
-		os << "_Atomic ";
-	} // if
-}
+const char * Type::QualifierNames[] = { "const", "restrict", "volatile", "lvalue", "mutex", "_Atomic", "NoTypeQualifierNames" };
 
 void Type::print( std::ostream &os, int indent ) const {
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision c54b0b45ffaa82f6dc63dcd8712ad7755b88438d)
+++ src/SynTree/Type.h	(revision bf4ac097c572e75965508a6487a639abaf9d6cc9)
@@ -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 09:11:45 2017
-// Update Count     : 41
+// Last Modified On : Wed Mar 15 21:23:08 2017
+// Update Count     : 84
 //
 
@@ -24,27 +24,90 @@
 class Type : public BaseSyntaxNode {
   public:
-	struct Qualifiers {
-		Qualifiers(): isConst( false ), isVolatile( false ), isRestrict( false ), isLvalue( false ), isAtomic( false ), isMutex( false ) {}
-		Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isMutex ): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isMutex( isMutex ) {}
-
-		Qualifiers &operator&=( const Qualifiers &other );
-		Qualifiers &operator+=( const Qualifiers &other );
-		Qualifiers &operator-=( const Qualifiers &other );
-		Qualifiers operator+( const Type::Qualifiers &other );
-		bool operator==( const Qualifiers &other );
-		bool operator!=( const Qualifiers &other );
-		bool operator<=( const Qualifiers &other );
-		bool operator>=( const Qualifiers &other );
-		bool operator<( const Qualifiers &other );
-		bool operator>( const Qualifiers &other );
-		void print( std::ostream &os, int indent = 0 ) const;
-
-		bool isConst;
-		bool isVolatile;
-		bool isRestrict;
-		bool isLvalue;
-		bool isAtomic;
-		bool isMutex;
-	};
+	// struct Qualifiers {
+	// 	Qualifiers(): isConst( false ), isVolatile( false ), isRestrict( false ), isLvalue( false ), isAtomic( false ), isMutex( false ) {}
+	// 	Qualifiers( bool isConst, bool isVolatile, bool isRestrict, bool isLvalue, bool isAtomic, bool isMutex ): isConst( isConst ), isVolatile( isVolatile ), isRestrict( isRestrict ), isLvalue( isLvalue ), isAtomic( isAtomic ), isMutex( isMutex ) {}
+
+	// 	Qualifiers &operator&=( const Qualifiers &other );
+	// 	Qualifiers &operator+=( const Qualifiers &other );
+	// 	Qualifiers &operator-=( const Qualifiers &other );
+	// 	Qualifiers operator+( const Type::Qualifiers &other );
+	// 	bool operator==( const Qualifiers &other );
+	// 	bool operator!=( const Qualifiers &other );
+	// 	bool operator<=( const Qualifiers &other );
+	// 	bool operator>=( const Qualifiers &other );
+	// 	bool operator<( const Qualifiers &other );
+	// 	bool operator>( const Qualifiers &other );
+	// 	void print( std::ostream &os, int indent = 0 ) const;
+
+	// 	bool isConst;
+	// 	bool isVolatile;
+	// 	bool isRestrict;
+	// 	bool isLvalue;
+	// 	bool isAtomic;
+	// 	bool isMutex;
+	// };
+
+	static const char * QualifierNames[];
+
+	enum { Const = 1 << 0, Restrict = 1 << 1, Volatile = 1 << 2, Lvalue = 1 << 3, Mutex = 1 << 4, Atomic = 1 << 5, NumTypeQualifier = 6 };
+	union Qualifiers {
+		enum { Mask = ~(Restrict | Lvalue) };
+		unsigned int val;
+		struct {
+			bool isConst : 1;
+			bool isRestrict : 1;
+			bool isVolatile : 1;
+			bool isLvalue : 1;
+			bool isMutex : 1;
+			bool isAtomic : 1;
+		};
+		Qualifiers() : val( 0 ) {}
+		Qualifiers( unsigned int val ) : val( val ) {}
+		bool operator[]( unsigned int i ) const { return val & (1 << i); }
+		bool any() const { return val != 0; }
+		bool operator==( const Qualifiers other ) const {
+			return (val & Mask) == (other.val & Mask);
+		}
+		bool operator!=( const Qualifiers other ) const {
+			return (val & Mask) != (other.val & Mask);
+		}
+		bool operator<=( const Qualifiers other ) const {
+			return isConst <= other.isConst && isVolatile <= other.isVolatile &&
+				isMutex == other.isMutex && isAtomic == other.isAtomic;
+		}
+	 	bool operator>=( const Qualifiers other ) const {
+			return isConst >= other.isConst	&& isVolatile >= other.isVolatile &&
+				isMutex == other.isMutex && isAtomic == other.isAtomic;
+		}
+		bool operator<( const Qualifiers other ) const {
+			return *this != other && *this <= other;
+		}
+	 	bool operator>( const Qualifiers other ) const {
+			return *this != other && *this >= other;
+		}
+		Qualifiers operator&=( const Type::Qualifiers other ) {
+			val &= other.val; return *this;
+		}
+	 	Qualifiers operator+=( const Qualifiers other ) {
+			val |= other.val; return *this;
+		}
+	 	Qualifiers operator-=( const Qualifiers other ) {
+			val &= ~other.val; return *this;
+		}
+	 	Qualifiers operator+( const Qualifiers other ) const {
+			Qualifiers q = other;
+			q += *this;
+			return q;
+		}
+	 	void print( std::ostream &os, int indent = 0 ) const {
+			if ( (*this).any() ) {						// any type qualifiers ?
+				for ( unsigned int i = 0; i < NumTypeQualifier; i += 1 ) {
+					if ( (*this)[i] ) {
+						os << QualifierNames[i] << ' ';
+					} // if
+				} // for
+			} // if
+		}
+	}; // Qualifiers
 
 	Type( const Qualifiers &tq, const std::list< Attribute * > & attributes );
@@ -506,79 +569,4 @@
 };
 
-inline Type::Qualifiers &Type::Qualifiers::operator&=( const Type::Qualifiers &other ) {
-	isConst &= other.isConst;
-	isVolatile &= other.isVolatile;
-	isRestrict &= other.isRestrict;
-	isLvalue &= other.isLvalue;
-	isAtomic &= other.isAtomic;
-	isMutex &= other.isMutex;
-	return *this;
-}
-
-inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) {
-	isConst |= other.isConst;
-	isVolatile |= other.isVolatile;
-	isRestrict |= other.isRestrict;
-	isLvalue |= other.isLvalue;
-	isAtomic |= other.isAtomic;
-	isMutex |= other.isMutex;
-	return *this;
-}
-
-inline Type::Qualifiers &Type::Qualifiers::operator-=( const Type::Qualifiers &other ) {
-	if ( other.isConst ) isConst = 0;
-	if ( other.isVolatile ) isVolatile = 0;
-	if ( other.isRestrict ) isRestrict = 0;
-	if ( other.isAtomic ) isAtomic = 0;
-	if ( other.isMutex ) isMutex = 0;
-	return *this;
-}
-
-inline Type::Qualifiers Type::Qualifiers::operator+( const Type::Qualifiers &other ) {
-	Qualifiers q = other;
-	q += *this;
-	return q;
-}
-
-inline bool Type::Qualifiers::operator==( const Qualifiers &other ) {
-	return isConst == other.isConst
-		&& isVolatile == other.isVolatile
-//		&& isRestrict == other.isRestrict
-//		&& isLvalue == other.isLvalue
-		&& isAtomic == other.isAtomic;
-}
-
-inline bool Type::Qualifiers::operator!=( const Qualifiers &other ) {
-	return isConst != other.isConst
-		|| isVolatile != other.isVolatile
-//		|| isRestrict != other.isRestrict
-//		|| isLvalue != other.isLvalue
-		|| isAtomic != other.isAtomic;
-}
-
-inline bool Type::Qualifiers::operator<=( const Type::Qualifiers &other ) {
-	return isConst <= other.isConst
-		&& isVolatile <= other.isVolatile
-//		&& isRestrict <= other.isRestrict
-//		&& isLvalue >= other.isLvalue
-		&& isAtomic == other.isAtomic;
-}
-
-inline bool Type::Qualifiers::operator>=( const Type::Qualifiers &other ) {
-	return isConst >= other.isConst
-		&& isVolatile >= other.isVolatile
-//		&& isRestrict >= other.isRestrict
-//		&& isLvalue <= other.isLvalue
-		&& isAtomic == other.isAtomic;
-}
-
-inline bool Type::Qualifiers::operator<( const Type::Qualifiers &other ) {
-	return operator!=( other ) && operator<=( other );
-}
-
-inline bool Type::Qualifiers::operator>( const Type::Qualifiers &other ) {
-	return operator!=( other ) && operator>=( other );
-}
-
 std::ostream & operator<<( std::ostream & out, const Type * type );
 
