15#include "llvm/ADT/DenseSet.h"
25 "Languages bit vector is no longer small on 64 bit systems");
48 if (
auto type_system_sp = create_callback(language, module, target))
49 return type_system_sp;
114 uint32_t opaque_payload) {
142 size_t idx,
bool expand_pack) {
146std::optional<CompilerType::IntegralTemplateArgument>
183std::vector<lldb_private::CompilerContext>
188std::vector<lldb_private::CompilerContext>
193std::vector<CompilerDecl>
195 bool ignore_imported_decls) {
196 return std::vector<CompilerDecl>();
199std::unique_ptr<UtilityFunction>
213#pragma mark TypeSystemMap
222 std::lock_guard<std::mutex> guard(
m_mutex);
226 llvm::DenseSet<TypeSystem *> visited;
227 for (
auto &pair : map) {
228 if (visited.count(pair.second.get()))
230 visited.insert(pair.second.get());
232 type_system->Finalize();
236 std::lock_guard<std::mutex> guard(
m_mutex);
251 std::lock_guard<std::mutex> guard(
m_mutex);
252 map_snapshot =
m_map;
257 llvm::DenseSet<TypeSystem *> visited;
258 for (
auto &pair : map_snapshot) {
260 if (!type_system || visited.count(type_system))
262 visited.insert(type_system);
264 if (!callback(pair.second))
271 std::optional<CreateCallback> create_callback) {
272 std::lock_guard<std::mutex> guard(
m_mutex);
274 return llvm::createStringError(
275 "Unable to get TypeSystem because TypeSystemMap is being cleared");
277 collection::iterator pos =
m_map.find(language);
278 if (pos !=
m_map.end()) {
280 assert(!pos->second->weak_from_this().expired());
283 return llvm::createStringError(
284 "TypeSystem for language " +
289 for (
const auto &pair :
m_map) {
290 if (pair.second && pair.second->SupportsLanguage(language)) {
293 m_map[language] = pair.second;
296 return llvm::createStringError(
297 "TypeSystem for language " +
303 if (!create_callback)
304 return llvm::createStringError(
305 "Unable to find type system for language " +
310 m_map[language] = type_system_sp;
312 return type_system_sp;
313 return llvm::createStringError(
314 "TypeSystem for language " +
319llvm::Expected<lldb::TypeSystemSP>
321 Module *module,
bool can_create) {
324 language, std::optional<CreateCallback>([language, module]() {
331llvm::Expected<lldb::TypeSystemSP>
333 Target *target,
bool can_create) {
336 language, std::optional<CreateCallback>([language, target]() {
349 if (languages.
Empty())
351 return languages[language];
static const size_t g_num_small_bitvector_bits
A 64-bit SmallBitVector is only small up to 64-7 bits, and the setBitsInMask interface wants to write...
static TypeSystemSP CreateInstanceHelper(lldb::LanguageType language, Module *module, Target *target)
Represents a generic declaration context in a program.
Generic representation of a type in a programming language.
A uniqued constant string class.
static const char * GetNameForLanguageType(lldb::LanguageType language)
A class that describes an executable image and its associated object and symbol files.
static TypeSystemCreateInstance GetTypeSystemCreateCallbackAtIndex(uint32_t idx)
static LanguageSet GetAllTypeSystemSupportedLanguagesForTypes()
llvm::DenseMap< uint16_t, lldb::TypeSystemSP > collection
std::mutex m_mutex
A mutex to keep this object happy in multi-threaded environments.
llvm::Expected< lldb::TypeSystemSP > GetTypeSystemForLanguage(lldb::LanguageType language, Module *module, bool can_create)
void ForEach(std::function< bool(lldb::TypeSystemSP)> const &callback)
Interface for representing a type system.
virtual std::unique_ptr< UtilityFunction > CreateUtilityFunction(std::string text, std::string name)
virtual bool IsMeaninglessWithoutDynamicResolution(void *type)
virtual size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type, bool expand_pack)
virtual CompilerType GetBuiltinTypeByName(ConstString name)
virtual CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
virtual CompilerType GetTypeForFormatters(void *type)
virtual CompilerType AddRestrictModifier(lldb::opaque_compiler_type_t type)
virtual CompilerType GetAtomicType(lldb::opaque_compiler_type_t type)
virtual ConstString GetMangledTypeName(lldb::opaque_compiler_type_t type)
Defaults to GetTypeName(type).
virtual CompilerType GetLValueReferenceType(lldb::opaque_compiler_type_t type)
virtual std::vector< CompilerDecl > DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name, const bool ignore_imported_decls)
virtual ConstString GetTypeName(lldb::opaque_compiler_type_t type, bool BaseOnly)=0
virtual std::optional< llvm::json::Value > ReportStatistics()
virtual CompilerType CreateTypedef(lldb::opaque_compiler_type_t type, const char *name, const CompilerDeclContext &decl_ctx, uint32_t opaque_payload)
virtual LazyBool ShouldPrintAsOneLiner(void *type, ValueObject *valobj)
virtual CompilerType AddConstModifier(lldb::opaque_compiler_type_t type)
virtual CompilerType AddPtrAuthModifier(lldb::opaque_compiler_type_t type, uint32_t payload)
virtual CompilerType DeclGetFunctionReturnType(void *opaque_decl)
virtual CompilerType DeclGetFunctionArgumentType(void *opaque_decl, size_t arg_idx)
virtual CompilerType GetRValueReferenceType(lldb::opaque_compiler_type_t type)
virtual std::vector< lldb_private::CompilerContext > DeclGetCompilerContext(void *opaque_decl)
virtual std::vector< lldb_private::CompilerContext > DeclContextGetCompilerContext(void *opaque_decl_ctx)
virtual bool IsAnonymousType(lldb::opaque_compiler_type_t type)
virtual ConstString DeclGetMangledName(void *opaque_decl)
virtual CompilerType GetArrayType(lldb::opaque_compiler_type_t type, uint64_t size)
static bool SupportsLanguageStatic(lldb::LanguageType language)
virtual CompilerDeclContext GetCompilerDeclContextForType(const CompilerType &type)
Returns the direct parent context of specified type.
virtual std::optional< CompilerType::IntegralTemplateArgument > GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
virtual bool Verify(lldb::opaque_compiler_type_t type)=0
Verify the integrity of the type to catch CompilerTypes that mix and match invalid TypeSystem/Opaque ...
virtual lldb::TemplateArgumentKind GetTemplateArgumentKind(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack)
static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module)
virtual bool IsTemplateType(lldb::opaque_compiler_type_t type)
virtual size_t DeclGetFunctionNumArguments(void *opaque_decl)
virtual CompilerDeclContext DeclGetDeclContext(void *opaque_decl)
virtual CompilerType AddVolatileModifier(lldb::opaque_compiler_type_t type)
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
void * opaque_compiler_type_t
LanguageType
Programming language type.
@ eLanguageTypeUnknown
Unknown or invalid language value.
@ eTemplateArgumentKindNull
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
llvm::SmallBitVector bitvector
std::optional< lldb::LanguageType > GetSingularLanguage()
If the set contains a single language only, return it.
bool operator[](unsigned i) const
void Insert(lldb::LanguageType language)