Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/Parser/ExpressionNode.cc	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Rodolfo G. Esteves
 // Created On       : Sat May 16 13:17:07 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 27 21:42:38 2017
-// Update Count     : 567
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  2 11:12:00 2017
+// Update Count     : 568
 //
 
@@ -40,5 +40,5 @@
 // type.
 
-Type::Qualifiers noQualifiers;				// no qualifiers on constants
+extern const Type::Qualifiers noQualifiers;		// no qualifiers on constants
 
 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; }
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Declaration.cc	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:49:18 2017
-// Update Count     : 24
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  9 14:38:00 2017
+// Update Count     : 25
 //
 
@@ -28,9 +28,9 @@
 
 Declaration::Declaration( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage )
-		: name( name ), storageClasses( scs ), linkage( linkage ), uniqueId( 0 ) {
+		: name( name ), linkage( linkage ), storageClasses( scs ), uniqueId( 0 ) {
 }
 
 Declaration::Declaration( const Declaration &other )
-	: BaseSyntaxNode( other ), name( other.name ), storageClasses( other.storageClasses ), linkage( other.linkage ), uniqueId( other.uniqueId ) {
+	: BaseSyntaxNode( other ), name( other.name ), linkage( other.linkage ), extension( other.extension ), storageClasses( other.storageClasses ), uniqueId( other.uniqueId ) {
 }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Declaration.h	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Tus Aug  8 13:25:00 2017
-// Update Count     : 125
+// Last Modified On : Wed Aug  9 14:45:00 2017
+// Update Count     : 126
 //
 
@@ -27,4 +27,8 @@
 class Declaration : public BaseSyntaxNode {
   public:
+	std::string name;
+	LinkageSpec::Spec linkage;
+	bool extension = false;
+
 	Declaration( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage );
 	Declaration( const Declaration &other );
@@ -53,41 +57,12 @@
 	static void dumpIds( std::ostream &os );
 	static Declaration *declFromId( UniqueId id );
-  private:
-	std::string name;
+
+  private:
 	Type::StorageClasses storageClasses;
-	LinkageSpec::Spec linkage;
 	UniqueId uniqueId;
-	bool extension = false;
 };
 
 class DeclarationWithType : public Declaration {
   public:
-	DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs );
-	DeclarationWithType( const DeclarationWithType &other );
-	virtual ~DeclarationWithType();
-
-	std::string get_mangleName() const { return mangleName; }
-	DeclarationWithType * set_mangleName( std::string newValue ) { mangleName = newValue; return this; }
-
-	std::string get_scopedMangleName() const { return mangleName + "_" + std::to_string(scopeLevel); }
-
-	int get_scopeLevel() const { return scopeLevel; }
-	DeclarationWithType * set_scopeLevel( int newValue ) { scopeLevel = newValue; return this; }
-
-	ConstantExpr *get_asmName() const { return asmName; }
-	DeclarationWithType * set_asmName( ConstantExpr *newValue ) { asmName = newValue; return this; }
-
-	std::list< Attribute * >& get_attributes() { return attributes; }
-	const std::list< Attribute * >& get_attributes() const { return attributes; }
-
-	Type::FuncSpecifiers get_funcSpec() const { return fs; }
-	//void set_functionSpecifiers( Type::FuncSpecifiers newValue ) { fs = newValue; }
-
-	virtual DeclarationWithType *clone() const = 0;
-	virtual DeclarationWithType *acceptMutator( Mutator &m ) = 0;
-
-	virtual Type *get_type() const = 0;
-	virtual void set_type(Type *) = 0;
-  private:
 	// this represents the type with all types and typedefs expanded it is generated by SymTab::Validate::Pass2
 	std::string mangleName;
@@ -97,4 +72,33 @@
 	ConstantExpr *asmName;
 	std::list< Attribute * > attributes;
+
+	DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs );
+	DeclarationWithType( const DeclarationWithType &other );
+	virtual ~DeclarationWithType();
+
+	std::string get_mangleName() const { return mangleName; }
+	DeclarationWithType * set_mangleName( std::string newValue ) { mangleName = newValue; return this; }
+
+	std::string get_scopedMangleName() const { return mangleName + "_" + std::to_string(scopeLevel); }
+
+	int get_scopeLevel() const { return scopeLevel; }
+	DeclarationWithType * set_scopeLevel( int newValue ) { scopeLevel = newValue; return this; }
+
+	ConstantExpr *get_asmName() const { return asmName; }
+	DeclarationWithType * set_asmName( ConstantExpr *newValue ) { asmName = newValue; return this; }
+
+	std::list< Attribute * >& get_attributes() { return attributes; }
+	const std::list< Attribute * >& get_attributes() const { return attributes; }
+
+	Type::FuncSpecifiers get_funcSpec() const { return fs; }
+	//void set_functionSpecifiers( Type::FuncSpecifiers newValue ) { fs = newValue; }
+
+	virtual DeclarationWithType *clone() const = 0;
+	virtual DeclarationWithType *acceptMutator( Mutator &m ) = 0;
+
+	virtual Type *get_type() const = 0;
+	virtual void set_type(Type *) = 0;
+
+  private:
 	Type::FuncSpecifiers fs;
 };
@@ -103,4 +107,8 @@
 	typedef DeclarationWithType Parent;
   public:
+	Type *type;
+	Initializer *init;
+	Expression *bitfieldWidth;
+
 	ObjectDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init,
 				const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() );
@@ -122,8 +130,4 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-  private:
-	Type *type;
-	Initializer *init;
-	Expression *bitfieldWidth;
 };
 
