Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/SynTree/AggregateDecl.cc	(revision 284b7aa8ecc56ab9518f38d3b664739036e88d21)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 23:56:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 17:28:00 2016
-// Update Count     : 7
+// Last Modified On : Wed Jul 13 18:03:30 2016
+// Update Count     : 10
 //
 
@@ -19,5 +19,5 @@
 
 
-AggregateDecl::AggregateDecl( const std::string &name ) : Parent( name, DeclarationNode::NoStorageClass, LinkageSpec::Cforall ) {
+AggregateDecl::AggregateDecl( const std::string &name ) : Parent( name, DeclarationNode::NoStorageClass, LinkageSpec::Cforall ), body( false ) {
 }
 
@@ -25,4 +25,5 @@
 	cloneAll( other.members, members );
 	cloneAll( other.parameters, parameters );
+	body = other.body;
 }
 
@@ -37,4 +38,6 @@
 
 	os << typeString() << " " << get_name();
+	os << string( indent+2, ' ' ) << "with body " << has_body() << endl;
+
 	if ( ! parameters.empty() ) {
 		os << endl << string( indent+2, ' ' ) << "with parameters" << endl;
@@ -52,4 +55,6 @@
 
 	os << typeString() << " " << get_name();
+	os << string( indent+2, ' ' ) << "with body " << has_body() << endl;
+
 	if ( ! parameters.empty() ) {
 		os << endl << string( indent+2, ' ' ) << "with parameters" << endl;
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/SynTree/Declaration.h	(revision 284b7aa8ecc56ab9518f38d3b664739036e88d21)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 30 21:17:24 2016
-// Update Count     : 38
+// Last Modified On : Tue Jul 12 21:03:17 2016
+// Update Count     : 39
 //
 
@@ -210,4 +210,7 @@
 	std::list<TypeDecl*>& get_parameters() { return parameters; }
 
+	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;
@@ -218,4 +221,5 @@
 	std::list<Declaration*> members;
 	std::list<TypeDecl*> parameters;
+	bool body;
 };
 
@@ -229,5 +233,4 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
-
   private:
 	virtual std::string typeString() const;
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/SynTree/ReferenceToType.cc	(revision 284b7aa8ecc56ab9518f38d3b664739036e88d21)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 17:28:51 2016
-// Update Count     : 5
+// Last Modified On : Wed Jul 13 18:03:30 2016
+// Update Count     : 9
 //
 
@@ -69,4 +69,18 @@
 }
 
+void StructInstType::print( std::ostream &os, int indent ) const {
+	using std::endl;
+
+	if ( baseStruct == NULL ) ReferenceToType::print( os, indent );
+	else {
+		Type::print( os, indent );
+		os << "instance of " << typeString() << " " << name << " with body " << baseStruct->has_body() << " ";
+		if ( ! parameters.empty() ) {
+			os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
+			printAll( parameters, os, indent+2 );
+		} // if
+	} // if
+}
+
 std::string UnionInstType::typeString() const { return "union"; }
 
@@ -79,4 +93,18 @@
 	assert( baseUnion );
 	doLookup( baseUnion->get_members(), baseUnion->get_parameters(), parameters, name, foundDecls );
+}
+
+void UnionInstType::print( std::ostream &os, int indent ) const {
+	using std::endl;
+
+	if ( baseUnion == NULL ) ReferenceToType::print( os, indent );
+	else {
+		Type::print( os, indent );
+		os << "instance of " << typeString() << " " << name << " with body " << baseUnion->has_body() << " ";
+		if ( ! parameters.empty() ) {
+			os << endl << std::string( indent, ' ' ) << "with parameters" << endl;
+			printAll( parameters, os, indent+2 );
+		} // if
+	} // if
 }
 
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/SynTree/Type.h	(revision 284b7aa8ecc56ab9518f38d3b664739036e88d21)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Mar  2 17:29:08 2016
-// Update Count     : 21
+// Last Modified On : Wed Jul 13 11:46:54 2016
+// Update Count     : 23
 //
 
@@ -226,6 +226,6 @@
 	virtual std::string typeString() const = 0;
 	std::list< Expression* > parameters;
-  private:
 	std::string name;
+  private:
 };
 
@@ -249,4 +249,6 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	virtual std::string typeString() const;
@@ -276,4 +278,6 @@
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+
+	virtual void print( std::ostream &os, int indent = 0 ) const;
   private:
 	virtual std::string typeString() const;
