21 #include "llvm/Support/Threading.h"
32 static llvm::once_flag g_initialize;
34 llvm::call_once(g_initialize, [] {
42 static std::mutex *g_mutex =
nullptr;
43 static llvm::once_flag g_initialize;
45 llvm::call_once(g_initialize, [] {
46 g_mutex =
new std::mutex();
56 auto iter = map.find(language), end = map.end();
58 return iter->second.get();
61 LanguageCreateInstance create_callback;
65 PluginManager::GetLanguageCreateCallbackAtIndex(idx)) !=
nullptr;
67 language_ptr = create_callback(language);
70 map[language] = std::unique_ptr<Language>(language_ptr);
78 Language *Language::FindPlugin(llvm::StringRef file_path) {
80 ForEach([&result, file_path](
Language *language) {
91 llvm::StringRef file_path) {
92 Language *result = FindPlugin(language);
96 result = FindPlugin(file_path);
100 void Language::ForEach(std::function<
bool(
Language *)> callback) {
103 static llvm::once_flag g_initialize;
104 llvm::call_once(g_initialize, [] {
114 std::vector<Language *> loaded_plugins;
118 for (
const auto &entry : map) {
120 loaded_plugins.push_back(entry.second.get());
124 for (
auto *lang : loaded_plugins) {
130 bool Language::IsTopLevelFunction(
Function &
function) {
return false; }
132 lldb::TypeCategoryImplSP Language::GetFormatters() {
return nullptr; }
143 Language::GetHardcodedSynthetics() {
147 std::vector<ConstString>
208 LanguageType Language::GetLanguageTypeFromString(llvm::StringRef
string) {
210 if (
string.equals_insensitive(L.name))
224 void Language::PrintAllLanguages(
Stream &s,
const char *prefix,
225 const char *suffix) {
231 void Language::ForAllLanguages(
349 std::set<lldb::LanguageType> Language::GetSupportedLanguages() {
350 std::set<lldb::LanguageType> supported_languages;
355 return supported_languages;
359 return PluginManager::GetAllTypeSystemSupportedLanguagesForTypes();
362 LanguageSet Language::GetLanguagesSupportingTypeSystemsForExpressions() {
363 return PluginManager::GetAllTypeSystemSupportedLanguagesForExpressions();
367 return PluginManager::GetREPLAllTypeSystemSupportedLanguages();
370 std::unique_ptr<Language::TypeScavenger> Language::GetTypeScavenger() {
374 const char *Language::GetLanguageSpecificTypeLookupHelp() {
return nullptr; }
388 size_t old_size = results.size();
390 if (this->Find_Impl(exe_scope, key, results))
391 return results.size() - old_size;
395 bool Language::ImageListTypeScavenger::Find_Impl(
403 llvm::DenseSet<SymbolFile *> searched_sym_files;
407 for (
const auto &match : matches.
Types()) {
409 CompilerType compiler_type(match->GetFullCompilerType());
410 compiler_type = AdjustForInclusion(compiler_type);
413 std::unique_ptr<Language::TypeScavenger::Result> scavengeresult(
414 new Result(compiler_type));
415 results.insert(std::move(scavengeresult));
431 bool Language::DemangledNameContainsPath(llvm::StringRef path,
447 bool Language::IsNilReference(
ValueObject &valobj) {
return false; }
449 bool Language::IsUninitializedReference(
ValueObject &valobj) {
return false; }
458 void Language::GetExceptionResolverDescription(
bool catch_on,
bool throw_on,
460 GetDefaultExceptionResolverDescription(catch_on, throw_on, s);
463 void Language::GetDefaultExceptionResolverDescription(
bool catch_on,
466 s.
Printf(
"Exception breakpoint (catch: %s throw: %s)",
467 catch_on ?
"on" :
"off", throw_on ?
"on" :
"off");
470 Language::Language() =
default;
473 Language::~Language() =
default;