@@ -131,4 +135,7 @@
 	typedef DeclarationWithType Parent;
   public:
+	FunctionType *type;
+	CompoundStmt *statements;
+
 	FunctionDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements,
 				  const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() );
@@ -149,7 +156,4 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-  private:
-	FunctionType *type;
-	CompoundStmt *statements;
 };
 
@@ -157,4 +161,8 @@
 	typedef Declaration Parent;
   public:
+	Type *base;
+	std::list< TypeDecl* > parameters;
+	std::list< DeclarationWithType* > assertions;
+
 	NamedTypeDecl( const std::string &name, Type::StorageClasses scs, Type *type );
 	NamedTypeDecl( const NamedTypeDecl &other );
@@ -171,9 +179,4 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-  protected:
-  private:
-	Type *base;
-	std::list< TypeDecl* > parameters;
-	std::list< DeclarationWithType* > assertions;
 };
 
@@ -182,4 +185,8 @@
   public:
 	enum Kind { Any, Dtype, Ftype, Ttype };
+
+	Type * init;
+	bool sized;
+
 	/// Data extracted from a type decl
 	struct Data {
@@ -216,6 +223,4 @@
   private:
 	Kind kind;
-	Type * init;
-	bool sized;
 };
 
@@ -237,27 +242,26 @@
 	typedef Declaration Parent;
   public:
-	AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall );
-	AggregateDecl( const AggregateDecl &other );
-	virtual ~AggregateDecl();
-
-	std::list<Declaration*>& get_members() { return members; }
-	std::list<TypeDecl*>& get_parameters() { return parameters; }
-
-	std::list< Attribute * >& get_attributes() { return attributes; }
-	const std::list< Attribute * >& get_attributes() const { return attributes; }
-
-	bool has_body() const { return body; }
-	AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; }
-
-	virtual void print( std::ostream &os, int indent = 0 ) const;
-	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-  protected:
-	virtual std::string typeString() const = 0;
-
-  private:
 	std::list<Declaration*> members;
 	std::list<TypeDecl*> parameters;
 	bool body;
 	std::list< Attribute * > attributes;
+
+	AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall );
+	AggregateDecl( const AggregateDecl &other );
+	virtual ~AggregateDecl();
+
+	std::list<Declaration*>& get_members() { return members; }
+	std::list<TypeDecl*>& get_parameters() { return parameters; }
+
+	std::list< Attribute * >& get_attributes() { return attributes; }
+	const std::list< Attribute * >& get_attributes() const { return attributes; }
+
+	bool has_body() const { return body; }
+	AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; }
+
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+	virtual void printShort( std::ostream &os, int indent = 0 ) const;
+  protected:
+	virtual std::string typeString() const = 0;
 };
 
@@ -333,4 +337,6 @@
 class AsmDecl : public Declaration {
   public:
+	AsmStmt *stmt;
+
 	AsmDecl( AsmStmt *stmt );
 	AsmDecl( const AsmDecl &other );
@@ -345,6 +351,4 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 	virtual void printShort( std::ostream &os, int indent = 0 ) const;
-  private:
-	AsmStmt *stmt;
 };
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Expression.h	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Mon Jul 24 16:27:00 2017
-// Update Count     : 43
+// Last Modified On : Fri Aug  8 11:54:00 2017
+// Update Count     : 44
 //
 
@@ -29,4 +29,9 @@
 class Expression : public BaseSyntaxNode{
   public:
+	Type * result;
+	TypeSubstitution * env;
+	Expression * argName; // if expression is used as an argument, it can be "designated" by this name
+	bool extension = false;
+
 	Expression( Expression * _aname = nullptr );
 	Expression( const Expression & other );
@@ -49,9 +54,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) = 0;
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  protected:
-	Type * result;
-	TypeSubstitution * env;
-	Expression * argName; // if expression is used as an argument, it can be "designated" by this name
-	bool extension = false;
 };
 
@@ -79,4 +79,6 @@
 class ApplicationExpr : public Expression {
   public:
+	Expression * function;
+
 	ApplicationExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() );
 	ApplicationExpr( const ApplicationExpr & other );
@@ -92,6 +94,6 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
+
   private:
-	Expression * function;
 	std::list<Expression *> args;
 	InferredParams inferParams;
@@ -103,4 +105,7 @@
 class UntypedExpr : public Expression {
   public:
+	Expression * function;
+	std::list<Expression*> args;
+
 	UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >(), Expression *_aname = nullptr );
 	UntypedExpr( const UntypedExpr & other );
@@ -123,7 +128,4 @@
 	virtual void print( std::ostream & os, int indent = 0 ) const;
 	virtual void printArgs(std::ostream & os, int indent = 0) const;
-  private:
-	Expression * function;
-	std::list<Expression*> args;
 };
 
@@ -131,4 +133,6 @@
 class NameExpr : public Expression {
   public:
+	std::string name;
+
 	NameExpr( std::string name, Expression *_aname = nullptr );
 	NameExpr( const NameExpr & other );
@@ -142,6 +146,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::string name;
 };
 
@@ -152,4 +154,6 @@
 class AddressExpr : public Expression {
   public:
+	Expression * arg;
+
 	AddressExpr( Expression * arg, Expression *_aname = nullptr );
 	AddressExpr( const AddressExpr & other );
@@ -163,6 +167,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * arg;
 };
 
@@ -170,4 +172,6 @@
 class LabelAddressExpr : public Expression {
   public:
+	Expression * arg;
+
 	LabelAddressExpr( Expression * arg );
 	LabelAddressExpr( const LabelAddressExpr & other );
@@ -181,6 +185,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * arg;
 };
 
