Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision a5f0529a63fd135c870940242904abe5132d58e6)
+++ src/SynTree/Expression.h	(revision c65a80bfadaa2fa630e8fe7dee0f6608fc45efb1)
@@ -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;
 };
 
