Index: src/Common/PassVisitor.h
===================================================================
--- src/Common/PassVisitor.h	(revision 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/Common/PassVisitor.h	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -145,5 +145,5 @@
 	virtual Declaration* mutate( EnumDecl *aggregateDecl ) override final;
 	virtual Declaration* mutate( TraitDecl *aggregateDecl ) override final;
-	virtual TypeDecl* mutate( TypeDecl *typeDecl ) override final;
+	virtual Declaration* mutate( TypeDecl *typeDecl ) override final;
 	virtual Declaration* mutate( TypedefDecl *typeDecl ) override final;
 	virtual AsmDecl* mutate( AsmDecl *asmDecl ) override final;
Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/Common/PassVisitor.impl.h	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -976,6 +976,6 @@
 
 template< typename pass_type >
-TypeDecl * PassVisitor< pass_type >::mutate( TypeDecl * node ) {
-	MUTATE_BODY( TypeDecl, node );
+Declaration * PassVisitor< pass_type >::mutate( TypeDecl * node ) {
+	MUTATE_BODY( Declaration, node );
 }
 
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/SymTab/Validate.cc	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -752,5 +752,5 @@
 
 		typedeclNames[ typeDecl->get_name() ] = typeDecl;
-		return Mutator::mutate( typeDecl );
+		return dynamic_cast<TypeDecl *>( Mutator::mutate( typeDecl ) );
 	}
 
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/SynTree/Declaration.h	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -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 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/SynTree/Mutator.cc	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -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 93389c1fd7d4afe64b247250b0683008e48bb5fd)
+++ src/SynTree/Mutator.h	(revision 96f9ef5232a7b888e82bd9d48493d044d69ef433)
@@ -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 );