@@ -188,4 +190,6 @@
 class CastExpr : public Expression {
   public:
+	Expression * arg;
+
 	CastExpr( Expression * arg, Expression *_aname = nullptr );
 	CastExpr( Expression * arg, Type * toType, Expression *_aname = nullptr );
@@ -200,6 +204,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * arg;
 };
 
@@ -207,4 +209,6 @@
 class VirtualCastExpr : public Expression {
   public:
+	Expression * arg;
+
 	VirtualCastExpr( Expression * arg, Type * toType );
 	VirtualCastExpr( const VirtualCastExpr & other );
@@ -218,6 +222,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * arg;
 };
 
@@ -225,4 +227,7 @@
 class UntypedMemberExpr : public Expression {
   public:
+	Expression * member;
+	Expression * aggregate;
+
 	UntypedMemberExpr( Expression * member, Expression * aggregate, Expression *_aname = nullptr );
 	UntypedMemberExpr( const UntypedMemberExpr & other );
@@ -238,7 +243,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * member;
-	Expression * aggregate;
 };
 
@@ -247,4 +249,7 @@
 class MemberExpr : public Expression {
   public:
+	DeclarationWithType * member;
+	Expression * aggregate;
+
 	MemberExpr( DeclarationWithType * member, Expression * aggregate, Expression *_aname = nullptr );
 	MemberExpr( const MemberExpr & other );
@@ -260,7 +265,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	DeclarationWithType * member;
-	Expression * aggregate;
 };
 
@@ -269,4 +271,6 @@
 class VariableExpr : public Expression {
   public:
+	DeclarationWithType * var;
+
 	VariableExpr( DeclarationWithType * var, Expression *_aname = nullptr );
 	VariableExpr( const VariableExpr & other );
@@ -280,6 +284,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	DeclarationWithType * var;
 };
 
@@ -287,4 +289,6 @@
 class ConstantExpr : public Expression {
   public:
+	Constant constant;
+
 	ConstantExpr( Constant constant, Expression *_aname = nullptr );
 	ConstantExpr( const ConstantExpr & other );
@@ -298,6 +302,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Constant constant;
 };
 
@@ -305,4 +307,8 @@
 class SizeofExpr : public Expression {
   public:
+	Expression * expr;
+	Type * type;
+	bool isType;
+
 	SizeofExpr( Expression * expr, Expression *_aname = nullptr );
 	SizeofExpr( const SizeofExpr & other );
@@ -321,13 +327,13 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
+};
+
+/// AlignofExpr represents an alignof expression
+class AlignofExpr : public Expression {
+  public:
 	Expression * expr;
 	Type * type;
 	bool isType;
-};
-
-/// AlignofExpr represents an alignof expression
-class AlignofExpr : public Expression {
-  public:
+
 	AlignofExpr( Expression * expr, Expression *_aname = nullptr );
 	AlignofExpr( const AlignofExpr & other );
@@ -346,8 +352,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * expr;
-	Type * type;
-	bool isType;
 };
 
@@ -355,4 +357,7 @@
 class UntypedOffsetofExpr : public Expression {
   public:
+	Type * type;
+	std::string member;
+
 	UntypedOffsetofExpr( Type * type, const std::string & member, Expression *_aname = nullptr );
 	UntypedOffsetofExpr( const UntypedOffsetofExpr & other );
@@ -368,7 +373,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Type * type;
-	std::string member;
 };
 
@@ -376,4 +378,7 @@
 class OffsetofExpr : public Expression {
   public:
+	Type * type;
+	DeclarationWithType * member;
+
 	OffsetofExpr( Type * type, DeclarationWithType * member, Expression *_aname = nullptr );
 	OffsetofExpr( const OffsetofExpr & other );
@@ -389,7 +394,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Type * type;
-	DeclarationWithType * member;
 };
 
@@ -397,4 +399,6 @@
 class OffsetPackExpr : public Expression {
 public:
+	StructInstType * type;
+
 	OffsetPackExpr( StructInstType * type_, Expression * aname_ = 0 );
 	OffsetPackExpr( const OffsetPackExpr & other );
@@ -407,9 +411,5 @@
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-
-private:
-	StructInstType * type;
+	virtual void print( std::ostream & os, int indent = 0 ) const;
 };
 
@@ -417,4 +417,9 @@
 class AttrExpr : public Expression {
   public:
+	Expression * attr;
+	Expression * expr;
+	Type * type;
+	bool isType;
+
 	AttrExpr(Expression * attr, Expression * expr, Expression *_aname = nullptr );
 	AttrExpr( const AttrExpr & other );
@@ -435,9 +440,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * attr;
-	Expression * expr;
-	Type * type;
-	bool isType;
 };
 
@@ -445,4 +445,7 @@
 class LogicalExpr : public Expression {
   public:
+	Expression * arg1;
+	Expression * arg2;
+
 	LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true, Expression *_aname = nullptr );
 	LogicalExpr( const LogicalExpr & other );
@@ -459,13 +462,16 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
+
   private:
+	bool isAnd;
+};
+
+/// ConditionalExpr represents the three-argument conditional ( p ? a : b )
+class ConditionalExpr : public Expression {
+  public:
 	Expression * arg1;
 	Expression * arg2;
-	bool isAnd;
-};
-
-/// ConditionalExpr represents the three-argument conditional ( p ? a : b )
-class ConditionalExpr : public Expression {
-  public:
+	Expression * arg3;
+
 	ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3, Expression *_aname = nullptr );
 	ConditionalExpr( const ConditionalExpr & other );
