Index: src/Tuples/TupleExpansion.cc
===================================================================
--- src/Tuples/TupleExpansion.cc	(revision 0b150eccb21118c3e0226446011f3008a38293e5)
+++ src/Tuples/TupleExpansion.cc	(revision 5013c6217fe0f734f8039e894f6459db7e0d6d38)
@@ -18,16 +18,17 @@
 #include <cassert>
 #include "Tuples.h"
+#include "Common/PassVisitor.h"
+#include "Common/ScopedMap.h"
 #include "GenPoly/DeclMutator.h"
+#include "InitTweak/GenInit.h"
+#include "InitTweak/InitTweak.h"
+#include "ResolvExpr/typeops.h"
+#include "SymTab/Mangler.h"
+#include "SynTree/Declaration.h"
+#include "SynTree/Expression.h"
+#include "SynTree/Initializer.h"
 #include "SynTree/Mutator.h"
 #include "SynTree/Statement.h"
-#include "SynTree/Declaration.h"
 #include "SynTree/Type.h"
-#include "SynTree/Expression.h"
-#include "SynTree/Initializer.h"
-#include "SymTab/Mangler.h"
-#include "Common/ScopedMap.h"
-#include "ResolvExpr/typeops.h"
-#include "InitTweak/GenInit.h"
-#include "InitTweak/InitTweak.h"
 
 namespace Tuples {
@@ -82,10 +83,7 @@
 		};
 
-		class TupleIndexExpander final : public Mutator {
-		public:
-			typedef Mutator Parent;
-			using Parent::mutate;
-
-			virtual Expression * mutate( TupleIndexExpr * tupleExpr ) override;
+		class TupleIndexExpander {
+		public:
+			Expression * postmutate( TupleIndexExpr * tupleExpr );
 		};
 
@@ -116,5 +114,5 @@
 		replacer.mutateDeclarationList( translationUnit );
 
-		TupleIndexExpander idxExpander;
+		PassVisitor<TupleIndexExpander> idxExpander;
 		mutateAll( translationUnit, idxExpander );
 
@@ -250,6 +248,6 @@
 	}
 
-	Expression * TupleIndexExpander::mutate( TupleIndexExpr * tupleExpr ) {
-		Expression * tuple = maybeMutate( tupleExpr->get_tuple(), *this );
+	Expression * TupleIndexExpander::postmutate( TupleIndexExpr * tupleExpr ) {
+		Expression * tuple = tupleExpr->get_tuple();
 		assert( tuple );
 		tupleExpr->set_tuple( nullptr );
