Index: src/SynTree/BasicType.cc
===================================================================
--- src/SynTree/BasicType.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/BasicType.cc	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb  1 17:12:15 2017
-// Update Count     : 8
+// Last Modified On : Mon Sep 11 12:52:05 2017
+// Update Count     : 9
 //
 
@@ -25,13 +25,6 @@
 
 void BasicType::print( std::ostream &os, int indent ) const {
-	static const char *kindNames[] = {	
-		"_Bool", "char", "signed char", "unsigned char", "short signed int", "short unsigned int",
-		"signed int", "unsigned int", "long signed int", "long unsigned int", "long long signed int",
-		"long long unsigned int", "float", "double", "long double", "float _Complex", "double _Complex",
-		"long double _Complex", "float _Imaginary", "double _Imaginary", "long double _Imaginary"
-	};
-
 	Type::print( os, indent );
-	os << kindNames[ kind ];
+	os << BasicType::typeNames[ kind ];
 }
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Declaration.h	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -136,4 +136,6 @@
 	Expression *get_bitfieldWidth() const { return bitfieldWidth; }
 	void set_bitfieldWidth( Expression *newValue ) { bitfieldWidth = newValue; }
+
+	static ObjectDecl * newObject( const std::string & name, Type * type, Initializer * init );
 
 	virtual ObjectDecl *clone() const { return new ObjectDecl( *this ); }
@@ -230,5 +232,5 @@
 	virtual TypeDecl *clone() const { return new TypeDecl( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
-	virtual TypeDecl *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
 	virtual void print( std::ostream &os, int indent = 0 ) const;
 
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Mutator.cc	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -78,5 +78,5 @@
 }
 
-TypeDecl * Mutator::mutate( TypeDecl *typeDecl ) {
+Declaration * Mutator::mutate( TypeDecl *typeDecl ) {
 	handleNamedTypeDecl( typeDecl );
 	typeDecl->set_init( maybeMutate( typeDecl->get_init(), *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Mutator.h	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -31,5 +31,5 @@
 	virtual Declaration* mutate( EnumDecl *aggregateDecl );
 	virtual Declaration* mutate( TraitDecl *aggregateDecl );
-	virtual TypeDecl* mutate( TypeDecl *typeDecl );
+	virtual Declaration* mutate( TypeDecl *typeDecl );
 	virtual Declaration* mutate( TypedefDecl *typeDecl );
 	virtual AsmDecl* mutate( AsmDecl *asmDecl );
Index: src/SynTree/ObjectDecl.cc
===================================================================
--- src/SynTree/ObjectDecl.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/ObjectDecl.cc	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -38,4 +38,8 @@
 	delete init;
 	delete bitfieldWidth;
+}
+
+ObjectDecl * ObjectDecl::newObject( const std::string & name, Type * type, Initializer * init ) {
+	return new ObjectDecl( name, Type::StorageClasses(), LinkageSpec::C, 0, type, init );
 }
 
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Statement.cc	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -472,6 +472,6 @@
 }
 
-NullStmt::NullStmt( std::list<Label> labels ) : CompoundStmt( labels ) {}
-NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {}
+NullStmt::NullStmt( std::list<Label> labels ) : Statement( labels ) {}
+NullStmt::NullStmt() : Statement( std::list<Label>() ) {}
 
 void NullStmt::print( std::ostream &os, __attribute__((unused)) int indent ) const {
Index: src/SynTree/Statement.h
===================================================================
--- src/SynTree/Statement.h	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Statement.h	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -67,5 +67,5 @@
 };
 
-class NullStmt : public CompoundStmt {
+class NullStmt : public Statement {
   public:
 	NullStmt();
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
+++ src/SynTree/Type.cc	(revision ba54f7dba922f0df27eebfcc9c67f07969df7db4)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Andrew Beach
-// Last Modified On : Wed Aug  2 11:11:00 2017
-// Update Count     : 29
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Sep 11 13:21:25 2017
+// Update Count     : 37
 //
 #include "Type.h"
@@ -26,14 +26,14 @@
 	"_Bool",
 	"char",
-	"char",
+	"signed char",
 	"unsigned char",
-	"short",
-	"short unsigned",
-	"int",
+	"signed short int",
+	"unsigned short int",
+	"signed int",
 	"unsigned int",
-	"long int",
-	"long unsigned int",
-	"long long int",
-	"long long unsigned int",
+	"signed long int",
+	"unsigned long int",
+	"signed long long int",
+	"unsigned long long int",
 	"float",
 	"double",
@@ -65,16 +65,13 @@
 
 Type * Type::stripDeclarator() {
-	Type * type = this;
-	while ( Type * at = InitTweak::getPointerBase( type ) ) {
-		type = at;
-	}
+	Type * type, * at;
+	for ( type = this; (at = InitTweak::getPointerBase( type )); type = at );
 	return type;
 }
 
 Type * Type::stripReferences() {
-	Type * type = this;
-	while ( ReferenceType * ref = dynamic_cast<ReferenceType *>( type ) ) {
-		type = ref->get_base();
-	}
+	Type * type;
+	ReferenceType * ref;
+	for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref->get_base() );
 	return type;
 }
