Index: src/AST/AssertAcyclic.cpp
===================================================================
--- src/AST/AssertAcyclic.cpp	(revision ef75948401a90c5f5fae95fd2417d0a03536b5fa)
+++ src/AST/AssertAcyclic.cpp	(revision be8518fa801bd1c91027d732be5abec06e2fb979)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jun 06 15:00:00 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thu Jun 06 15:00:00 2019
-// Update Count     : 0
+// Last Modified On : Fri Jun 07 14:32:00 2019
+// Update Count     : 1
 //
 
@@ -20,13 +20,15 @@
 namespace {
 
-class NoStrongCyclesCore : public ast::WithGuards {
+class NoStrongCyclesCore {
     std::vector<const ast::Node *> parents;
 public:
-	void previsit ( const ast::Node * node ) {
-		for (auto & p : parents) {
-			assert(p != node);
+	void previsit( const ast::Node * node ) {
+		for (auto & parent : parents) {
+			assert(parent != node);
 		}
 		parents.push_back(node);
-		GuardAction( [this]() { parents.pop_back(); } );
+	}
+	void postvisit( const ast::Node * ) {
+		parents.pop_back();
 	}
 };
@@ -36,5 +38,5 @@
 namespace ast {
 
-void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit ) {
+void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit ) {
    	Pass<NoStrongCyclesCore> visitor;
 	for ( auto & decl : translationUnit ) {
Index: src/AST/AssertAcyclic.hpp
===================================================================
--- src/AST/AssertAcyclic.hpp	(revision ef75948401a90c5f5fae95fd2417d0a03536b5fa)
+++ src/AST/AssertAcyclic.hpp	(revision be8518fa801bd1c91027d732be5abec06e2fb979)
@@ -8,8 +8,8 @@
 //
 // Author           : Andrew Beach
-// Created On       : Thr May 6 15:00:00 2019
+// Created On       : Thr Jun  6 15:00:00 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Thr May 6 15:00:00 2019
-// Update Count     : 0
+// Last Modified On : Fri Jun  7 14:32:00 2019
+// Update Count     : 1
 //
 
@@ -25,5 +25,5 @@
 namespace ast {
 
-void assertAcyclic( const std::list< ast::ptr< ast::Decl > > translationUnit );
+void assertAcyclic( const std::list< ast::ptr< ast::Decl > > & translationUnit );
 
 }
Index: src/AST/Pass.hpp
===================================================================
--- src/AST/Pass.hpp	(revision ef75948401a90c5f5fae95fd2417d0a03536b5fa)
+++ src/AST/Pass.hpp	(revision be8518fa801bd1c91027d732be5abec06e2fb979)
@@ -287,4 +287,12 @@
 		at_cleanup( [func](void *) { func(); }, nullptr );
 	}
+
+	/// When this node is finished being visited, call a member of an object.
+	template<typename T>
+	void GuardMethod( T * obj, void (T::*method)() ) {
+		at_cleanup( [ method ]( void * object ) {
+			static_cast< T * >( object )->method();
+		}, static_cast< void * >( obj ) );
+	}
 };
 
