Index: src/Common/PassVisitor.impl.h
===================================================================
--- src/Common/PassVisitor.impl.h	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ src/Common/PassVisitor.impl.h	(revision a8a2b0a3efd9013002c3385d3dd01fc2cf2103c1)
@@ -2277,40 +2277,149 @@
 }
 
-
+//--------------------------------------------------------------------------
+// TupleType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( TupleType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->forall, *this );
+	maybeAccept_impl( node->types, *this );
+	maybeAccept_impl( node->members, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( TupleType * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->forall, *this );
+	maybeMutate_impl( node->types, *this );
+	maybeMutate_impl( node->members, *this );
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// TypeofType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( TypeofType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	assert( node->expr );
+	maybeAccept_impl( node->expr, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( TypeofType * node ) {
+	MUTATE_START( node );
+
+	assert( node->expr );
+	maybeMutate_impl( node->expr, *this );
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// AttrType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( AttrType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	if ( node->isType ) {
+		assert( node->type );
+		maybeAccept_impl( node->type, *this );
+	} else {
+		assert( node->expr );
+		maybeAccept_impl( node->expr, *this );
+	} // if
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( AttrType * node ) {
+	MUTATE_START( node );
+
+	if ( node->isType ) {
+		assert( node->type );
+		maybeMutate_impl( node->type, *this );
+	} else {
+		assert( node->expr );
+		maybeMutate_impl( node->expr, *this );
+	} // if
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// VarArgsType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( VarArgsType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->forall, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( VarArgsType * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->forall, *this );
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// ZeroType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( ZeroType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->forall, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( ZeroType * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->forall, *this );
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// OneType
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( OneType * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->forall, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Type * PassVisitor< pass_type >::mutate( OneType * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->forall, *this );
+
+	MUTATE_END( Type, node );
+}
+
+//--------------------------------------------------------------------------
+// Designation
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Designation * node ) {
 	VISIT_START( node );
 
-	maybeAccept_impl( node->get_designators(), *this );
+	maybeAccept_impl( node->designators, *this );
 
 	VISIT_END( node );
@@ -2321,5 +2430,5 @@
 	MUTATE_START( node );
 
-	maybeMutate_impl( node->get_designators(), *this );
+	maybeMutate_impl( node->designators, *this );
 
 	MUTATE_END( Designation, node );
@@ -2332,5 +2441,5 @@
 	VISIT_START( node );
 
-	visitExpression( node->get_value() );
+	visitExpression( node->value );
 
 	VISIT_END( node );
@@ -2341,91 +2450,109 @@
 	MUTATE_START( node );
 
-	node->set_value( mutateExpression( node->get_value() ) );
+	node->value = mutateExpression( node->value );
 
 	MUTATE_END( Initializer, node );
 }
 
+//--------------------------------------------------------------------------
+// ListInit
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( ListInit * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->designations, *this );
+	maybeAccept_impl( node->initializers, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Initializer * PassVisitor< pass_type >::mutate( ListInit * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->designations, *this );
+	maybeMutate_impl( node->initializers, *this );
+
+	MUTATE_END( Initializer, node );
+}
+
+//--------------------------------------------------------------------------
+// ConstructorInit
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( ConstructorInit * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	maybeAccept_impl( node->ctor, *this );
+	maybeAccept_impl( node->dtor, *this );
+	maybeAccept_impl( node->init, *this );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Initializer * PassVisitor< pass_type >::mutate( ConstructorInit * node ) {
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->ctor, *this );
+	maybeMutate_impl( node->dtor, *this );
+	maybeMutate_impl( node->init, *this );
+
+	MUTATE_END( Initializer, node );
+}
+
+//--------------------------------------------------------------------------
+// Subrange
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Subrange * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Subrange * PassVisitor< pass_type >::mutate( Subrange * node  )  {
+	MUTATE_START( node );
+
+	MUTATE_END( Subrange, node );
+}
+
+//--------------------------------------------------------------------------
+// Attribute
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Constant * node ) {
-	VISIT_BODY( node );
-}
-
+	VISIT_START( node );
+
+	VISIT_END( node );
+}
+
+template< typename pass_type >
+Constant * PassVisitor< pass_type >::mutate( Constant * node  )  {
+	MUTATE_START( node );
+
+	MUTATE_END( Constant, node );
+}
+
+//--------------------------------------------------------------------------
+// Attribute
 template< typename pass_type >
 void PassVisitor< pass_type >::visit( Attribute * node ) {
-	VISIT_BODY( node );
-}
-
-//---------------------------------------------------------------------------------------------------------------
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( TupleType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( TypeofType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( AttrType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( VarArgsType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( ZeroType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Type * PassVisitor< pass_type >::mutate( OneType * node ) {
-	MUTATE_BODY( Type, node );
-}
-
-template< typename pass_type >
-Initializer * PassVisitor< pass_type >::mutate( ListInit * node ) {
-	MUTATE_BODY( Initializer, node );
-}
-
-template< typename pass_type >
-Initializer * PassVisitor< pass_type >::mutate( ConstructorInit * node ) {
-	MUTATE_BODY( Initializer, node );
-}
-
-template< typename pass_type >
-Subrange * PassVisitor< pass_type >::mutate( Subrange * node  )  {
-	MUTATE_BODY( Subrange, node );
-}
-
-template< typename pass_type >
-Constant * PassVisitor< pass_type >::mutate( Constant * node  )  {
-	MUTATE_BODY( Constant, node );
+	VISIT_START( node );
+
+	maybeAccept_impl( node->parameters, *this );
+
+	VISIT_END( node );
 }
 
 template< typename pass_type >
 Attribute * PassVisitor< pass_type >::mutate( Attribute * node  )  {
-	MUTATE_BODY( Attribute, node );
-}
-
+	MUTATE_START( node );
+
+	maybeMutate_impl( node->parameters, *this );
+
+	MUTATE_END( Attribute, node );
+}
+
+//--------------------------------------------------------------------------
+// TypeSubstitution
 template< typename pass_type >
 TypeSubstitution * PassVisitor< pass_type >::mutate( TypeSubstitution * node ) {
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ src/Makefile.in	(revision a8a2b0a3efd9013002c3385d3dd01fc2cf2103c1)
@@ -247,6 +247,4 @@
 	SynTree/driver_cfa_cpp-TypeDecl.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Initializer.$(OBJEXT) \
-	SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) \
-	SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) \
 	SynTree/driver_cfa_cpp-Attribute.$(OBJEXT) \
@@ -527,9 +525,8 @@
 	SynTree/FunctionDecl.cc SynTree/AggregateDecl.cc \
 	SynTree/NamedTypeDecl.cc SynTree/TypeDecl.cc \
-	SynTree/Initializer.cc SynTree/Visitor.cc SynTree/Mutator.cc \
-	SynTree/TypeSubstitution.cc SynTree/Attribute.cc \
-	SynTree/VarExprReplacer.cc Tuples/TupleAssignment.cc \
-	Tuples/TupleExpansion.cc Tuples/Explode.cc \
-	Virtual/ExpandCasts.cc
+	SynTree/Initializer.cc SynTree/TypeSubstitution.cc \
+	SynTree/Attribute.cc SynTree/VarExprReplacer.cc \
+	Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \
+	Tuples/Explode.cc Virtual/ExpandCasts.cc
 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \
 	${cfa_cpplib_PROGRAMS}}
@@ -911,8 +908,4 @@
 SynTree/driver_cfa_cpp-Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
 	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/driver_cfa_cpp-Visitor.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/driver_cfa_cpp-Mutator.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
 SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT):  \
 	SynTree/$(am__dirstamp) SynTree/$(DEPDIR)/$(am__dirstamp)
@@ -1053,5 +1046,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-FunctionType.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Initializer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-NamedTypeDecl.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-ObjectDecl.Po@am__quote@
@@ -1069,5 +1061,4 @@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarArgsType.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VarExprReplacer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Po@am__quote@
@@ -2478,32 +2469,4 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Initializer.obj `if test -f 'SynTree/Initializer.cc'; then $(CYGPATH_W) 'SynTree/Initializer.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Initializer.cc'; fi`
-
-SynTree/driver_cfa_cpp-Visitor.o: SynTree/Visitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Visitor.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo -c -o SynTree/driver_cfa_cpp-Visitor.o `test -f 'SynTree/Visitor.cc' || echo '$(srcdir)/'`SynTree/Visitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/Visitor.cc' object='SynTree/driver_cfa_cpp-Visitor.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Visitor.o `test -f 'SynTree/Visitor.cc' || echo '$(srcdir)/'`SynTree/Visitor.cc
-
-SynTree/driver_cfa_cpp-Visitor.obj: SynTree/Visitor.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Visitor.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo -c -o SynTree/driver_cfa_cpp-Visitor.obj `if test -f 'SynTree/Visitor.cc'; then $(CYGPATH_W) 'SynTree/Visitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Visitor.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/Visitor.cc' object='SynTree/driver_cfa_cpp-Visitor.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Visitor.obj `if test -f 'SynTree/Visitor.cc'; then $(CYGPATH_W) 'SynTree/Visitor.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Visitor.cc'; fi`
-
-SynTree/driver_cfa_cpp-Mutator.o: SynTree/Mutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Mutator.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo -c -o SynTree/driver_cfa_cpp-Mutator.o `test -f 'SynTree/Mutator.cc' || echo '$(srcdir)/'`SynTree/Mutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/Mutator.cc' object='SynTree/driver_cfa_cpp-Mutator.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.o `test -f 'SynTree/Mutator.cc' || echo '$(srcdir)/'`SynTree/Mutator.cc
-
-SynTree/driver_cfa_cpp-Mutator.obj: SynTree/Mutator.cc
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Mutator.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`
-@am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-Mutator.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='SynTree/Mutator.cc' object='SynTree/driver_cfa_cpp-Mutator.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-Mutator.obj `if test -f 'SynTree/Mutator.cc'; then $(CYGPATH_W) 'SynTree/Mutator.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/Mutator.cc'; fi`
 
 SynTree/driver_cfa_cpp-TypeSubstitution.o: SynTree/TypeSubstitution.cc
Index: c/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ 	(revision )
@@ -1,127 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Mutator.cc --
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 17 15:39:37 2017
-// Update Count     : 27
-//
-
-#include <cassert>             // for assert
-#include <list>                // for list
-
-#include "Attribute.h"         // for Attribute
-#include "Declaration.h"       // for ObjectDecl, Declaration, DeclarationWi...
-#include "Expression.h"        // for Expression, ConstantExpr, ConditionalExpr
-#include "Initializer.h"       // for ConstructorInit, Initializer, Designation
-#include "Mutator.h"
-#include "Statement.h"         // for Statement, CatchStmt, AsmStmt, ForStmt
-#include "Type.h"              // for Type, Type::ForallList, AttrType, Arra...
-#include "TypeSubstitution.h"  // for TypeSubstitution
-
-class Constant;
-class Subrange;
-
-Mutator::Mutator() {}
-
-Mutator::~Mutator() {}
-
-Type * Mutator::mutate( TupleType *tupleType ) {
-	mutateAll( tupleType->get_forall(), *this );
-	mutateAll( tupleType->get_types(), *this );
-	mutateAll( tupleType->get_members(), *this );
-	return tupleType;
-}
-
-Type * Mutator::mutate( TypeofType *typeofType ) {
-	assert( typeofType->get_expr() );
-	typeofType->set_expr( typeofType->get_expr()->acceptMutator( *this ) );
-	return typeofType;
-}
-
-Type * Mutator::mutate( AttrType *attrType ) {
-	if ( attrType->get_isType() ) {
-		assert( attrType->get_type() );
-		attrType->set_type( attrType->get_type()->acceptMutator( *this ) );
-	} else {
-		assert( attrType->get_expr() );
-		attrType->set_expr( attrType->get_expr()->acceptMutator( *this ) );
-	}
-	return attrType;
-}
-
-Type * Mutator::mutate( VarArgsType *varArgsType ) {
-	mutateAll( varArgsType->get_forall(), *this );
-	return varArgsType;
-}
-
-Type * Mutator::mutate( ZeroType *zeroType ) {
-	mutateAll( zeroType->get_forall(), *this );
-	return zeroType;
-}
-
-Type * Mutator::mutate( OneType *oneType ) {
-	mutateAll( oneType->get_forall(), *this );
-	return oneType;
-}
-
-
-Designation * Mutator::mutate( Designation * designation ) {
-	mutateAll( designation->get_designators(), *this );
-	return designation;
-}
-
-Initializer * Mutator::mutate( SingleInit *singleInit ) {
-	singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) );
-	return singleInit;
-}
-
-Initializer * Mutator::mutate( ListInit *listInit ) {
-	mutateAll( listInit->get_designations(), *this );
-	mutateAll( listInit->get_initializers(), *this );
-	return listInit;
-}
-
-Initializer * Mutator::mutate( ConstructorInit *ctorInit ) {
-	ctorInit->set_ctor( maybeMutate( ctorInit->get_ctor(), *this ) );
-	ctorInit->set_dtor( maybeMutate( ctorInit->get_dtor(), *this ) );
-	ctorInit->set_init( maybeMutate( ctorInit->get_init(), *this ) );
-	return ctorInit;
-}
-
-
-Subrange * Mutator::mutate( Subrange *subrange ) {
-	return subrange;
-}
-
-
-Constant * Mutator::mutate( Constant *constant ) {
-	return constant;
-}
-
-Attribute * Mutator::mutate( Attribute * attribute ) {
-	mutateAll( attribute->parameters, *this );
-	return attribute;
-}
-
-TypeSubstitution * Mutator::mutate( TypeSubstitution * sub ) {
-	for ( auto & p : sub->typeEnv ) {
-		p.second = maybeMutate( p.second, *this );
-	}
-	for ( auto & p : sub->varEnv ) {
-		p.second = maybeMutate( p.second, *this );
-	}
-	return sub;
-}
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ src/SynTree/Mutator.h	(revision a8a2b0a3efd9013002c3385d3dd01fc2cf2103c1)
@@ -22,6 +22,6 @@
 class Mutator {
   protected:
-	Mutator();
-	virtual ~Mutator();
+	Mutator() = default;
+	virtual ~Mutator() = default;
   public:
 	virtual DeclarationWithType * mutate( ObjectDecl * objectDecl ) = 0;
Index: c/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ 	(revision )
@@ -1,100 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Visitor.cc --
-//
-// Author           : Richard C. Bilson
-// Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 17 15:39:38 2017
-// Update Count     : 29
-//
-
-#include <cassert>        // for assert
-#include <list>           // for list
-
-#include "Attribute.h"    // for Attribute
-#include "Constant.h"     // for Constant
-#include "Declaration.h"  // for DeclarationWithType, ObjectDecl, Declaration
-#include "Expression.h"   // for Expression, ConstantExpr, ImplicitCopyCtorExpr
-#include "Initializer.h"  // for Initializer, Designation, ConstructorInit
-#include "Statement.h"    // for Statement, CatchStmt, AsmStmt, CompoundStmt
-#include "Type.h"         // for Type, Type::ForallList, AttrType, FunctionType
-#include "Visitor.h"
-
-class Subrange;
-
-Visitor::Visitor() {}
-
-Visitor::~Visitor() {}
-
-void Visitor::visit( TupleType *tupleType ) {
-	acceptAll( tupleType->get_forall(), *this );
-	acceptAll( tupleType->get_types(), *this );
-	acceptAll( tupleType->get_members(), *this );
-}
-
-void Visitor::visit( TypeofType *typeofType ) {
-	assert( typeofType->get_expr() );
-	typeofType->get_expr()->accept( *this );
-}
-
-void Visitor::visit( AttrType *attrType ) {
-	if ( attrType->get_isType() ) {
-		assert( attrType->get_type() );
-		attrType->get_type()->accept( *this );
-	} else {
-		assert( attrType->get_expr() );
-		attrType->get_expr()->accept( *this );
-	} // if
-}
-
-void Visitor::visit( VarArgsType *varArgsType ) {
-	acceptAll( varArgsType->get_forall(), *this );
-}
-
-void Visitor::visit( ZeroType *zeroType ) {
-	acceptAll( zeroType->get_forall(), *this );
-}
-
-void Visitor::visit( OneType *oneType ) {
-	acceptAll( oneType->get_forall(), *this );
-}
-
-void Visitor::visit( Designation * designation ) {
-	acceptAll( designation->get_designators(), *this );
-}
-
-void Visitor::visit( SingleInit *singleInit ) {
-	singleInit->get_value()->accept( *this );
-}
-
-void Visitor::visit( ListInit *listInit ) {
-	acceptAll( listInit->get_designations(), *this );
-	acceptAll( listInit->get_initializers(), *this );
-}
-
-void Visitor::visit( ConstructorInit *ctorInit ) {
-	maybeAccept( ctorInit->get_ctor(), *this );
-	maybeAccept( ctorInit->get_dtor(), *this );
-	maybeAccept( ctorInit->get_init(), *this );
-}
-
-
-void Visitor::visit( Subrange * ) {}
-
-
-void Visitor::visit( Constant * ) {}
-
-void Visitor::visit( Attribute * attribute ) {
-	acceptAll( attribute->parameters, *this );
-}
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ src/SynTree/Visitor.h	(revision a8a2b0a3efd9013002c3385d3dd01fc2cf2103c1)
@@ -21,6 +21,6 @@
 class Visitor {
   protected:
-	Visitor();
-	virtual ~Visitor();
+	Visitor() = default;
+	virtual ~Visitor() = default;
   public:
 	// visit: Default implementation of all functions visits the children
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision babeedade3db87533af6179c3a700ed59a31106a)
+++ src/SynTree/module.mk	(revision a8a2b0a3efd9013002c3385d3dd01fc2cf2103c1)
@@ -46,6 +46,4 @@
        SynTree/TypeDecl.cc \
        SynTree/Initializer.cc \
-       SynTree/Visitor.cc \
-       SynTree/Mutator.cc \
        SynTree/TypeSubstitution.cc \
        SynTree/Attribute.cc \