@@ -483,13 +489,12 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
+};
+
+/// CommaExpr represents the sequence operator ( a, b )
+class CommaExpr : public Expression {
+  public:
 	Expression * arg1;
 	Expression * arg2;
-	Expression * arg3;
-};
-
-/// CommaExpr represents the sequence operator ( a, b )
-class CommaExpr : public Expression {
-  public:
+
 	CommaExpr( Expression * arg1, Expression * arg2, Expression *_aname = nullptr );
 	CommaExpr( const CommaExpr & other );
@@ -505,7 +510,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * arg1;
-	Expression * arg2;
 };
 
@@ -513,4 +515,6 @@
 class TypeExpr : public Expression {
   public:
+	Type * type;
+
 	TypeExpr( Type * type );
 	TypeExpr( const TypeExpr & other );
@@ -524,6 +528,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Type * type;
 };
 
@@ -531,4 +533,8 @@
 class AsmExpr : public Expression {
   public:
+	Expression * inout;
+	ConstantExpr * constraint;
+	Expression * operand;
+
 	AsmExpr( Expression * inout, ConstantExpr * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
 	AsmExpr( const AsmExpr & other );
@@ -548,9 +554,6 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
+
 	// https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints
-	Expression * inout;
-	ConstantExpr * constraint;
-	Expression * operand;
 };
 
@@ -559,24 +562,24 @@
 class ImplicitCopyCtorExpr : public Expression {
 public:
-	ImplicitCopyCtorExpr( ApplicationExpr * callExpr );
-	ImplicitCopyCtorExpr( const ImplicitCopyCtorExpr & other );
-	virtual ~ImplicitCopyCtorExpr();
-
-	ApplicationExpr * get_callExpr() const { return callExpr; }
-	void set_callExpr( ApplicationExpr * newValue ) { callExpr = newValue; }
-
-	std::list< ObjectDecl * > & get_tempDecls() { return tempDecls; }
-	std::list< ObjectDecl * > & get_returnDecls() { return returnDecls; }
-	std::list< Expression * > & get_dtors() { return dtors; }
-
-	virtual ImplicitCopyCtorExpr * clone() const { return new ImplicitCopyCtorExpr( * this ); }
-	virtual void accept( Visitor & v ) { v.visit( this ); }
-	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
-	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
 	ApplicationExpr * callExpr;
 	std::list< ObjectDecl * > tempDecls;
 	std::list< ObjectDecl * > returnDecls;
 	std::list< Expression * > dtors;
+
+	ImplicitCopyCtorExpr( ApplicationExpr * callExpr );
+	ImplicitCopyCtorExpr( const ImplicitCopyCtorExpr & other );
+	virtual ~ImplicitCopyCtorExpr();
+
+	ApplicationExpr * get_callExpr() const { return callExpr; }
+	void set_callExpr( ApplicationExpr * newValue ) { callExpr = newValue; }
+
+	std::list< ObjectDecl * > & get_tempDecls() { return tempDecls; }
+	std::list< ObjectDecl * > & get_returnDecls() { return returnDecls; }
+	std::list< Expression * > & get_dtors() { return dtors; }
+
+	virtual ImplicitCopyCtorExpr * clone() const { return new ImplicitCopyCtorExpr( * this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, int indent = 0 ) const;
 };
 
@@ -584,4 +587,6 @@
 class ConstructorExpr : public Expression {
 public:
+	Expression * callExpr;
+
 	ConstructorExpr( Expression * callExpr );
 	ConstructorExpr( const ConstructorExpr & other );
@@ -595,6 +600,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-private:
-	Expression * callExpr;
 };
 
@@ -602,4 +605,6 @@
 class CompoundLiteralExpr : public Expression {
   public:
+	Initializer * initializer;
+
 	CompoundLiteralExpr( Type * type, Initializer * initializer );
 	CompoundLiteralExpr( const CompoundLiteralExpr & other );
@@ -613,6 +618,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Initializer * initializer;
 };
 
@@ -620,4 +623,6 @@
 class RangeExpr : public Expression {
   public:
+	Expression * low, * high;
+
 	RangeExpr( Expression * low, Expression * high );
 	RangeExpr( const RangeExpr & other );
@@ -632,6 +637,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * low, * high;
 };
 
@@ -639,4 +642,6 @@
 class UntypedTupleExpr : public Expression {
   public:
+	std::list<Expression*> exprs;
+
 	UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
 	UntypedTupleExpr( const UntypedTupleExpr & other );
@@ -649,6 +654,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::list<Expression*> exprs;
 };
 
@@ -656,4 +659,6 @@
 class TupleExpr : public Expression {
   public:
+	std::list<Expression*> exprs;
+
 	TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
 	TupleExpr( const TupleExpr & other );
@@ -666,6 +671,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::list<Expression*> exprs;
 };
 
@@ -673,4 +676,7 @@
 class TupleIndexExpr : public Expression {
   public:
+	Expression * tuple;
+	unsigned int index;
+
 	TupleIndexExpr( Expression * tuple, unsigned int index );
 	TupleIndexExpr( const TupleIndexExpr & other );
@@ -686,7 +692,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Expression * tuple;
-	unsigned int index;
 };
 
@@ -694,4 +697,6 @@
 class TupleAssignExpr : public Expression {
   public:
+	StmtExpr * stmtExpr = nullptr;
+
 	TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls, Expression * _aname = nullptr );
 	TupleAssignExpr( const TupleAssignExpr & other );
@@ -705,6 +710,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	StmtExpr * stmtExpr = nullptr;
 };
 
@@ -712,4 +715,8 @@
 class StmtExpr : public Expression {
 public:
+	CompoundStmt * statements;
+	std::list< ObjectDecl * > returnDecls; // return variable(s) for stmt expression
+	std::list< Expression * > dtors; // destructor(s) for return variable(s)
+
 	StmtExpr( CompoundStmt * statements );
 	StmtExpr( const StmtExpr & other );
@@ -726,12 +733,12 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-private:
-	CompoundStmt * statements;
-	std::list< ObjectDecl * > returnDecls; // return variable(s) for stmt expression
-	std::list< Expression * > dtors; // destructor(s) for return variable(s)
 };
 
 class UniqueExpr : public Expression {
 public:
+	Expression * expr;
+	ObjectDecl * object;
+	VariableExpr * var;
+
 	UniqueExpr( Expression * expr, long long idVal = -1 );
 	UniqueExpr( const UniqueExpr & other );
@@ -753,8 +760,6 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
+
 private:
-	Expression * expr;
-	ObjectDecl * object;
-	VariableExpr * var;
 	int id;
 	static long long count;
@@ -773,4 +778,7 @@
 class UntypedInitExpr : public Expression {
 public:
+	Expression * expr;
+	std::list<InitAlternative> initAlts;
+
 	UntypedInitExpr( Expression * expr, const std::list<InitAlternative> & initAlts );
 	UntypedInitExpr( const UntypedInitExpr & other );
@@ -786,11 +794,11 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-private:
-	Expression * expr;
-	std::list<InitAlternative> initAlts;
 };
 
 class InitExpr : public Expression {
 public:
+	Expression * expr;
+	Designation * designation;
+
 	InitExpr( Expression * expr, Designation * designation );
 	InitExpr( const InitExpr & other );
@@ -807,7 +815,4 @@
 	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-private:
-	Expression * expr;
-	Designation * designation;
 };
 
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Initializer.h	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:52:02 2017
-// Update Count     : 21
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  9 10:19:00 2017
+// Update Count     : 22
 //
 
@@ -27,4 +27,6 @@
 class Designation : public BaseSyntaxNode {
 public:
+	std::list< Expression * > designators;
+
 	Designation( const std::list< Expression * > & designators );
 	Designation( const Designation & other );
@@ -37,6 +39,4 @@
 	virtual Designation * acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-private:
-	std::list< Expression * > designators;
 };
 
@@ -63,4 +63,7 @@
 class SingleInit : public Initializer {
   public:
+	//Constant *value;
+	Expression *value;	// has to be a compile-time constant
+
 	SingleInit( Expression *value, bool maybeConstructed = false );
 	SingleInit( const SingleInit &other );
@@ -74,7 +77,4 @@
 	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	//Constant *value;
-	Expression *value;	// has to be a compile-time constant
 };
 
@@ -83,4 +83,7 @@
 class ListInit : public Initializer {
   public:
+	std::list<Initializer *> initializers;  // order *is* important
+	std::list<Designation *> designations;  // order/length is consistent with initializers
+
 	ListInit( const std::list<Initializer*> &initializers,
 			  const std::list<Designation *> &designators = {}, bool maybeConstructed = false );
@@ -102,7 +105,4 @@
 	virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	std::list<Initializer *> initializers;  // order *is* important
-	std::list<Designation *> designations;  // order/length is consistent with initializers
 };
 
@@ -113,4 +113,7 @@
 class ConstructorInit : public Initializer {
   public:
+	Statement * ctor;
+	Statement * dtor;
+
 	ConstructorInit( Statement * ctor, Statement * dtor, Initializer * init );
 	ConstructorInit( const ConstructorInit &other );
@@ -130,6 +133,4 @@
 
   private:
-	Statement * ctor;
-	Statement * dtor;
 	// C-style initializer made up of SingleInit and ListInit nodes to use as a fallback
 	// if an appropriate constructor definition is not found by the resolver
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Statement.h	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:54:32 2017
-// Update Count     : 68
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Aug  3 14:08:00 2017
+// Update Count     : 69
 //
 
@@ -26,4 +26,6 @@
 class Statement : public BaseSyntaxNode {
   public:
+	std::list<Label> labels;
+
 	Statement( std::list<Label> labels );
 	virtual ~Statement();
@@ -36,10 +38,10 @@
 	virtual Statement *acceptMutator( Mutator &m ) = 0;
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  protected:
-	std::list<Label> labels;
 };
 
 class CompoundStmt : public Statement {
   public:
+	std::list<Statement*> kids;
+
 	CompoundStmt( std::list<Label> labels );
 	CompoundStmt( const CompoundStmt &other );
@@ -54,6 +56,4 @@
 	virtual CompoundStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	std::list<Statement*> kids;
 };
 
@@ -67,10 +67,10 @@
 	virtual NullStmt *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-
-  private:
 };
 
 class ExprStmt : public Statement {
   public:
+	Expression *expr;
+
 	ExprStmt( std::list<Label> labels, Expression *expr );
 	ExprStmt( const ExprStmt &other );
@@ -84,10 +84,14 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	Expression *expr;
 };
 
 class AsmStmt : public Statement {
   public:
+	bool voltile;
+	ConstantExpr *instruction;
+	std::list<Expression *> output, input;
+	std::list<ConstantExpr *> clobber;
+	std::list<Label> gotolabels;
+
 	AsmStmt( std::list<Label> labels, bool voltile, ConstantExpr *instruction, std::list<Expression *> input, std::list<Expression *> output, std::list<ConstantExpr *> clobber, std::list<Label> gotolabels );
 	AsmStmt( const AsmStmt &other );
@@ -111,14 +115,12 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	bool voltile;
-	ConstantExpr *instruction;
-	std::list<Expression *> output, input;
-	std::list<ConstantExpr *> clobber;
-	std::list<Label> gotolabels;
 };
 
 class IfStmt : public Statement {
   public:
+	Expression *condition;
+	Statement *thenPart;
+	Statement *elsePart;
+
 	IfStmt( std::list<Label> labels, Expression *condition, Statement *thenPart, Statement *elsePart );
 	IfStmt( const IfStmt &other );
@@ -136,12 +138,10 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	Expression *condition;
-	Statement *thenPart;
-	Statement *elsePart;
 };
 
 class SwitchStmt : public Statement {
   public:
+	Expression * condition;
+
 	SwitchStmt( std::list<Label> labels, Expression *condition, std::list<Statement *> &statements );
 	SwitchStmt( const SwitchStmt &other );
@@ -159,10 +159,12 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
+	std::list<Statement *> statements;
+};
+
+class CaseStmt : public Statement {
+  public:
 	Expression * condition;
-	std::list<Statement *> statements;
-};
-
-class CaseStmt : public Statement {
-  public:
+	std::list<Statement *> stmts;
+
 	CaseStmt( std::list<Label> labels, Expression *conditions, std::list<Statement *> &stmts, bool isdef = false ) throw(SemanticError);
 	CaseStmt( const CaseStmt &other );
@@ -186,6 +188,4 @@
 	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
-	Expression * condition;
-	std::list<Statement *> stmts;
 	bool _isDefault;
 };
@@ -193,4 +193,8 @@
 class WhileStmt : public Statement {
   public:
+	Expression *condition;
+	Statement *body;
+	bool isDoWhile;
+
 	WhileStmt( std::list<Label> labels, Expression *condition,
 	       Statement *body, bool isDoWhile = false );
@@ -209,12 +213,13 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
+};
+
+class ForStmt : public Statement {
+  public:
+	std::list<Statement *> initialization;
 	Expression *condition;
+	Expression *increment;
 	Statement *body;
-	bool isDoWhile;
-};
-
-class ForStmt : public Statement {
-  public:
+
 	ForStmt( std::list<Label> labels, std::list<Statement *> initialization,
 	     Expression *condition = 0, Expression *increment = 0, Statement *body = 0 );
@@ -235,9 +240,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	std::list<Statement *> initialization;
-	Expression *condition;
-	Expression *increment;
-	Statement *body;
 };
 
@@ -245,4 +245,10 @@
   public:
 	enum Type { Goto = 0, Break, Continue };
+
+	// originalTarget kept for error messages.
+	const Label originalTarget;
+	Label target;
+	Expression *computedTarget;
+	Type type;
 
 	BranchStmt( std::list<Label> labels, Label target, Type ) throw (SemanticError);
@@ -265,12 +271,10 @@
   private:
 	static const char *brType[];
-	Label originalTarget;  // can give better error messages if we remember the label name that the user entered
-	Label target;
-	Expression *computedTarget;
-	Type type;
 };
 
 class ReturnStmt : public Statement {
   public:
+	Expression *expr;
+
 	ReturnStmt( std::list<Label> labels, Expression *expr );
 	ReturnStmt( const ReturnStmt &other );
@@ -284,6 +288,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	Expression *expr;
 };
 
@@ -291,4 +293,8 @@
   public:
 	enum Kind { Terminate, Resume };
+
+	const Kind kind;
+	Expression * expr;
+	Expression * target;
 
 	ThrowStmt( std::list<Label> labels, Kind kind, Expression * expr, Expression * target = nullptr );
@@ -306,12 +312,12 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	Kind kind;
-	Expression * expr;
-	Expression * target;
 };
 
 class TryStmt : public Statement {
   public:
+	CompoundStmt *block;
+	std::list<CatchStmt *> handlers;
+	FinallyStmt *finallyBlock;
+
 	TryStmt( std::list<Label> labels, CompoundStmt *tryBlock, std::list<CatchStmt *> &handlers, FinallyStmt *finallyBlock = 0 );
 	TryStmt( const TryStmt &other );
@@ -329,9 +335,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-
-  private:
-	CompoundStmt *block;
-	std::list<CatchStmt *> handlers;
-	FinallyStmt *finallyBlock;
 };
 
