Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 1fbeebd0b18f95d9f936b45c68389756be3ba23b)
+++ src/InitTweak/InitTweak.cc	(revision ef3d79882ba207ec8438aeb09719e4916b178dee)
@@ -48,6 +48,5 @@
 		};
 
-		class InitDepthChecker : public Visitor {
-		public:
+		struct InitDepthChecker : public WithGuards {
 			bool depthOkay = true;
 			Type * type;
@@ -61,9 +60,8 @@
 				maxDepth++;
 			}
-			virtual void visit( ListInit * listInit ) {
+			void previsit( ListInit * ) {
 				curDepth++;
+				GuardAction( [this]() { curDepth--; } );
 				if ( curDepth > maxDepth ) depthOkay = false;
-				Visitor::visit( listInit );
-				curDepth--;
 			}
 		};
@@ -102,7 +100,7 @@
 
 	bool checkInitDepth( ObjectDecl * objDecl ) {
-		InitDepthChecker checker( objDecl->get_type() );
-		maybeAccept( objDecl->get_init(), checker );
-		return checker.depthOkay;
+		PassVisitor<InitDepthChecker> checker( objDecl->type );
+		maybeAccept( objDecl->init, checker );
+		return checker.pass.depthOkay;
 	}
 
