Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision ef3d79882ba207ec8438aeb09719e4916b178dee)
+++ src/InitTweak/InitTweak.cc	(revision c3f551b18c5d80e2da2c29a58e317fefbf1dc172)
@@ -67,28 +67,18 @@
 		};
 
-		class InitFlattener : public Visitor {
-			public:
-			virtual void visit( SingleInit * singleInit );
-			virtual void visit( ListInit * listInit );
+		struct InitFlattener : public WithShortCircuiting {
+			void previsit( SingleInit * singleInit ) {
+				visit_children = false;
+				argList.push_back( singleInit->value->clone() );
+			}
 			std::list< Expression * > argList;
 		};
 
-		void InitFlattener::visit( SingleInit * singleInit ) {
-			argList.push_back( singleInit->get_value()->clone() );
-		}
-
-		void InitFlattener::visit( ListInit * listInit ) {
-			// flatten nested list inits
-			std::list<Initializer*>::iterator it = listInit->begin();
-			for ( ; it != listInit->end(); ++it ) {
-				(*it)->accept( *this );
-			}
-		}
 	}
 
 	std::list< Expression * > makeInitList( Initializer * init ) {
-		InitFlattener flattener;
+		PassVisitor<InitFlattener> flattener;
 		maybeAccept( init, flattener );
-		return flattener.argList;
+		return flattener.pass.argList;
 	}
 
