LLDB mainline
Language.cpp
Go to the documentation of this file.
1//===-- Language.cpp ------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include <functional>
10#include <map>
11#include <mutex>
12
14
19#include "lldb/Target/Target.h"
20#include "lldb/Utility/Stream.h"
21
22#include "llvm/BinaryFormat/Dwarf.h"
23#include "llvm/Support/Threading.h"
24
25using namespace lldb;
26using namespace lldb_private;
27using namespace lldb_private::formatters;
28
29typedef std::unique_ptr<Language> LanguageUP;
30typedef std::map<lldb::LanguageType, LanguageUP> LanguagesMap;
31
32#define LLDB_PROPERTIES_language
33#include "TargetProperties.inc"
34
35enum {
36#define LLDB_PROPERTIES_language
37#include "TargetPropertiesEnum.inc"
38};
39
41 static LanguageProperties g_settings;
42 return g_settings;
43}
44
46 static constexpr llvm::StringLiteral g_setting_name("language");
47 return g_setting_name;
48}
49
51 m_collection_sp = std::make_shared<OptionValueProperties>(GetSettingName());
52 m_collection_sp->Initialize(g_language_properties);
53}
54
56 const uint32_t idx = ePropertyEnableFilterForLineBreakpoints;
58 idx, g_language_properties[idx].default_uint_value != 0);
59}
60
62 static LanguagesMap *g_map = nullptr;
63 static llvm::once_flag g_initialize;
64
65 llvm::call_once(g_initialize, [] {
66 g_map = new LanguagesMap(); // NOTE: INTENTIONAL LEAK due to global
67 // destructor chain
68 });
69
70 return *g_map;
71}
72static std::mutex &GetLanguagesMutex() {
73 static std::mutex *g_mutex = nullptr;
74 static llvm::once_flag g_initialize;
75
76 llvm::call_once(g_initialize, [] {
77 g_mutex = new std::mutex(); // NOTE: INTENTIONAL LEAK due to global
78 // destructor chain
79 });
80
81 return *g_mutex;
82}
83
85 std::lock_guard<std::mutex> guard(GetLanguagesMutex());
87 auto iter = map.find(language), end = map.end();
88 if (iter != end)
89 return iter->second.get();
90
91 Language *language_ptr = nullptr;
92 LanguageCreateInstance create_callback;
93
94 for (uint32_t idx = 0;
95 (create_callback =
97 ++idx) {
98 language_ptr = create_callback(language);
99
100 if (language_ptr) {
101 map[language] = std::unique_ptr<Language>(language_ptr);
102 return language_ptr;
103 }
104 }
105
106 return nullptr;
107}
108
109Language *Language::FindPlugin(llvm::StringRef file_path) {
110 Language *result = nullptr;
111 ForEach([&result, file_path](Language *language) {
112 if (language->IsSourceFile(file_path)) {
113 result = language;
115 }
117 });
118 return result;
119}
120
122 llvm::StringRef file_path) {
123 Language *result = FindPlugin(language);
124 // Finding a language by file path is slower, we so we use this as the
125 // fallback.
126 if (!result)
127 result = FindPlugin(file_path);
128 return result;
129}
130
132 llvm::function_ref<IterationAction(Language *)> callback) {
133 // If we want to iterate over all languages, we first have to complete the
134 // LanguagesMap.
135 static llvm::once_flag g_initialize;
136 llvm::call_once(g_initialize, [] {
137 for (unsigned lang = eLanguageTypeUnknown; lang < eNumLanguageTypes;
138 ++lang) {
139 FindPlugin(static_cast<lldb::LanguageType>(lang));
140 }
141 });
142
143 // callback may call a method in Language that attempts to acquire the same
144 // lock (such as Language::ForEach or Language::FindPlugin). To avoid a
145 // deadlock, we do not use callback while holding the lock.
146 std::vector<Language *> loaded_plugins;
147 {
148 std::lock_guard<std::mutex> guard(GetLanguagesMutex());
150 for (const auto &entry : map) {
151 if (entry.second)
152 loaded_plugins.push_back(entry.second.get());
153 }
154 }
155
156 for (auto *lang : loaded_plugins) {
157 if (callback(lang) == IterationAction::Stop)
158 break;
159 }
160}
161
162llvm::Expected<LanguageType>
165 LanguageType exception_language = eLanguageTypeUnknown;
166
167 llvm::StringRef error_context;
168 switch (language) {
169 case eLanguageTypeC89:
170 case eLanguageTypeC:
171 case eLanguageTypeC99:
172 case eLanguageTypeC11:
173 exception_language = eLanguageTypeC;
174 break;
179 exception_language = eLanguageTypeC_plus_plus;
180 break;
182 error_context =
183 "Set exception breakpoints separately for c++ and objective-c";
184 break;
186 error_context = "Unknown language type for exception breakpoint";
187 break;
188 default:
189 if (Language *languagePlugin = Language::FindPlugin(language)) {
190 if (languagePlugin->SupportsExceptionBreakpointsOnThrow() ||
191 languagePlugin->SupportsExceptionBreakpointsOnCatch()) {
192 exception_language = language;
193 break;
194 }
195 }
196 error_context = "Unsupported language type for exception breakpoint";
197 }
198 if (!error_context.empty())
199 return llvm::createStringError(llvm::inconvertibleErrorCode(),
200 error_context);
201 return exception_language;
202}
203
204bool Language::IsTopLevelFunction(Function &function) { return false; }
205
207
211
215
218 return {};
219}
220
221std::vector<FormattersMatchCandidate>
223 lldb::DynamicValueType use_dynamic) {
224 return {};
225}
226
231
233 // To allow GetNameForLanguageType to be a simple array lookup, the first
234 // part of this array must follow enum LanguageType exactly.
235 {"unknown", eLanguageTypeUnknown},
236 {"c89", eLanguageTypeC89},
237 {"c", eLanguageTypeC},
238 {"ada83", eLanguageTypeAda83},
240 {"cobol74", eLanguageTypeCobol74},
241 {"cobol85", eLanguageTypeCobol85},
242 {"fortran77", eLanguageTypeFortran77},
243 {"fortran90", eLanguageTypeFortran90},
244 {"pascal83", eLanguageTypePascal83},
245 {"modula2", eLanguageTypeModula2},
246 {"java", eLanguageTypeJava},
247 {"c99", eLanguageTypeC99},
248 {"ada95", eLanguageTypeAda95},
249 {"fortran95", eLanguageTypeFortran95},
250 {"pli", eLanguageTypePLI},
251 {"objective-c", eLanguageTypeObjC},
252 {"objective-c++", eLanguageTypeObjC_plus_plus},
253 {"upc", eLanguageTypeUPC},
254 {"d", eLanguageTypeD},
255 {"python", eLanguageTypePython},
256 {"opencl", eLanguageTypeOpenCL},
257 {"go", eLanguageTypeGo},
258 {"modula3", eLanguageTypeModula3},
259 {"haskell", eLanguageTypeHaskell},
262 {"ocaml", eLanguageTypeOCaml},
263 {"rust", eLanguageTypeRust},
264 {"c11", eLanguageTypeC11},
265 {"swift", eLanguageTypeSwift},
266 {"julia", eLanguageTypeJulia},
267 {"dylan", eLanguageTypeDylan},
269 {"fortran03", eLanguageTypeFortran03},
270 {"fortran08", eLanguageTypeFortran08},
271 {"renderscript", eLanguageTypeRenderScript},
272 {"bliss", eLanguageTypeBLISS},
273 {"kotlin", eLanguageTypeKotlin},
274 {"zig", eLanguageTypeZig},
275 {"crystal", eLanguageTypeCrystal},
276 {"<invalid language>",
277 static_cast<LanguageType>(
278 0x0029)}, // Not yet taken by any language in the DWARF spec
279 // and thus has no entry in LanguageType
282 {"c17", eLanguageTypeC17},
283 {"fortran18", eLanguageTypeFortran18},
284 {"ada2005", eLanguageTypeAda2005},
285 {"ada2012", eLanguageTypeAda2012},
286 {"HIP", eLanguageTypeHIP},
287 {"assembly", eLanguageTypeAssembly},
288 {"c-sharp", eLanguageTypeC_sharp},
289 {"mojo", eLanguageTypeMojo},
290 // Vendor Extensions
291 {"assembler", eLanguageTypeMipsAssembler},
292 // Now synonyms, in arbitrary order
293 {"objc", eLanguageTypeObjC},
294 {"objc++", eLanguageTypeObjC_plus_plus},
295 {"pascal", eLanguageTypePascal83}};
296
297static uint32_t num_languages =
298 sizeof(language_names) / sizeof(struct language_name_pair);
299
301 for (const auto &L : language_names) {
302 if (string.equals_insensitive(L.name))
303 return L.type;
304 }
305
307}
308
310 if (language < num_languages)
311 return language_names[language].name;
312 else
314}
315
317 return SourceLanguage(language).GetDescription();
318}
319
321 llvm::StringRef prefix,
322 llvm::StringRef suffix) {
324 for (size_t idx = 0; idx < num_languages; ++idx) {
325 auto const &lang = language_names[idx];
326 if (supported[lang.type])
327 s << prefix << lang.name << suffix;
328 }
329}
330
331void Language::PrintAllLanguages(Stream &s, const char *prefix,
332 const char *suffix) {
333 for (uint32_t i = 1; i < num_languages; i++) {
334 s.Printf("%s%s%s", prefix, language_names[i].name, suffix);
335 }
336}
337
339 llvm::function_ref<IterationAction(lldb::LanguageType)> callback) {
340 for (uint32_t i = 1; i < num_languages; i++) {
341 if (callback(language_names[i].type) == IterationAction::Stop)
342 break;
343 }
344}
345
347 switch (language) {
355 return true;
356 default:
357 return false;
358 }
359}
360
362 switch (language) {
365 return true;
366 default:
367 return false;
368 }
369}
370
372 switch (language) {
373 case eLanguageTypeC:
374 case eLanguageTypeC89:
375 case eLanguageTypeC99:
376 case eLanguageTypeC11:
377 return true;
378 default:
379 return false;
380 }
381}
382
384 switch (language) {
385 case eLanguageTypeC:
386 case eLanguageTypeC89:
387 case eLanguageTypeC99:
388 case eLanguageTypeC11:
397 return true;
398 default:
399 return false;
400 }
401}
402
404 switch (language) {
406 return true;
407 default:
408 return false;
409 }
410}
411
461
462std::set<lldb::LanguageType> Language::GetSupportedLanguages() {
463 std::set<lldb::LanguageType> supported_languages;
464 ForEach([&](Language *lang) {
465 supported_languages.emplace(lang->GetLanguageType());
467 });
468 return supported_languages;
469}
470
474
478
482
483std::unique_ptr<Language::TypeScavenger> Language::GetTypeScavenger() {
484 return nullptr;
485}
486
487const char *Language::GetLanguageSpecificTypeLookupHelp() { return nullptr; }
488
490 const char *key, ResultSet &results,
491 bool append) {
492 if (!exe_scope || !exe_scope->CalculateTarget().get())
493 return false;
494
495 if (!key || !key[0])
496 return false;
497
498 if (!append)
499 results.clear();
500
501 size_t old_size = results.size();
502
503 if (this->Find_Impl(exe_scope, key, results))
504 return results.size() - old_size;
505 return 0;
506}
507
509 ExecutionContextScope *exe_scope, const char *key, ResultSet &results) {
510 bool result = false;
511
512 Target *target = exe_scope->CalculateTarget().get();
513 if (target) {
514 const auto &images(target->GetImages());
515 TypeQuery query(key);
516 TypeResults type_results;
517 images.FindTypes(nullptr, query, type_results);
518 for (const auto &match : type_results.GetTypeMap().Types()) {
519 if (match) {
520 CompilerType compiler_type(match->GetFullCompilerType());
521 compiler_type = AdjustForInclusion(compiler_type);
522 if (!compiler_type)
523 continue;
524 std::unique_ptr<Language::TypeScavenger::Result> scavengeresult(
525 new Result(compiler_type));
526 results.insert(std::move(scavengeresult));
527 result = true;
528 }
529 }
530 }
531
532 return result;
533}
534
535std::pair<llvm::StringRef, llvm::StringRef>
536Language::GetFormatterPrefixSuffix(llvm::StringRef type_hint) {
537 return std::pair<llvm::StringRef, llvm::StringRef>();
538}
539
540bool Language::DemangledNameContainsPath(llvm::StringRef path,
541 ConstString demangled) const {
542 // The base implementation does a simple contains comparision:
543 if (path.empty())
544 return false;
545 return demangled.GetStringRef().contains(path);
546}
547
551
555
556bool Language::IsNilReference(ValueObject &valobj) { return false; }
557
558bool Language::IsUninitializedReference(ValueObject &valobj) { return false; }
559
561 const ExecutionContext *exe_ctx,
562 FunctionNameRepresentation representation,
563 Stream &s) {
564 return false;
565}
566
567void Language::GetExceptionResolverDescription(bool catch_on, bool throw_on,
568 Stream &s) {
569 GetDefaultExceptionResolverDescription(catch_on, throw_on, s);
570}
571
573 bool throw_on,
574 Stream &s) {
575 s.Printf("Exception breakpoint (catch: %s throw: %s)",
576 catch_on ? "on" : "off", throw_on ? "on" : "off");
577}
578
579std::optional<bool> Language::GetBooleanFromString(llvm::StringRef str) const {
580 return llvm::StringSwitch<std::optional<bool>>(str)
581 .Case("true", {true})
582 .Case("false", {false})
583 .Default({});
584}
585
586// Constructor
587Language::Language() = default;
588
589// Destructor
590Language::~Language() = default;
591
592static std::optional<llvm::dwarf::SourceLanguage>
594 if (language_type <= lldb::eLanguageTypeLastStandardLanguage)
595 return static_cast<llvm::dwarf::SourceLanguage>(language_type);
596
597 switch (language_type) {
599 return llvm::dwarf::DW_LANG_Mips_Assembler;
600 default:
601 return std::nullopt;
602 }
603}
604
606 std::optional<llvm::dwarf::SourceLanguage> dwarf_lang =
607 ToDwarfSourceLanguage(language_type);
608 if (!dwarf_lang)
609 return;
610
611 auto lname = llvm::dwarf::toDW_LNAME(*dwarf_lang);
612 if (!lname)
613 return;
614 name = lname->first;
615 version = lname->second;
616}
617
619 if (auto lang = llvm::dwarf::toDW_LANG((llvm::dwarf::SourceLanguageName)name,
620 version))
621 return (lldb::LanguageType)*lang;
623}
624
625llvm::StringRef SourceLanguage::GetDescription() const {
626 return llvm::dwarf::LanguageDescription(
627 static_cast<llvm::dwarf::SourceLanguageName>(name), version);
628}
629bool SourceLanguage::IsC() const { return name == llvm::dwarf::DW_LNAME_C; }
630
632 return name == llvm::dwarf::DW_LNAME_ObjC;
633}
634
636 return name == llvm::dwarf::DW_LNAME_C_plus_plus;
637}
static llvm::raw_ostream & error(Stream &strm)
static std::optional< llvm::dwarf::SourceLanguage > ToDwarfSourceLanguage(lldb::LanguageType language_type)
Definition Language.cpp:593
struct language_name_pair language_names[]
Definition Language.cpp:232
std::map< lldb::LanguageType, LanguageUP > LanguagesMap
Definition Language.cpp:30
static LanguagesMap & GetLanguagesMap()
Definition Language.cpp:61
static uint32_t num_languages
Definition Language.cpp:297
static std::mutex & GetLanguagesMutex()
Definition Language.cpp:72
std::unique_ptr< Language > LanguageUP
Definition Language.cpp:29
Generic representation of a type in a programming language.
A uniqued constant string class.
Definition ConstString.h:40
llvm::StringRef GetStringRef() const
Get the string value as a llvm::StringRef.
std::function< bool(ConstString, ConstString, const DumpValueObjectOptions &, Stream &)> DeclPrintingHelper
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
virtual lldb::TargetSP CalculateTarget()=0
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A class that describes a function.
Definition Function.h:400
HardcodedFormatterFinders< SyntheticChildren > HardcodedSyntheticFinder
HardcodedFormatterFinders< TypeSummaryImpl > HardcodedSummaryFinder
HardcodedFormatterFinders< TypeFormatImpl > HardcodedFormatFinder
static llvm::StringRef GetSettingName()
Definition Language.cpp:45
bool GetEnableFilterForLineBreakpoints() const
Definition Language.cpp:55
virtual CompilerType AdjustForInclusion(CompilerType &candidate)=0
bool Find_Impl(ExecutionContextScope *exe_scope, const char *key, ResultSet &results) override
Definition Language.cpp:508
std::set< std::unique_ptr< Result > > ResultSet
Definition Language.h:53
virtual bool Find_Impl(ExecutionContextScope *exe_scope, const char *key, ResultSet &results)=0
size_t Find(ExecutionContextScope *exe_scope, const char *key, ResultSet &results, bool append=true)
Definition Language.cpp:489
virtual bool IsSourceFile(llvm::StringRef file_path) const =0
static void PrintSupportedLanguagesForExpressions(Stream &s, llvm::StringRef prefix, llvm::StringRef suffix)
Prints to the specified stream 's' each language type that the current target supports for expression...
Definition Language.cpp:320
static LanguageSet GetLanguagesSupportingREPLs()
Definition Language.cpp:479
static LanguageSet GetLanguagesSupportingTypeSystems()
Definition Language.cpp:471
virtual std::optional< bool > GetBooleanFromString(llvm::StringRef str) const
Definition Language.cpp:579
virtual std::vector< FormattersMatchCandidate > GetPossibleFormattersMatches(ValueObject &valobj, lldb::DynamicValueType use_dynamic)
Definition Language.cpp:222
virtual lldb::TypeCategoryImplSP GetFormatters()
Definition Language.cpp:206
static void ForEach(llvm::function_ref< IterationAction(Language *)> callback)
Definition Language.cpp:131
static void ForAllLanguages(llvm::function_ref< IterationAction(lldb::LanguageType)> callback)
Definition Language.cpp:338
static Language * FindPlugin(lldb::LanguageType language)
Definition Language.cpp:84
static const char * GetNameForLanguageType(lldb::LanguageType language)
Returns the internal LLDB name for the specified language.
Definition Language.cpp:309
virtual DumpValueObjectOptions::DeclPrintingHelper GetDeclPrintingHelper()
Definition Language.cpp:548
static LanguageProperties & GetGlobalLanguageProperties()
Definition Language.cpp:40
virtual LazyBool IsLogicalTrue(ValueObject &valobj, Status &error)
Definition Language.cpp:552
virtual const char * GetLanguageSpecificTypeLookupHelp()
Definition Language.cpp:487
virtual bool GetFunctionDisplayName(const SymbolContext &sc, const ExecutionContext *exe_ctx, FunctionNameRepresentation representation, Stream &s)
Definition Language.cpp:560
virtual std::pair< llvm::StringRef, llvm::StringRef > GetFormatterPrefixSuffix(llvm::StringRef type_hint)
An individual data formatter may apply to several types and cross language boundaries.
Definition Language.cpp:536
static bool LanguageIsC(lldb::LanguageType language)
Definition Language.cpp:371
virtual lldb::LanguageType GetLanguageType() const =0
virtual HardcodedFormatters::HardcodedSummaryFinder GetHardcodedSummaries()
Definition Language.cpp:212
static void GetDefaultExceptionResolverDescription(bool catch_on, bool throw_on, Stream &s)
Definition Language.cpp:572
virtual bool DemangledNameContainsPath(llvm::StringRef path, ConstString demangled) const
Definition Language.cpp:540
static bool LanguageIsCPlusPlus(lldb::LanguageType language)
Definition Language.cpp:346
static llvm::StringRef GetDisplayNameForLanguageType(lldb::LanguageType language)
Returns a user-friendly name for the specified language.
Definition Language.cpp:316
static lldb::LanguageType GetPrimaryLanguage(lldb::LanguageType language)
Definition Language.cpp:412
static bool LanguageIsPascal(lldb::LanguageType language)
Definition Language.cpp:403
virtual bool IsNilReference(ValueObject &valobj)
Definition Language.cpp:556
virtual bool IsUninitializedReference(ValueObject &valobj)
Definition Language.cpp:558
static void PrintAllLanguages(Stream &s, const char *prefix, const char *suffix)
Definition Language.cpp:331
static llvm::Expected< lldb::LanguageType > GetExceptionLanguageForLanguage(llvm::StringRef lang_name)
Definition Language.cpp:163
virtual HardcodedFormatters::HardcodedSyntheticFinder GetHardcodedSynthetics()
Definition Language.cpp:217
virtual std::unique_ptr< TypeScavenger > GetTypeScavenger()
Definition Language.cpp:483
static LanguageSet GetLanguagesSupportingTypeSystemsForExpressions()
Definition Language.cpp:475
virtual bool IsTopLevelFunction(Function &function)
Definition Language.cpp:204
virtual void GetExceptionResolverDescription(bool catch_on, bool throw_on, Stream &s)
Definition Language.cpp:567
static lldb::LanguageType GetLanguageTypeFromString(const char *string)=delete
static bool LanguageIsCFamily(lldb::LanguageType language)
Equivalent to LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
Definition Language.cpp:383
static std::set< lldb::LanguageType > GetSupportedLanguages()
Definition Language.cpp:462
virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats()
Definition Language.cpp:208
static bool LanguageIsObjC(lldb::LanguageType language)
Definition Language.cpp:361
static LanguageSet GetAllTypeSystemSupportedLanguagesForExpressions()
static LanguageSet GetREPLAllTypeSystemSupportedLanguages()
static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx)
static LanguageSet GetAllTypeSystemSupportedLanguagesForTypes()
lldb::OptionValuePropertiesSP m_collection_sp
T GetPropertyAtIndexAs(uint32_t idx, T default_value, const ExecutionContext *exe_ctx=nullptr) const
An error handling class.
Definition Status.h:118
A stream class that can stream formatted output to a file.
Definition Stream.h:28
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
Definition Stream.cpp:134
Defines a symbol context baton that can be handed other debug core functions.
const ModuleList & GetImages() const
Get accessor for the images for this process.
Definition Target.h:1111
TypeIterable Types() const
Definition TypeMap.h:50
A class that contains all state required for type lookups.
Definition Type.h:104
This class tracks the state and results of a TypeQuery.
Definition Type.h:344
TypeMap & GetTypeMap()
Definition Type.h:386
A class that represents a running process on the host machine.
IterationAction
Useful for callbacks whose return type indicates whether to continue iteration or short-circuit.
Language *(* LanguageCreateInstance)(lldb::LanguageType language)
LanguageType
Programming language type.
@ eLanguageTypeC_plus_plus_20
ISO C++:2020.
@ eLanguageTypeC_plus_plus_14
ISO C++:2014.
@ eLanguageTypeHaskell
Haskell.
@ eLanguageTypeRenderScript
@ eLanguageTypePLI
ANSI PL/I:1976.
@ eLanguageTypeC11
ISO C:2011.
@ eLanguageTypeJava
Java.
@ eLanguageTypeFortran08
ISO Fortran 2008.
@ eLanguageTypeFortran18
@ eLanguageTypeC99
ISO C:1999.
@ eLanguageTypePascal83
ISO Pascal:1983.
@ eLanguageTypeModula3
Modula 3.
@ eLanguageTypeModula2
ISO Modula-2:1996.
@ eLanguageTypeOCaml
OCaml.
@ eLanguageTypeMipsAssembler
Mips_Assembler.
@ eLanguageTypeC_plus_plus_03
ISO C++:2003.
@ eLanguageTypeUnknown
Unknown or invalid language value.
@ eLanguageTypeRust
Rust.
@ eLanguageTypeFortran95
ISO Fortran 95.
@ eLanguageTypeC_sharp
@ eLanguageTypeAda2012
@ eLanguageTypeC_plus_plus_17
ISO C++:2017.
@ eLanguageTypeCrystal
@ eLanguageTypeObjC_plus_plus
Objective-C++.
@ eLanguageTypeC_plus_plus_11
ISO C++:2011.
@ eLanguageTypeSwift
Swift.
@ eLanguageTypeC89
ISO C:1989.
@ eLanguageTypeAda83
ISO Ada:1983.
@ eLanguageTypeJulia
Julia.
@ eLanguageTypeGo
Go.
@ eLanguageTypeFortran77
ISO Fortran 77.
@ eLanguageTypeKotlin
@ eLanguageTypeCobol85
ISO Cobol:1985.
@ eLanguageTypeUPC
Unified Parallel C.
@ eLanguageTypeC
Non-standardized C, such as K&R.
@ eLanguageTypeAda95
ISO Ada:1995.
@ eLanguageTypeCobol74
ISO Cobol:1974.
@ eLanguageTypePython
Python.
@ eLanguageTypeAda2005
@ eLanguageTypeOpenCL
OpenCL.
@ eLanguageTypeAssembly
@ eLanguageTypeD
D.
@ eLanguageTypeFortran90
ISO Fortran 90.
@ eLanguageTypeObjC
Objective-C.
@ eLanguageTypeC_plus_plus
ISO C++:1998.
@ eLanguageTypeLastStandardLanguage
@ eLanguageTypeDylan
Dylan.
@ eLanguageTypeFortran03
ISO Fortran 2003.
std::shared_ptr< lldb_private::TypeCategoryImpl > TypeCategoryImplSP
LanguageType type
Definition Language.cpp:229
const char * name
Definition Language.cpp:228
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
Definition Type.h:38
A type-erased pair of llvm::dwarf::SourceLanguageName and version.
lldb::LanguageType AsLanguageType() const
Definition Language.cpp:618
llvm::StringRef GetDescription() const
Definition Language.cpp:625