llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: None (barsolo2000)

<details>
<summary>Changes</summary>

Refactor TypeSystemClang to use static language set initialization and add 
Pascal/Rust/D/Dylan support. 
the purpose is:
1) Single source of truth for supported languages (no duplication)
2) Lazy static initialization (only built once rather than every time we call)

---
Full diff: https://github.com/llvm/llvm-project/pull/172567.diff


2 Files Affected:

- (modified) lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp (+23-26) 
- (modified) lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h (+1-1) 


``````````diff
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp 
b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
index 625d0e546ad3b..60d95aa34b76f 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -109,17 +109,7 @@ static void VerifyDecl(clang::Decl *decl) {
 
 static inline bool
 TypeSystemClangSupportsLanguage(lldb::LanguageType language) {
-  return language == eLanguageTypeUnknown || // Clang is the default type 
system
-         lldb_private::Language::LanguageIsC(language) ||
-         lldb_private::Language::LanguageIsCPlusPlus(language) ||
-         lldb_private::Language::LanguageIsObjC(language) ||
-         lldb_private::Language::LanguageIsPascal(language) ||
-         // Use Clang for Rust until there is a proper language plugin for it
-         language == eLanguageTypeRust ||
-         // Use Clang for D until there is a proper language plugin for it
-         language == eLanguageTypeD ||
-         // Open Dylan compiler debug info is designed to be Clang-compatible
-         language == eLanguageTypeDylan;
+  return TypeSystemClang::GetSupportedLanguagesForTypes()[language];
 }
 
 // Checks whether m1 is an overload of m2 (as opposed to an override). This is
@@ -546,21 +536,28 @@ lldb::TypeSystemSP 
TypeSystemClang::CreateInstance(lldb::LanguageType language,
   return lldb::TypeSystemSP();
 }
 
-LanguageSet TypeSystemClang::GetSupportedLanguagesForTypes() {
-  LanguageSet languages;
-  languages.Insert(lldb::eLanguageTypeC89);
-  languages.Insert(lldb::eLanguageTypeC);
-  languages.Insert(lldb::eLanguageTypeC11);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus);
-  languages.Insert(lldb::eLanguageTypeC99);
-  languages.Insert(lldb::eLanguageTypeObjC);
-  languages.Insert(lldb::eLanguageTypeObjC_plus_plus);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus_03);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus_11);
-  languages.Insert(lldb::eLanguageTypeC11);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus_14);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus_17);
-  languages.Insert(lldb::eLanguageTypeC_plus_plus_20);
+const LanguageSet &TypeSystemClang::GetSupportedLanguagesForTypes() {
+  static std::once_flag s_once_languages;
+  static LanguageSet languages;
+  std::call_once(s_once_languages, [] {
+    languages.Insert(lldb::eLanguageTypeUnknown);
+    languages.Insert(lldb::eLanguageTypeC89);
+    languages.Insert(lldb::eLanguageTypeC);
+    languages.Insert(lldb::eLanguageTypeC11);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus);
+    languages.Insert(lldb::eLanguageTypeC99);
+    languages.Insert(lldb::eLanguageTypeObjC);
+    languages.Insert(lldb::eLanguageTypeObjC_plus_plus);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus_03);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus_11);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus_14);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus_17);
+    languages.Insert(lldb::eLanguageTypeC_plus_plus_20);
+    languages.Insert(lldb::eLanguageTypePascal83);
+    languages.Insert(lldb::eLanguageTypeRust);
+    languages.Insert(lldb::eLanguageTypeD);
+    languages.Insert(lldb::eLanguageTypeDylan);
+  });
   return languages;
 }
 
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h 
b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
index 67d206e4d2df2..3db5d5ee5392f 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
@@ -150,7 +150,7 @@ class TypeSystemClang : public TypeSystem {
   static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language,
                                            Module *module, Target *target);
 
-  static LanguageSet GetSupportedLanguagesForTypes();
+  static const LanguageSet &GetSupportedLanguagesForTypes();
   static LanguageSet GetSupportedLanguagesForExpressions();
 
   static void Initialize();

``````````

</details>


https://github.com/llvm/llvm-project/pull/172567
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to