@@ -339,4 +340,9 @@
   public:
 	enum Kind { Terminate, Resume };
+
+	const Kind kind;
+	Declaration *decl;
+	Expression *cond;
+	Statement *body;
 
 	CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl,
@@ -357,14 +363,10 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-
-  private:
-	Kind kind;
-	Declaration *decl;
-	Expression *cond;
-	Statement *body;
 };
 
 class FinallyStmt : public Statement {
   public:
+	CompoundStmt *block;
+
 	FinallyStmt( std::list<Label> labels, CompoundStmt *block );
 	FinallyStmt( const FinallyStmt &other );
@@ -378,6 +380,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	CompoundStmt *block;
 };
 
@@ -386,4 +386,6 @@
 class DeclStmt : public Statement {
   public:
+	Declaration *decl;
+
 	DeclStmt( std::list<Label> labels, Declaration *decl );
 	DeclStmt( const DeclStmt &other );
@@ -397,6 +399,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-  private:
-	Declaration *decl;
 };
 
@@ -407,4 +407,7 @@
 class ImplicitCtorDtorStmt : public Statement {
   public:
+	// Non-owned pointer to the constructor/destructor statement
+	Statement * callStmt;
+
 	ImplicitCtorDtorStmt( Statement * callStmt );
 	ImplicitCtorDtorStmt( const ImplicitCtorDtorStmt & other );
@@ -418,8 +421,4 @@
 	virtual Statement *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
-
-  private:
-	// Non-owned pointer to the constructor/destructor statement
-	Statement * callStmt;
 };
 
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Type.cc	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 17 08:42:47 2017
-// Update Count     : 28
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  2 11:11:00 2017
+// Update Count     : 29
 //
 
