Index: src/SynTree/Constant.cc
===================================================================
--- src/SynTree/Constant.cc	(revision a12d5aaf574b9eda122e096ee19ea16b8f778731)
+++ src/SynTree/Constant.cc	(revision 59e86eb950542b83c1ba8461a42aa74c1cc65200)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jun 22 10:11:00 2017
-// Update Count     : 28
+// Last Modified On : Fri Jul 14 14:50:00 2017
+// Update Count     : 29
 //
 
@@ -46,4 +46,15 @@
 }
 
+Constant Constant::null( Type * ptrtype ) {
+	if ( nullptr == ptrtype ) {
+		ptrtype = new PointerType(
+			Type::Qualifiers(),
+			new VoidType( Type::Qualifiers() )
+			);
+	}
+
+	return Constant( ptrtype, "0", (unsigned long long int)0 );
+}
+
 unsigned long long Constant::get_ival() const {
 	assertf( safe_dynamic_cast<BasicType*>(type)->isInteger(), "Attempt to retrieve ival from non-integer constant." );
Index: src/SynTree/Constant.h
===================================================================
--- src/SynTree/Constant.h	(revision a12d5aaf574b9eda122e096ee19ea16b8f778731)
+++ src/SynTree/Constant.h	(revision 59e86eb950542b83c1ba8461a42aa74c1cc65200)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr Jun 22 10:13:00 2017
-// Update Count     : 15
+// Last Modified On : Fri Jul 14 13:33:00 2017
+// Update Count     : 16
 //
 
@@ -44,4 +44,7 @@
 	static Constant from_double( double d );
 
+	/// generates a null pointer value for the given type. void * if omitted.
+	static Constant null( Type * ptrtype = nullptr );
+
 	virtual void accept( Visitor & v ) { v.visit( this ); }
 	virtual Constant * acceptMutator( Mutator & m ) { return m.mutate( this ); }
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision a12d5aaf574b9eda122e096ee19ea16b8f778731)
+++ src/SynTree/Declaration.h	(revision 59e86eb950542b83c1ba8461a42aa74c1cc65200)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Tus Jun 27 15:31:00 2017
-// Update Count     : 122
+// Last Modified On : Fri Jul 14 16:59:00 2017
+// Update Count     : 123
 //
 
@@ -266,5 +266,6 @@
 	typedef AggregateDecl Parent;
   public:
-	StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ) {}
+	StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ), tagged( false ), parent_name( "" ) {}
+	StructDecl( const std::string &name, const std::string *parent, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( DeclarationNode::Struct ), tagged( true ), parent_name( parent ? *parent : "" ) {}
 	StructDecl( const StructDecl &other ) : Parent( other ) {}
 
@@ -273,4 +274,10 @@
 	bool is_thread() { return kind == DeclarationNode::Thread; }
 
+	// Tagged/Tree Structure Excetion
+	bool get_tagged() { return tagged; }
+	void set_tagged( bool newValue ) { tagged = newValue; }
+	bool has_parent() { return parent_name != ""; }
+	std::string get_parentName() { return parent_name; }
+
 	virtual StructDecl *clone() const { return new StructDecl( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
@@ -279,4 +286,7 @@
 	DeclarationNode::Aggregate kind;
 	virtual std::string typeString() const;
+
+	bool tagged;
+	std::string parent_name;
 };
 
