[Lldb-commits] [lldb] Refactor TypeSystemClang to use static language set initialization (PR #172567)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Dec 17 11:07:19 PST 2025
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
More information about the lldb-commits
mailing list