@@ -88,4 +88,9 @@
 }
 
+// Empty Variable declarations:
+const Type::FuncSpecifiers noFuncSpecifiers;
+const Type::StorageClasses noStorageClasses;
+const Type::Qualifiers noQualifiers;
+
 std::ostream & operator<<( std::ostream & out, const Type * type ) {
 	if ( type ) {
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/Type.h	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:53:29 2017
-// Update Count     : 151
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  9 14:25:00 2017
+// Update Count     : 152
 //
 
@@ -127,4 +127,10 @@
 	}; // Qualifiers
 
+	typedef std::list<TypeDecl *> ForallList;
+
+	Qualifiers tq;
+	ForallList forall;
+	std::list< Attribute * > attributes;
+
 	Type( const Qualifiers & tq, const std::list< Attribute * > & attributes );
 	Type( const Type & other );
@@ -145,5 +151,4 @@
 	void set_atomic( bool newValue ) { tq.is_atomic = newValue; }
 
-	typedef std::list<TypeDecl *> ForallList;
 	ForallList& get_forall() { return forall; }
 
@@ -165,11 +170,9 @@
 	virtual Type *acceptMutator( Mutator & m ) = 0;
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Qualifiers tq;
-	ForallList forall;
-	std::list< Attribute * > attributes;
-};
-
-extern Type::Qualifiers noQualifiers;				// no qualifiers on constants
+};
+
+extern const Type::FuncSpecifiers noFuncSpecifiers;
+extern const Type::StorageClasses noStorageClasses;
+extern const Type::Qualifiers noQualifiers;			// no qualifiers on constants
 
 class VoidType : public Type {
@@ -211,5 +214,5 @@
 		LongDoubleImaginary,
 		NUMBER_OF_BASIC_TYPES
-	};
+	} kind;
 
 	static const char *typeNames[];						// string names for basic types, MUST MATCH with Kind
