Index: src/SymTab/Mangler.h
===================================================================
--- src/SymTab/Mangler.h	(revision 92360603d942184e66e5f92706ecc75c6b04f121)
+++ src/SymTab/Mangler.h	(revision ea7d2b051267e571f113e8dabae0d886eda94432)
@@ -30,7 +30,10 @@
 		/// Mangle syntax tree object; primary interface to clients
 		template< typename SynTreeClass >
-	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool typeMode = false );
+	    static std::string mangle( SynTreeClass *decl, bool mangleOverridable = true, bool typeMode = false, bool mangleGenericParams = true );
 		/// Mangle a type name; secondary interface
 		static std::string mangleType( Type* ty );
+		/// Mangle ignoring generic type parameters
+		static std::string mangleConcrete( Type* ty );
+
 
 		virtual void visit( ObjectDecl *declaration );
@@ -62,11 +65,11 @@
 		bool mangleOverridable;         ///< Specially mangle overridable built-in methods
 		bool typeMode;                  ///< Produce a unique mangled name for a type
+		bool mangleGenericParams;       ///< Include generic parameters in name mangling if true
 
-		Mangler( bool mangleOverridable, bool typeMode );
+		Mangler( bool mangleOverridable, bool typeMode, bool mangleGenericParams );
 		Mangler( const Mangler & );
 
 		void mangleDecl( DeclarationWithType *declaration );
 		void mangleRef( ReferenceToType *refType, std::string prefix );
-		void mangleGenericRef( ReferenceToType *refType, std::string prefix );
 
 		void printQualifiers( Type *type );
@@ -74,6 +77,6 @@
 
 	template< typename SynTreeClass >
-	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool typeMode ) {
-		Mangler mangler( mangleOverridable, typeMode );
+	std::string Mangler::mangle( SynTreeClass *decl, bool mangleOverridable, bool typeMode, bool mangleGenericParams ) {
+		Mangler mangler( mangleOverridable, typeMode, mangleGenericParams );
 		maybeAccept( decl, mangler );
 		return mangler.get_mangleName();
