LLDB mainline
Language.h
Go to the documentation of this file.
1//===-- Language.h --------------------------------------------------------===//
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#ifndef LLDB_TARGET_LANGUAGE_H
10#define LLDB_TARGET_LANGUAGE_H
11
12#include <functional>
13#include <memory>
14#include <optional>
15#include <set>
16#include <string>
17#include <vector>
18
21#include "lldb/Core/Mangled.h"
27#include "lldb/lldb-private.h"
28#include "lldb/lldb-public.h"
29#include "llvm/ADT/StringRef.h"
30#include "llvm/Support/FormatVariadic.h"
31
32namespace lldb_private {
33
35public:
37
38 static llvm::StringRef GetSettingName();
39
41};
42
43class Language : public PluginInterface {
44public:
46 public:
47 class Result {
48 public:
49 virtual bool IsValid() = 0;
50
51 virtual bool DumpToStream(Stream &stream,
52 bool print_help_if_available) = 0;
53
54 virtual ~Result() = default;
55 };
56
57 typedef std::set<std::unique_ptr<Result>> ResultSet;
58
59 virtual ~TypeScavenger() = default;
60
61 size_t Find(ExecutionContextScope *exe_scope, const char *key,
62 ResultSet &results, bool append = true);
63
64 protected:
65 TypeScavenger() = default;
66
67 virtual bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
68 ResultSet &results) = 0;
69 };
70
73 public:
75
76 bool IsValid() override { return m_compiler_type.IsValid(); }
77
78 bool DumpToStream(Stream &stream, bool print_help_if_available) override {
79 if (IsValid()) {
80 m_compiler_type.DumpTypeDescription(&stream);
81 stream.EOL();
82 return true;
83 }
84 return false;
85 }
86
87 ~Result() override = default;
88
89 private:
91 };
92
93 protected:
95
96 ~ImageListTypeScavenger() override = default;
97
98 // is this type something we should accept? it's usually going to be a
99 // filter by language + maybe some sugar tweaking
100 // returning an empty type means rejecting this candidate entirely;
101 // any other result will be accepted as a valid match
103
104 bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
105 ResultSet &results) override;
106 };
107
108 template <typename... ScavengerTypes>
110 public:
112 for (std::shared_ptr<TypeScavenger> scavenger : { std::shared_ptr<TypeScavenger>(new ScavengerTypes())... }) {
113 if (scavenger)
114 m_scavengers.push_back(scavenger);
115 }
116 }
117 protected:
118 bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
119 ResultSet &results) override {
120 const bool append = false;
121 for (auto& scavenger : m_scavengers) {
122 if (scavenger && scavenger->Find(exe_scope, key, results, append))
123 return true;
124 }
125 return false;
126 }
127 private:
128 std::vector<std::shared_ptr<TypeScavenger>> m_scavengers;
129 };
130
131 template <typename... ScavengerTypes>
133 public:
135 for (std::shared_ptr<TypeScavenger> scavenger : { std::shared_ptr<TypeScavenger>(new ScavengerTypes())... }) {
136 if (scavenger)
137 m_scavengers.push_back(scavenger);
138 }
139 }
140 protected:
141 bool Find_Impl(ExecutionContextScope *exe_scope, const char *key,
142 ResultSet &results) override {
143 const bool append = true;
144 bool success = false;
145 for (auto& scavenger : m_scavengers) {
146 if (scavenger)
147 success = scavenger->Find(exe_scope, key, results, append) || success;
148 }
149 return success;
150 }
151 private:
152 std::vector<std::shared_ptr<TypeScavenger>> m_scavengers;
153 };
154
160
161 ~Language() override;
162
163 static Language *FindPlugin(lldb::LanguageType language);
164
165 /// Returns the Language associated with the given file path or a nullptr
166 /// if there is no known language.
167 static Language *FindPlugin(llvm::StringRef file_path);
168
169 static Language *FindPlugin(lldb::LanguageType language,
170 llvm::StringRef file_path);
171
172 /// Returns the Language that registered \p scheme with
173 /// Mangled::RegisterManglingScheme(), or a nullptr if none did.
175
176 static llvm::Expected<lldb::LanguageType>
177 GetExceptionLanguageForLanguage(llvm::StringRef lang_name);
178 // return false from callback to stop iterating
179 static void ForEach(llvm::function_ref<IterationAction(Language *)> callback);
180
181 /// Returns lldb_private::GetVersion(), followed by the GetVersionInfo() of
182 /// each registered language plugin, in language type order.
183 static std::string GetVersionWithLanguageInfo();
184
186
187 // Implement this function to return the user-defined entry point name
188 // for the language.
189 virtual llvm::StringRef GetUserEntryPointName() const { return {}; }
190
191 virtual bool IsTopLevelFunction(Function &function);
192
193 virtual bool IsSourceFile(llvm::StringRef file_path) const = 0;
194
196
198
200
203
204 virtual std::vector<FormattersMatchCandidate>
206 lldb::DynamicValueType use_dynamic);
207
208 virtual std::unique_ptr<TypeScavenger> GetTypeScavenger();
209
210 virtual const char *GetLanguageSpecificTypeLookupHelp();
211
213 std::string m_name;
214 lldb::FunctionNameType m_type;
215
216 public:
217 MethodNameVariant(std::string name, lldb::FunctionNameType type)
218 : m_name(std::move(name)), m_type(type) {}
219 llvm::StringRef GetName() const { return m_name; }
220 lldb::FunctionNameType GetType() const { return m_type; }
221 };
222 // If a language can have more than one possible name for a method, this
223 // function can be used to enumerate them. This is useful when doing name
224 // lookups.
225 virtual std::vector<Language::MethodNameVariant>
226 GetMethodNameVariants(llvm::StringRef method_name) const {
227 return std::vector<Language::MethodNameVariant>();
228 }
229
231 public:
233
234 MethodName(std::string full)
235 : m_full(std::move(full)), m_basename(), m_context(), m_arguments(),
237 m_parse_error(false) {}
238
239 virtual ~MethodName() {};
240
241 void Clear() {
242 m_full = {};
243 m_basename = llvm::StringRef();
244 m_context = llvm::StringRef();
245 m_arguments = llvm::StringRef();
246 m_qualifiers = llvm::StringRef();
247 m_return_type = llvm::StringRef();
248 m_scope_qualified.clear();
249 m_parsed = false;
250 m_parse_error = false;
251 }
252
253 bool IsValid() {
254 if (!m_parsed)
255 Parse();
256 if (m_parse_error)
257 return false;
258 return !m_full.empty();
259 }
260
261 const std::string &GetFullName() const { return m_full; }
262
263 llvm::StringRef GetBasename() {
264 if (!m_parsed)
265 Parse();
266 return m_basename;
267 }
268
269 llvm::StringRef GetContext() {
270 if (!m_parsed)
271 Parse();
272 return m_context;
273 }
274
275 llvm::StringRef GetArguments() {
276 if (!m_parsed)
277 Parse();
278 return m_arguments;
279 }
280
281 llvm::StringRef GetQualifiers() {
282 if (!m_parsed)
283 Parse();
284 return m_qualifiers;
285 }
286
287 llvm::StringRef GetReturnType() {
288 if (!m_parsed)
289 Parse();
290 return m_return_type;
291 }
292
293 std::string GetScopeQualifiedName() {
294 if (!m_parsed)
295 Parse();
296 return m_scope_qualified;
297 }
298
299 protected:
300 virtual void Parse() {
301 m_parsed = true;
302 m_parse_error = true;
303 }
304
305 std::string m_full; // Full name:
306 // "size_t lldb::SBTarget::GetBreakpointAtIndex(unsigned
307 // int) const"
308 llvm::StringRef m_basename; // Basename: "GetBreakpointAtIndex"
309 llvm::StringRef m_context; // Decl context: "lldb::SBTarget"
310 llvm::StringRef m_arguments; // Arguments: "(unsigned int)"
311 llvm::StringRef m_qualifiers; // Qualifiers: "const"
312 llvm::StringRef m_return_type; // Return type: "size_t"
313 std::string m_scope_qualified;
314 bool m_parsed = false;
315 bool m_parse_error = false;
316 };
317
318 virtual std::unique_ptr<Language::MethodName>
319 GetMethodName(llvm::StringRef name) const {
320 return std::make_unique<Language::MethodName>(name.str());
321 }
322
323 virtual std::pair<lldb::FunctionNameType, std::optional<ConstString>>
325 return std::pair{lldb::eFunctionNameTypeNone, std::nullopt};
326 };
327
328 /// Returns true iff the given symbol name is compatible with the mangling
329 /// scheme of this language.
330 ///
331 /// This function should only return true if there is a high confidence
332 /// that the name actually belongs to this language.
333 virtual bool SymbolNameFitsToLanguage(const Mangled &name) const {
334 return false;
335 }
336
337 /// How to demangle a name in DemangleSymbol().
339 /// Whether to compute the \c DemangledNameInfo too.
340 bool want_info = false;
341 };
342
343 /// A demangled name and, if requested, where its parts begin and end.
345 /// Empty if the name couldn't be demangled.
346 std::string name;
347 /// Only computed if DemangleOptions::want_info is true.
348 std::optional<DemangledNameInfo> info;
349 };
350
351 /// Demangle \p mangled, a name mangled with \p scheme, a scheme that this
352 /// language registered with Mangled::RegisterManglingScheme().
355 const DemangleOptions &options) const {
356 return {};
357 }
358
359 /// Parses mangled function names.
361 public:
362 virtual ~MangledNameParser() = default;
363
364 /// Parse a function name. Returns std::nullopt if \p mangled isn't a
365 /// function name that this parser understands.
366 virtual std::optional<Mangled::FunctionNameParts>
367 Parse(const Mangled &mangled) = 0;
368 };
369
370 /// Returns a parser for the names mangled with \p scheme, a scheme that this
371 /// language registered, or a nullptr if the symbol table should index them
372 /// by their demangled names.
373 virtual std::unique_ptr<MangledNameParser>
375 return nullptr;
376 }
377
378 /// An individual data formatter may apply to several types and cross language
379 /// boundaries. Each of those languages may want to customize the display of
380 /// values of said types by appending proper prefix/suffix information in
381 /// language-specific ways. This function returns that prefix and suffix.
382 ///
383 /// \param[in] type_hint
384 /// A StringRef used to determine what the prefix and suffix should be. It
385 /// is called a hint because some types may have multiple variants for which
386 /// the prefix and/or suffix may vary.
387 ///
388 /// \return
389 /// A std::pair<StringRef, StringRef>, the first being the prefix and the
390 /// second being the suffix. They may be empty.
391 virtual std::pair<llvm::StringRef, llvm::StringRef>
392 GetFormatterPrefixSuffix(llvm::StringRef type_hint);
393
394 // When looking up functions, we take a user provided string which may be a
395 // partial match to the full demangled name and compare it to the actual
396 // demangled name to see if it matches as much as the user specified. An
397 // example of this is if the user provided A::my_function, but the
398 // symbol was really B::A::my_function. We want that to be
399 // a match. But we wouldn't want this to match AnotherA::my_function. The
400 // user is specifying a truncated path, not a truncated set of characters.
401 // This function does a language-aware comparison for those purposes.
402 virtual bool DemangledNameContainsPath(llvm::StringRef path,
403 ConstString demangled) const;
404
405 // if a language has a custom format for printing variable declarations that
406 // it wants LLDB to honor it should return an appropriate closure here
408
409 virtual LazyBool IsLogicalTrue(ValueObject &valobj, Status &error);
410
411 // for a ValueObject of some "reference type", if the value points to the
412 // nil/null object, this method returns true
413 virtual bool IsNilReference(ValueObject &valobj);
414
415 /// Returns the summary string for ValueObjects for which IsNilReference() is
416 /// true.
417 virtual llvm::StringRef GetNilReferenceSummaryString() { return {}; }
418
419 // for a ValueObject of some "reference type", if the language provides a
420 // technique to decide whether the reference has ever been assigned to some
421 // object, this method will return true if such detection is possible, and if
422 // the reference has never been assigned
423 virtual bool IsUninitializedReference(ValueObject &valobj);
424
425 virtual bool GetFunctionDisplayName(const SymbolContext &sc,
426 const ExecutionContext *exe_ctx,
427 FunctionNameRepresentation representation,
428 Stream &s);
429
431 const ExecutionContext *exe_ctx,
433 Stream &s) {
434 return false;
435 }
436
437 virtual ConstString
439 if (ConstString demangled = mangled.GetDemangledName())
440 return demangled;
441
442 return mangled.GetMangledName();
443 }
444
446 return mangled.GetDemangledName();
447 }
448
449 virtual void GetExceptionResolverDescription(bool catch_on, bool throw_on,
450 Stream &s);
451
452 static void GetDefaultExceptionResolverDescription(bool catch_on,
453 bool throw_on, Stream &s);
454
455 // These are accessors for general information about the Languages lldb knows
456 // about:
457
458 static lldb::LanguageType
459 GetLanguageTypeFromString(const char *string) = delete;
460 static lldb::LanguageType GetLanguageTypeFromString(llvm::StringRef string);
461
462 /// Returns the internal LLDB name for the specified language. When presenting
463 /// the language name to users, use \ref GetDisplayNameForLanguageType
464 /// instead.
465 static const char *GetNameForLanguageType(lldb::LanguageType language);
466
467 /// Returns a user-friendly name for the specified language.
468 static llvm::StringRef
470
471 static void PrintAllLanguages(Stream &s, const char *prefix,
472 const char *suffix);
473
474 /// Prints to the specified stream 's' each language type that the
475 /// current target supports for expression evaluation.
476 ///
477 /// \param[out] s Stream to which the language types are written.
478 /// \param[in] prefix String that is prepended to the language type.
479 /// \param[in] suffix String that is appended to the language type.
481 llvm::StringRef prefix,
482 llvm::StringRef suffix);
483
484 // return false from callback to stop iterating
485 static void ForAllLanguages(
486 llvm::function_ref<IterationAction(lldb::LanguageType)> callback);
487
488 static bool LanguageIsCPlusPlus(lldb::LanguageType language);
489
490 static bool LanguageIsObjC(lldb::LanguageType language);
491
492 static bool LanguageIsC(lldb::LanguageType language);
493
494 /// Equivalent to \c LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
495 static bool LanguageIsCFamily(lldb::LanguageType language);
496
497 static bool LanguageIsFortran(lldb::LanguageType language);
498
499 static bool LanguageIsPascal(lldb::LanguageType language);
500
501 // return the primary language, so if LanguageIsC(l), return eLanguageTypeC,
502 // etc.
504
505 static std::set<lldb::LanguageType> GetSupportedLanguages();
506
510
512
513 // Given a mangled function name, calculates some alternative manglings since
514 // the compiler mangling may not line up with the symbol we are expecting.
515 virtual std::vector<ConstString>
517 return std::vector<ConstString>();
518 }
519
520 virtual ConstString
522 const SymbolContext &sym_ctx) const {
523 return ConstString();
524 }
525
526 virtual llvm::StringRef GetInstanceName() { return {}; }
527
528 /// Given a symbol context list of matches which supposedly represent the
529 /// same file and line number in a CU, erases those that should be ignored
530 /// when setting breakpoints by line (number or regex). Helpful for languages
531 /// that create split a single source-line into many functions (e.g. call
532 /// sites transformed by CoroSplitter).
533 virtual void
535
536 /// Returns a boolean indicating whether two symbol contexts are equal for the
537 /// purposes of frame comparison. If the plugin has no opinion, it should
538 /// return nullopt.
539 virtual std::optional<bool>
541 const SymbolContext &sc2) const {
542 return {};
543 }
544
545 virtual std::optional<bool> GetBooleanFromString(llvm::StringRef str) const;
546
547 /// Returns true if this Language supports exception breakpoints on throw via
548 /// a corresponding LanguageRuntime plugin.
549 virtual bool SupportsExceptionBreakpointsOnThrow() const { return false; }
550
551 /// Returns true if this Language supports exception breakpoints on catch via
552 /// a corresponding LanguageRuntime plugin.
553 virtual bool SupportsExceptionBreakpointsOnCatch() const { return false; }
554
555 /// Returns the keyword used for throw statements in this language, e.g.
556 /// Python uses \b raise. Defaults to \b throw.
557 virtual llvm::StringRef GetThrowKeyword() const { return "throw"; }
558
559 /// Returns the keyword used for catch statements in this language, e.g.
560 /// Python uses \b except. Defaults to \b catch.
561 virtual llvm::StringRef GetCatchKeyword() const { return "catch"; }
562
563 virtual FormatEntity::Entry GetFunctionNameFormat() const { return {}; }
564
565 /// Returns text to append to LLDB's version string, such as the
566 /// revisions of compilers embedded in this plugin.
567 virtual std::string GetVersionInfo() const { return {}; }
568
569protected:
570 // Classes that inherit from Language can see and modify these
571
573
574private:
575 Language(const Language &) = delete;
576 const Language &operator=(const Language &) = delete;
577};
578
579} // namespace lldb_private
580
581namespace llvm {
582template <> struct format_provider<lldb::LanguageType> {
583 static void format(const lldb::LanguageType &language, llvm::raw_ostream &OS,
584 llvm::StringRef Options);
585};
586} // namespace llvm
587
588#endif // LLDB_TARGET_LANGUAGE_H
static llvm::raw_ostream & error(Stream &strm)
Generic representation of a type in a programming language.
A uniqued constant string class.
Definition ConstString.h:40
std::function< bool(llvm::StringRef, llvm::StringRef, const DumpValueObjectOptions &, Stream &)> DeclPrintingHelper
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
A class that describes a function.
Definition Function.h:386
HardcodedFormatterFinders< SyntheticChildren > HardcodedSyntheticFinder
HardcodedFormatterFinders< TypeSummaryImpl > HardcodedSummaryFinder
HardcodedFormatterFinders< TypeFormatImpl > HardcodedFormatFinder
static llvm::StringRef GetSettingName()
Definition Language.cpp:50
bool GetEnableFilterForLineBreakpoints() const
Definition Language.cpp:60
bool Find_Impl(ExecutionContextScope *exe_scope, const char *key, ResultSet &results) override
Definition Language.h:118
std::vector< std::shared_ptr< TypeScavenger > > m_scavengers
Definition Language.h:128
bool DumpToStream(Stream &stream, bool print_help_if_available) override
Definition Language.h:78
virtual CompilerType AdjustForInclusion(CompilerType &candidate)=0
bool Find_Impl(ExecutionContextScope *exe_scope, const char *key, ResultSet &results) override
Definition Language.cpp:561
Parses mangled function names.
Definition Language.h:360
virtual std::optional< Mangled::FunctionNameParts > Parse(const Mangled &mangled)=0
Parse a function name.
lldb::FunctionNameType GetType() const
Definition Language.h:220
MethodNameVariant(std::string name, lldb::FunctionNameType type)
Definition Language.h:217
const std::string & GetFullName() const
Definition Language.h:261
llvm::StringRef GetQualifiers()
Definition Language.h:281
llvm::StringRef GetReturnType()
Definition Language.h:287
virtual bool DumpToStream(Stream &stream, bool print_help_if_available)=0
std::set< std::unique_ptr< Result > > ResultSet
Definition Language.h:57
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:542
std::vector< std::shared_ptr< TypeScavenger > > m_scavengers
Definition Language.h:152
bool Find_Impl(ExecutionContextScope *exe_scope, const char *key, ResultSet &results) override
Definition Language.h:141
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:359
static LanguageSet GetLanguagesSupportingREPLs()
Definition Language.cpp:532
static LanguageSet GetLanguagesSupportingTypeSystems()
Definition Language.cpp:524
virtual std::optional< bool > GetBooleanFromString(llvm::StringRef str) const
Definition Language.cpp:632
virtual ConstString GetDisplayDemangledName(Mangled mangled) const
Definition Language.h:445
static std::string GetVersionWithLanguageInfo()
Returns lldb_private::GetVersion(), followed by the GetVersionInfo() of each registered language plug...
Definition Language.cpp:185
virtual std::vector< FormattersMatchCandidate > GetPossibleFormattersMatches(ValueObject &valobj, lldb::DynamicValueType use_dynamic)
Definition Language.cpp:261
virtual bool HandleFrameFormatVariable(const SymbolContext &sc, const ExecutionContext *exe_ctx, FormatEntity::Entry::Type type, Stream &s)
Definition Language.h:430
virtual bool SupportsExceptionBreakpointsOnCatch() const
Returns true if this Language supports exception breakpoints on catch via a corresponding LanguageRun...
Definition Language.h:553
virtual DemangledName DemangleSymbol(ConstString mangled, Mangled::ManglingScheme scheme, const DemangleOptions &options) const
Demangle mangled, a name mangled with scheme, a scheme that this language registered with Mangled::Re...
Definition Language.h:353
virtual lldb::TypeCategoryImplSP GetFormatters()
Definition Language.cpp:245
virtual llvm::StringRef GetInstanceName()
Definition Language.h:526
static void ForEach(llvm::function_ref< IterationAction(Language *)> callback)
Definition Language.cpp:154
virtual std::unique_ptr< MangledNameParser > CreateMangledNameParser(Mangled::ManglingScheme scheme) const
Returns a parser for the names mangled with scheme, a scheme that this language registered,...
Definition Language.h:374
static void ForAllLanguages(llvm::function_ref< IterationAction(lldb::LanguageType)> callback)
Definition Language.cpp:377
static Language * FindPlugin(lldb::LanguageType language)
Definition Language.cpp:89
static const char * GetNameForLanguageType(lldb::LanguageType language)
Returns the internal LLDB name for the specified language.
Definition Language.cpp:348
virtual bool SymbolNameFitsToLanguage(const Mangled &name) const
Returns true iff the given symbol name is compatible with the mangling scheme of this language.
Definition Language.h:333
virtual void FilterForLineBreakpoints(llvm::SmallVectorImpl< SymbolContext > &) const
Given a symbol context list of matches which supposedly represent the same file and line number in a ...
Definition Language.h:534
virtual DumpValueObjectOptions::DeclPrintingHelper GetDeclPrintingHelper()
Definition Language.cpp:601
virtual std::unique_ptr< Language::MethodName > GetMethodName(llvm::StringRef name) const
Definition Language.h:319
static LanguageProperties & GetGlobalLanguageProperties()
Definition Language.cpp:45
virtual LazyBool IsLogicalTrue(ValueObject &valobj, Status &error)
Definition Language.cpp:605
virtual ConstString GetDemangledFunctionNameWithoutArguments(Mangled mangled) const
Definition Language.h:438
virtual const char * GetLanguageSpecificTypeLookupHelp()
Definition Language.cpp:540
virtual bool GetFunctionDisplayName(const SymbolContext &sc, const ExecutionContext *exe_ctx, FunctionNameRepresentation representation, Stream &s)
Definition Language.cpp:613
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:589
virtual llvm::StringRef GetCatchKeyword() const
Returns the keyword used for catch statements in this language, e.g.
Definition Language.h:561
virtual std::string GetVersionInfo() const
Returns text to append to LLDB's version string, such as the revisions of compilers embedded in this ...
Definition Language.h:567
virtual llvm::StringRef GetThrowKeyword() const
Returns the keyword used for throw statements in this language, e.g.
Definition Language.h:557
static bool LanguageIsC(lldb::LanguageType language)
Definition Language.cpp:410
virtual lldb::LanguageType GetLanguageType() const =0
virtual HardcodedFormatters::HardcodedSummaryFinder GetHardcodedSummaries()
Definition Language.cpp:251
static void GetDefaultExceptionResolverDescription(bool catch_on, bool throw_on, Stream &s)
Definition Language.cpp:625
virtual std::pair< lldb::FunctionNameType, std::optional< ConstString > > GetFunctionNameInfo(ConstString name) const
Definition Language.h:324
virtual bool SupportsExceptionBreakpointsOnThrow() const
Returns true if this Language supports exception breakpoints on throw via a corresponding LanguageRun...
Definition Language.h:549
virtual std::optional< bool > AreEqualForFrameComparison(const SymbolContext &sc1, const SymbolContext &sc2) const
Returns a boolean indicating whether two symbol contexts are equal for the purposes of frame comparis...
Definition Language.h:540
virtual std::vector< Language::MethodNameVariant > GetMethodNameVariants(llvm::StringRef method_name) const
Definition Language.h:226
virtual bool DemangledNameContainsPath(llvm::StringRef path, ConstString demangled) const
Definition Language.cpp:593
virtual std::vector< ConstString > GenerateAlternateFunctionManglings(const ConstString mangled) const
Definition Language.h:516
static bool LanguageIsCPlusPlus(lldb::LanguageType language)
Definition Language.cpp:385
static llvm::StringRef GetDisplayNameForLanguageType(lldb::LanguageType language)
Returns a user-friendly name for the specified language.
Definition Language.cpp:355
static Language * FindPluginForManglingScheme(Mangled::ManglingScheme scheme)
Returns the Language that registered scheme with Mangled::RegisterManglingScheme(),...
Definition Language.cpp:133
static lldb::LanguageType GetPrimaryLanguage(lldb::LanguageType language)
Definition Language.cpp:465
const Language & operator=(const Language &)=delete
virtual ConstString FindBestAlternateFunctionMangledName(const Mangled mangled, const SymbolContext &sym_ctx) const
Definition Language.h:521
static bool LanguageIsPascal(lldb::LanguageType language)
Definition Language.cpp:456
virtual bool IsNilReference(ValueObject &valobj)
Definition Language.cpp:609
virtual bool IsUninitializedReference(ValueObject &valobj)
Definition Language.cpp:611
virtual FormatEntity::Entry GetFunctionNameFormat() const
Definition Language.h:563
virtual llvm::StringRef GetNilReferenceSummaryString()
Returns the summary string for ValueObjects for which IsNilReference() is true.
Definition Language.h:417
static void PrintAllLanguages(Stream &s, const char *prefix, const char *suffix)
Definition Language.cpp:370
static llvm::Expected< lldb::LanguageType > GetExceptionLanguageForLanguage(llvm::StringRef lang_name)
Definition Language.cpp:202
virtual HardcodedFormatters::HardcodedSyntheticFinder GetHardcodedSynthetics()
Definition Language.cpp:256
virtual std::unique_ptr< TypeScavenger > GetTypeScavenger()
Definition Language.cpp:536
static bool LanguageIsFortran(lldb::LanguageType language)
Definition Language.cpp:442
static LanguageSet GetLanguagesSupportingTypeSystemsForExpressions()
Definition Language.cpp:528
virtual llvm::StringRef GetUserEntryPointName() const
Definition Language.h:189
virtual bool IsTopLevelFunction(Function &function)
Definition Language.cpp:243
virtual void GetExceptionResolverDescription(bool catch_on, bool throw_on, Stream &s)
Definition Language.cpp:620
static lldb::LanguageType GetLanguageTypeFromString(const char *string)=delete
Language(const Language &)=delete
static bool LanguageIsCFamily(lldb::LanguageType language)
Equivalent to LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
Definition Language.cpp:422
static std::set< lldb::LanguageType > GetSupportedLanguages()
Definition Language.cpp:515
virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats()
Definition Language.cpp:247
static bool LanguageIsObjC(lldb::LanguageType language)
Definition Language.cpp:400
A class that handles mangled names.
Definition Mangled.h:36
ConstString GetMangledName() const
Mangled name get accessor.
Definition Mangled.h:169
ConstString GetDemangledName() const
Demangled name get accessor.
Definition Mangled.cpp:238
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 EOL()
Output and End of Line character to the stream.
Definition Stream.cpp:155
Defines a symbol context baton that can be handed other debug core functions.
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.
LanguageType
Programming language type.
std::shared_ptr< lldb_private::TypeCategoryImpl > TypeCategoryImplSP
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
How to demangle a name in DemangleSymbol().
Definition Language.h:338
bool want_info
Whether to compute the DemangledNameInfo too.
Definition Language.h:340
A demangled name and, if requested, where its parts begin and end.
Definition Language.h:344
std::optional< DemangledNameInfo > info
Only computed if DemangleOptions::want_info is true.
Definition Language.h:348
std::string name
Empty if the name couldn't be demangled.
Definition Language.h:346
static void format(const lldb::LanguageType &language, llvm::raw_ostream &OS, llvm::StringRef Options)
Definition Language.cpp:692