@@ -226,10 +229,15 @@
 
 	bool isInteger() const;
-  private:
-	Kind kind;
 };
 
 class PointerType : public Type {
   public:
+	Type *base;
+
+	// In C99, pointer types can be qualified in many ways e.g., int f( int a[ static 3 ] )
+	Expression *dimension;
+	bool isVarLen;
+	bool isStatic;
+
 	PointerType( const Type::Qualifiers & tq, Type *base, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
 	PointerType( const Type::Qualifiers & tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
@@ -252,15 +260,13 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
+};
+
+class ArrayType : public Type {
+  public:
 	Type *base;
-
-	// In C99, pointer types can be qualified in many ways e.g., int f( int a[ static 3 ] )
 	Expression *dimension;
 	bool isVarLen;
 	bool isStatic;
-};
-
-class ArrayType : public Type {
-  public:
+
 	ArrayType( const Type::Qualifiers & tq, Type *base, Expression *dimension, bool isVarLen, bool isStatic, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
 	ArrayType( const ArrayType& );
@@ -282,13 +288,17 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	Type *base;
-	Expression *dimension;
-	bool isVarLen;
-	bool isStatic;
 };
 
 class FunctionType : public Type {
   public:
+	std::list<DeclarationWithType*> returnVals;
+	std::list<DeclarationWithType*> parameters;
+
+	// Does the function accept a variable number of arguments following the arguments specified in the parameters list.
+	// This could be because of
+	// - an ellipsis in a prototype declaration
+	// - an unprototyped declaration
+	bool isVarArgs;
+
 	FunctionType( const Type::Qualifiers & tq, bool isVarArgs, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
 	FunctionType( const FunctionType& );
@@ -305,17 +315,12 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::list<DeclarationWithType*> returnVals;
-	std::list<DeclarationWithType*> parameters;
-
-	// Does the function accept a variable number of arguments following the arguments specified in the parameters list.
-	// This could be because of
-	// - an ellipsis in a prototype declaration
-	// - an unprototyped declaration
-	bool isVarArgs;
 };
 
 class ReferenceToType : public Type {
   public:
+	std::list< Expression* > parameters;
+	std::string name;
+	bool hoistType;
+
 	ReferenceToType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes );
 	ReferenceToType( const ReferenceToType & other );
@@ -336,8 +341,4 @@
   protected:
 	virtual std::string typeString() const = 0;
-	std::list< Expression* > parameters;
-	std::string name;
-  private:
-	bool hoistType;
 };
 
@@ -345,4 +346,8 @@
 	typedef ReferenceToType Parent;
   public:
+	// this decl is not "owned" by the struct inst; it is merely a pointer to elsewhere in the tree,
+	// where the structure used in this type is actually defined
+	StructDecl *baseStruct;
+
 	StructInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseStruct( 0 ) {}
 	StructInstType( const Type::Qualifiers & tq, StructDecl * baseStruct, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
@@ -368,8 +373,4 @@
   private:
 	virtual std::string typeString() const;
-
-	// this decl is not "owned" by the struct inst; it is merely a pointer to elsewhere in the tree,
-	// where the structure used in this type is actually defined
-	StructDecl *baseStruct;
 };
 
@@ -377,4 +378,8 @@
 	typedef ReferenceToType Parent;
   public:
+	// this decl is not "owned" by the union inst; it is merely a pointer to elsewhere in the tree,
+	// where the union used in this type is actually defined
+	UnionDecl *baseUnion;
+
 	UnionInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ), baseUnion( 0 ) {}
 	UnionInstType( const Type::Qualifiers & tq, UnionDecl * baseUnion, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
@@ -400,13 +405,13 @@
   private:
 	virtual std::string typeString() const;
-
+};
+
+class EnumInstType : public ReferenceToType {
+	typedef ReferenceToType Parent;
+  public:
 	// this decl is not "owned" by the union inst; it is merely a pointer to elsewhere in the tree,
 	// where the union used in this type is actually defined
-	UnionDecl *baseUnion;
-};
-
-class EnumInstType : public ReferenceToType {
-	typedef ReferenceToType Parent;
-  public:
+	EnumDecl *baseEnum = nullptr;
+
 	EnumInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
 	EnumInstType( const Type::Qualifiers & tq, EnumDecl * baseEnum, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
@@ -423,8 +428,4 @@
   private:
 	virtual std::string typeString() const;
-
-	// this decl is not "owned" by the union inst; it is merely a pointer to elsewhere in the tree,
-	// where the union used in this type is actually defined
-	EnumDecl *baseEnum = nullptr;
 };
 
@@ -432,4 +433,8 @@
 	typedef ReferenceToType Parent;
   public:
+	// this member is filled in by the validate pass, which instantiates the members of the correponding
+	// aggregate with the actual type parameters specified for this use of the context
+	std::list< Declaration* > members;
+
 	TraitInstType( const Type::Qualifiers & tq, const std::string & name, const std::list< Attribute * > & attributes = std::list< Attribute * >()  ) : Parent( tq, name, attributes ) {}
 	TraitInstType( const TraitInstType & other );
@@ -445,8 +450,4 @@
   private:
 	virtual std::string typeString() const;
-
-	// this member is filled in by the validate pass, which instantiates the members of the correponding
-	// aggregate with the actual type parameters specified for this use of the context
-	std::list< Declaration* > members;
 };
 
@@ -454,4 +455,9 @@
 	typedef ReferenceToType Parent;
   public:
+	// this decl is not "owned" by the type inst; it is merely a pointer to elsewhere in the tree,
+	// where the type used here is actually defined
+	TypeDecl *baseType;
+	bool isFtype;
+
 	TypeInstType( const Type::Qualifiers & tq, const std::string & name, TypeDecl *baseType, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 	TypeInstType( const Type::Qualifiers & tq, const std::string & name, bool isFtype, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
@@ -472,12 +478,11 @@
   private:
 	virtual std::string typeString() const;
-	// this decl is not "owned" by the type inst; it is merely a pointer to elsewhere in the tree,
-	// where the type used here is actually defined
-	TypeDecl *baseType;
-	bool isFtype;
 };
 
 class TupleType : public Type {
   public:
+	std::list<Type *> types;
+	std::list<Declaration *> members;
+
 	TupleType( const Type::Qualifiers & tq, const std::list< Type * > & types, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 	TupleType( const TupleType& );
@@ -508,11 +513,10 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::list<Type *> types;
-	std::list<Declaration *> members;
 };
 
 class TypeofType : public Type {
   public:
+	Expression *expr;
+
 	TypeofType( const Type::Qualifiers & tq, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
 	TypeofType( const TypeofType& );
@@ -528,10 +532,13 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
+};
+
+class AttrType : public Type {
+  public:
+	std::string name;
 	Expression *expr;
-};
-
-class AttrType : public Type {
-  public:
+	Type *type;
+	bool isType;
+
 	AttrType( const Type::Qualifiers & tq, const std::string & name, Expression *expr, const std::list< Attribute * > & attributes = std::list< Attribute * >() );
 	AttrType( const Type::Qualifiers & tq, const std::string & name, Type *type, const std::list< Attribute * > & attributes = std::list< Attribute * >()  );
@@ -554,9 +561,4 @@
 	virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }
 	virtual void print( std::ostream & os, int indent = 0 ) const;
-  private:
-	std::string name;
-	Expression *expr;
-	Type *type;
-	bool isType;
 };
 
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision cbce2727f642c2a177c82c045248ba1923699527)
+++ src/SynTree/TypeDecl.cc	(revision 65cdc1ea35994157636feda1d881a0381d7a0fb5)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar 16 07:49:58 2017
-// Update Count     : 5
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Aug  9 14:35:00 2017
+// Update Count     : 6
 //
 
@@ -18,8 +18,8 @@
 #include "Common/utility.h"
 
-TypeDecl::TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, Type * init ) : Parent( name, scs, type ), kind( kind ), init( init ), sized( kind == Any || kind == Ttype ) {
+TypeDecl::TypeDecl( const std::string &name, Type::StorageClasses scs, Type *type, Kind kind, Type * init ) : Parent( name, scs, type ), init( init ), sized( kind == Any || kind == Ttype ), kind( kind ) {
 }
 
-TypeDecl::TypeDecl( const TypeDecl &other ) : Parent( other ), kind( other.kind ), init( maybeClone( other.init ) ), sized( other.sized ) {
+TypeDecl::TypeDecl( const TypeDecl &other ) : Parent( other ), init( maybeClone( other.init ) ), sized( other.sized ), kind( other.kind ) {
 }
 
