Make many mangled functions that might demangle a name be allowed to specify a language to use in order to soon support Pascal and Java demangling. Dawn Perchik will take care of making this so.

llvm-svn: 241751
diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp
index 0947106..a1916fe 100644
--- a/lldb/source/Core/Mangled.cpp
+++ b/lldb/source/Core/Mangled.cpp
@@ -66,7 +66,7 @@
 }
 
 static const ConstString &
-get_demangled_name_without_arguments (const Mangled *obj)
+get_demangled_name_without_arguments (ConstString mangled, ConstString demangled)
 {
     // This pair is <mangled name, demangled name without function arguments>
     static std::pair<ConstString, ConstString> g_most_recent_mangled_to_name_sans_args;
@@ -77,9 +77,6 @@
     static ConstString g_last_mangled;
     static ConstString g_last_demangled;
 
-    ConstString mangled = obj->GetMangledName ();
-    ConstString demangled = obj->GetDemangledName ();
-
     if (mangled && g_most_recent_mangled_to_name_sans_args.first == mangled)
     {
         return g_most_recent_mangled_to_name_sans_args.second;
@@ -197,7 +194,7 @@
 int
 Mangled::Compare (const Mangled& a, const Mangled& b)
 {
-    return ConstString::Compare(a.GetName(ePreferMangled), a.GetName(ePreferMangled));
+    return ConstString::Compare(a.GetName(lldb::eLanguageTypeUnknown, ePreferMangled), a.GetName(lldb::eLanguageTypeUnknown, ePreferMangled));
 }
 
 
@@ -261,7 +258,7 @@
 // object's lifetime.
 //----------------------------------------------------------------------
 const ConstString&
-Mangled::GetDemangledName () const
+Mangled::GetDemangledName (lldb::LanguageType language) const
 {
     // Check to make sure we have a valid mangled name and that we
     // haven't already decoded our mangled name.
@@ -340,18 +337,19 @@
 
 
 ConstString
-Mangled::GetDisplayDemangledName () const
+Mangled::GetDisplayDemangledName (lldb::LanguageType language) const
 {
-    return GetDemangledName();
+    return GetDemangledName(language);
 }
 
 bool
-Mangled::NameMatches (const RegularExpression& regex) const
+Mangled::NameMatches (const RegularExpression& regex, lldb::LanguageType language) const
 {
     if (m_mangled && regex.Execute (m_mangled.AsCString()))
         return true;
-    
-    if (GetDemangledName() && regex.Execute (m_demangled.AsCString()))
+
+    ConstString demangled = GetDemangledName(language);
+    if (demangled && regex.Execute (demangled.AsCString()))
         return true;
     return false;
 }
@@ -359,30 +357,28 @@
 //----------------------------------------------------------------------
 // Get the demangled name if there is one, else return the mangled name.
 //----------------------------------------------------------------------
-const ConstString&
-Mangled::GetName (Mangled::NamePreference preference) const
+ConstString
+Mangled::GetName (lldb::LanguageType language, Mangled::NamePreference preference) const
 {
+    ConstString demangled = GetDemangledName(language);
+
     if (preference == ePreferDemangledWithoutArguments)
     {
-        // Call the accessor to make sure we get a demangled name in case
-        // it hasn't been demangled yet...
-        GetDemangledName();
-
-        return get_demangled_name_without_arguments (this);
+        return get_demangled_name_without_arguments (m_mangled, demangled);
     }
     if (preference == ePreferDemangled)
     {
         // Call the accessor to make sure we get a demangled name in case
         // it hasn't been demangled yet...
-        if (GetDemangledName())
-            return m_demangled;
+        if (demangled)
+            return demangled;
         return m_mangled;
     }
     else
     {
         if (m_mangled)
             return m_mangled;
-        return GetDemangledName();
+        return demangled;
     }
 }
 
@@ -435,7 +431,7 @@
     ConstString mangled = GetMangledName();
     if (mangled)
     {
-        if (GetDemangledName())
+        if (GetDemangledName(lldb::eLanguageTypeUnknown))
         {
             if (cstring_is_mangled(mangled.GetCString()))
                 return lldb::eLanguageTypeC_plus_plus;
@@ -453,7 +449,7 @@
     if (obj.GetMangledName())
         s << "mangled = '" << obj.GetMangledName() << "'";
 
-    const ConstString& demangled = obj.GetDemangledName();
+    const ConstString& demangled = obj.GetDemangledName(lldb::eLanguageTypeUnknown);
     if (demangled)
         s << ", demangled = '" << demangled << '\'';
     else