Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision 63d1ebe7115e4450a16b96fb0ea497249a457c47)
+++ src/GenPoly/ScrubTyVars.cc	(revision 2856982c6db55f1fdfb3012b77b490d999668ae8)
@@ -20,5 +20,5 @@
 #include "GenPoly/ErasableScopedMap.h"  // for ErasableScopedMap<>::const_it...
 #include "ScrubTyVars.h"
-#include "SymTab/Mangler.h"             // for mangle, typeMode
+#include "SymTab/Mangler.h"             // for mangleType
 #include "SynTree/Declaration.h"        // for TypeDecl, TypeDecl::Data, Typ...
 #include "SynTree/Expression.h"         // for Expression (ptr only), NameExpr
@@ -227,5 +227,5 @@
 	if ( dynType ) {
 		return new ast::NameExpr( expr->location,
-			sizeofName( Mangle::mangle( dynType, Mangle::typeMode() ) ) );
+			sizeofName( Mangle::mangleType( dynType ) ) );
 	} else {
 		return expr;
@@ -237,5 +237,5 @@
 	if ( dynType ) {
 		return new ast::NameExpr( expr->location,
-			alignofName( Mangle::mangle( dynType, Mangle::typeMode() ) ) );
+			alignofName( Mangle::mangleType( dynType ) ) );
 	} else {
 		return expr;
Index: src/ResolvExpr/SatisfyAssertions.cpp
===================================================================
--- src/ResolvExpr/SatisfyAssertions.cpp	(revision 63d1ebe7115e4450a16b96fb0ea497249a457c47)
+++ src/ResolvExpr/SatisfyAssertions.cpp	(revision 2856982c6db55f1fdfb3012b77b490d999668ae8)
@@ -268,5 +268,5 @@
 		ast::ptr< ast::Type > resType = cand.expr->result;
 		cand.env.apply( resType );
-		return Mangle::mangle( resType, Mangle::typeMode() );
+		return Mangle::mangleType( resType );
 	}
 
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision 63d1ebe7115e4450a16b96fb0ea497249a457c47)
+++ src/SymTab/Mangler.cc	(revision 2856982c6db55f1fdfb3012b77b490d999668ae8)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:40:29 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 11 21:56:06 2021
-// Update Count     : 74
+// Last Modified By : Andrew Beach
+// Last Modified On : Fri Oct 21 16:18:00 2022
+// Update Count     : 75
 //
 #include "Mangler.h"
@@ -418,5 +418,6 @@
 			void postvisit( const ast::QualifiedType * qualType );
 
-			std::string get_mangleName() { return mangleName; }
+			/// The result is the current constructed mangled name.
+			std::string result() const { return mangleName; }
 		  private:
 			std::string mangleName;         ///< Mangled name being constructed
@@ -444,9 +445,6 @@
 	} // namespace
 
-
 	std::string mangle( const ast::Node * decl, Mangle::Mode mode ) {
-		ast::Pass<Mangler_new> mangler( mode );
-		maybeAccept( decl, mangler );
-		return mangler.core.get_mangleName();
+		return ast::Pass<Mangler_new>::read( decl, mode );
 	}
 
@@ -689,8 +687,7 @@
 					} // for
 					for ( auto & assert : ptype->assertions ) {
-						ast::Pass<Mangler_new> sub_mangler(
-							mangleOverridable, typeMode, mangleGenericParams, nextVarNum, varNums );
-						assert->var->accept( sub_mangler );
-						assertionNames.push_back( sub_mangler.core.get_mangleName() );
+						assertionNames.push_back( ast::Pass<Mangler_new>::read(
+							assert->var.get(),
+							mangleOverridable, typeMode, mangleGenericParams, nextVarNum, varNums ) );
 						acount++;
 					} // for
Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 63d1ebe7115e4450a16b96fb0ea497249a457c47)
+++ src/SymTab/Mangler.h	(revision 2856982c6db55f1fdfb3012b77b490d999668ae8)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:44:03 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:45:30 2017
-// Update Count     : 15
+// Last Modified By : Andrew Beach
+// Last Modified On : Thu Oct 27 11:58:00 2022
+// Update Count     : 16
 //
 
@@ -22,5 +22,4 @@
 
 #include "AST/Bitfield.hpp"
-#include "AST/Fwd.hpp"
 #include "SynTree/SynTree.h"  // for Types
 #include "SynTree/Visitor.h"  // for Visitor, maybeAccept
@@ -33,4 +32,7 @@
 // * Currently name compression is not implemented.
 
+namespace ast {
+	class Node;
+}
 namespace ResolvExpr {
 	class TypeEnvironment;
@@ -101,8 +103,11 @@
 	using Mode = bitfield<mangle_flags>;
 
-	static inline Mode typeMode() { return NoOverrideable | Type; }
+	/// Mangle declaration name.
+	std::string mangle( const ast::Node * decl, Mode mode = {} );
 
-	/// Mangle declaration name
-	std::string mangle( const ast::Node * decl, Mode mode = {} );
+	/// Most common mangle configuration for types.
+	static inline std::string mangleType( const ast::Node * type ) {
+		return mangle( type, { NoOverrideable | Type } );
+	}
 
 	namespace Encoding {
Index: src/Virtual/ExpandCasts.cc
===================================================================
--- src/Virtual/ExpandCasts.cc	(revision 63d1ebe7115e4450a16b96fb0ea497249a457c47)
+++ src/Virtual/ExpandCasts.cc	(revision 2856982c6db55f1fdfb3012b77b490d999668ae8)
@@ -295,6 +295,5 @@
 	// returns the previous declaration for error messages.
 	ast::ObjectDecl const * insert( ast::ObjectDecl const * typeIdDecl ) {
-		std::string const & mangledName =
-				Mangle::mangle( typeIdDecl->type, Mangle::typeMode() );
+		std::string mangledName = Mangle::mangleType( typeIdDecl->type );
 		ast::ObjectDecl const *& value = instances[ mangledName ];
 		if ( value ) {
@@ -310,6 +309,5 @@
 
 	ast::ObjectDecl const * lookup( ast::Type const * typeIdType ) {
-		std::string const & mangledName =
-				Mangle::mangle( typeIdType, Mangle::typeMode() );
+		std::string mangledName = Mangle::mangleType( typeIdType );
 		auto const it = instances.find( mangledName );
 		return ( instances.end() == it ) ? nullptr : it->second;
