LLDB mainline
lldb_private::CPlusPlusLanguage Class Reference

#include <CPlusPlusLanguage.h>

Inheritance diagram for lldb_private::CPlusPlusLanguage:
[legend]

Classes

class  CxxMethodName

Public Member Functions

 CPlusPlusLanguage ()=default
 ~CPlusPlusLanguage () override=default
virtual std::unique_ptr< Language::MethodNameGetMethodName (ConstString name) const override
std::pair< lldb::FunctionNameType, std::optional< ConstString > > GetFunctionNameInfo (ConstString name) const override
lldb::LanguageType GetLanguageType () const override
llvm::StringRef GetUserEntryPointName () const override
std::unique_ptr< TypeScavengerGetTypeScavenger () override
lldb::TypeCategoryImplSP GetFormatters () override
HardcodedFormatters::HardcodedSummaryFinder GetHardcodedSummaries () override
HardcodedFormatters::HardcodedSyntheticFinder GetHardcodedSynthetics () override
bool IsNilReference (ValueObject &valobj) override
llvm::StringRef GetNilReferenceSummaryString () override
 Returns the summary string for ValueObjects for which IsNilReference() is true.
bool IsSourceFile (llvm::StringRef file_path) const override
const HighlighterGetHighlighter () const override
bool SymbolNameFitsToLanguage (Mangled mangled) const override
 Returns true iff the given symbol name is compatible with the mangling scheme of this language.
bool DemangledNameContainsPath (llvm::StringRef path, ConstString demangled) const override
ConstString GetDemangledFunctionNameWithoutArguments (Mangled mangled) const override
bool GetFunctionDisplayName (const SymbolContext &sc, const ExecutionContext *exe_ctx, FunctionNameRepresentation representation, Stream &s) override
bool HandleFrameFormatVariable (const SymbolContext &sc, const ExecutionContext *exe_ctx, FormatEntity::Entry::Type type, Stream &s) override
std::vector< ConstStringGenerateAlternateFunctionManglings (const ConstString mangled) const override
ConstString FindBestAlternateFunctionMangledName (const Mangled mangled, const SymbolContext &sym_ctx) const override
llvm::StringRef GetInstanceVariableName () override
FormatEntity::Entry GetFunctionNameFormat () const override
llvm::StringRef GetPluginName () override
Public Member Functions inherited from lldb_private::Language
 ~Language () override
virtual bool IsTopLevelFunction (Function &function)
virtual HardcodedFormatters::HardcodedFormatFinder GetHardcodedFormats ()
virtual std::vector< FormattersMatchCandidateGetPossibleFormattersMatches (ValueObject &valobj, lldb::DynamicValueType use_dynamic)
virtual const char * GetLanguageSpecificTypeLookupHelp ()
virtual std::vector< Language::MethodNameVariantGetMethodNameVariants (ConstString method_name) const
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.
virtual DumpValueObjectOptions::DeclPrintingHelper GetDeclPrintingHelper ()
virtual LazyBool IsLogicalTrue (ValueObject &valobj, Status &error)
virtual bool IsUninitializedReference (ValueObject &valobj)
virtual bool HandleFrameFormatVariable (const SymbolContext &sc, const ExecutionContext *exe_ctx, FormatEntity::Entry::Type type, Stream &s)
virtual ConstString GetDisplayDemangledName (Mangled mangled) const
virtual void GetExceptionResolverDescription (bool catch_on, bool throw_on, Stream &s)
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 CU, erases those that should be ignored when setting breakpoints by line (number or regex).
virtual std::optional< boolAreEqualForFrameComparison (const SymbolContext &sc1, const SymbolContext &sc2) const
 Returns a boolean indicating whether two symbol contexts are equal for the purposes of frame comparison.
virtual std::optional< boolGetBooleanFromString (llvm::StringRef str) const
virtual bool SupportsExceptionBreakpointsOnThrow () const
 Returns true if this Language supports exception breakpoints on throw via a corresponding LanguageRuntime plugin.
virtual bool SupportsExceptionBreakpointsOnCatch () const
 Returns true if this Language supports exception breakpoints on catch via a corresponding LanguageRuntime plugin.
virtual llvm::StringRef GetThrowKeyword () const
 Returns the keyword used for throw statements in this language, e.g.
virtual llvm::StringRef GetCatchKeyword () const
 Returns the keyword used for catch statements in this language, e.g.
Public Member Functions inherited from lldb_private::PluginInterface
 PluginInterface ()=default
virtual ~PluginInterface ()=default
 PluginInterface (const PluginInterface &)=delete
PluginInterfaceoperator= (const PluginInterface &)=delete

Static Public Member Functions

static void Initialize ()
static void Terminate ()
static lldb_private::LanguageCreateInstance (lldb::LanguageType language)
static llvm::StringRef GetPluginNameStatic ()
static bool IsCPPMangledName (llvm::StringRef name)
static llvm::StringRef GetDemangledBasename (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledTemplateArguments (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledReturnTypeLHS (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledFunctionQualifiers (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledScope (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledReturnTypeRHS (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledFunctionArguments (llvm::StringRef demangled, const DemangledNameInfo &info)
static llvm::Expected< llvm::StringRef > GetDemangledFunctionSuffix (llvm::StringRef demangled, const DemangledNameInfo &info)
static bool ExtractContextAndIdentifier (const char *name, llvm::StringRef &context, llvm::StringRef &identifier)
static llvm::Expected< ConstStringSubstituteType_ItaniumMangle (llvm::StringRef mangled_name, llvm::StringRef subst_from, llvm::StringRef subst_to)
 Substitutes Itanium type encoding substrings given by subst_from in mangled_name with subst_to.
static llvm::Expected< ConstStringSubstituteStructor_ItaniumMangle (llvm::StringRef mangled_name, llvm::StringRef subst_from, llvm::StringRef subst_to)
 Substitutes Itanium structor encoding substrings given by subst_from in mangled_name with subst_to.
static llvm::Expected< ConstStringSubstituteStructorAliases_ItaniumMangle (llvm::StringRef mangled_name)
 Tries replacing Itanium structor encoding substrings in mangled_name with potential aliases.j.
Static Public Member Functions inherited from lldb_private::Language
static LanguageFindPlugin (lldb::LanguageType language)
static LanguageFindPlugin (llvm::StringRef file_path)
 Returns the Language associated with the given file path or a nullptr if there is no known language.
static LanguageFindPlugin (lldb::LanguageType language, llvm::StringRef file_path)
static void ForEach (std::function< bool(Language *)> callback)
static void GetDefaultExceptionResolverDescription (bool catch_on, bool throw_on, Stream &s)
static lldb::LanguageType GetLanguageTypeFromString (const char *string)=delete
static lldb::LanguageType GetLanguageTypeFromString (llvm::StringRef string)
static const char * GetNameForLanguageType (lldb::LanguageType language)
static void PrintAllLanguages (Stream &s, const char *prefix, const char *suffix)
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 evaluation.
static void ForAllLanguages (std::function< bool(lldb::LanguageType)> callback)
static bool LanguageIsCPlusPlus (lldb::LanguageType language)
static bool LanguageIsObjC (lldb::LanguageType language)
static bool LanguageIsC (lldb::LanguageType language)
static bool LanguageIsCFamily (lldb::LanguageType language)
 Equivalent to LanguageIsC||LanguageIsObjC||LanguageIsCPlusPlus.
static bool LanguageIsPascal (lldb::LanguageType language)
static lldb::LanguageType GetPrimaryLanguage (lldb::LanguageType language)
static std::set< lldb::LanguageTypeGetSupportedLanguages ()
static LanguageSet GetLanguagesSupportingTypeSystems ()
static LanguageSet GetLanguagesSupportingTypeSystemsForExpressions ()
static LanguageSet GetLanguagesSupportingREPLs ()
static LanguagePropertiesGetGlobalLanguageProperties ()

Static Private Member Functions

static void DebuggerInitialize (Debugger &)

Private Attributes

ClangHighlighter m_highlighter

Additional Inherited Members

Public Types inherited from lldb_private::Language
enum class  FunctionNameRepresentation { eName , eNameWithArgs , eNameWithNoArgs }
Protected Member Functions inherited from lldb_private::Language
 Language ()

Detailed Description

Definition at line 24 of file CPlusPlusLanguage.h.

Constructor & Destructor Documentation

◆ CPlusPlusLanguage()

lldb_private::CPlusPlusLanguage::CPlusPlusLanguage ( )
default

Referenced by CreateInstance(), and Initialize().

◆ ~CPlusPlusLanguage()

lldb_private::CPlusPlusLanguage::~CPlusPlusLanguage ( )
overridedefault

Member Function Documentation

◆ CreateInstance()

◆ DebuggerInitialize()

void CPlusPlusLanguage::DebuggerInitialize ( Debugger & debugger)
staticprivate

◆ DemangledNameContainsPath()

bool CPlusPlusLanguage::DemangledNameContainsPath ( llvm::StringRef path,
ConstString demangled ) const
overridevirtual

◆ ExtractContextAndIdentifier()

◆ FindBestAlternateFunctionMangledName()

◆ GenerateAlternateFunctionManglings()

std::vector< ConstString > CPlusPlusLanguage::GenerateAlternateFunctionManglings ( const ConstString mangled) const
overridevirtual

Get a basic set of alternative manglings for the given symbol name, by making a few basic possible substitutions on basic types, storage duration and constness for the given symbol. The output parameter alternates is filled with a best-guess, non-exhaustive set of different manglings for the given name.

Reimplemented from lldb_private::Language.

Definition at line 609 of file CPlusPlusLanguage.cpp.

References lldb_private::ConstString::GetCString(), lldb_private::GetLog(), lldb_private::ConstString::GetStringRef(), lldb_private::Language, LLDB_LOG_ERROR, SubstituteStructorAliases_ItaniumMangle(), and SubstituteType_ItaniumMangle().

◆ GetDemangledBasename()

llvm::StringRef CPlusPlusLanguage::GetDemangledBasename ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledFunctionArguments()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledFunctionArguments ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledFunctionNameWithoutArguments()

◆ GetDemangledFunctionQualifiers()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledFunctionQualifiers ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledFunctionSuffix()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledFunctionSuffix ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledReturnTypeLHS()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledReturnTypeLHS ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledReturnTypeRHS()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledReturnTypeRHS ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledScope()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledScope ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetDemangledTemplateArguments()

llvm::Expected< llvm::StringRef > CPlusPlusLanguage::GetDemangledTemplateArguments ( llvm::StringRef demangled,
const DemangledNameInfo & info )
static

◆ GetFormatters()

◆ GetFunctionDisplayName()

◆ GetFunctionNameFormat()

FormatEntity::Entry CPlusPlusLanguage::GetFunctionNameFormat ( ) const
overridevirtual

Reimplemented from lldb_private::Language.

Definition at line 2516 of file CPlusPlusLanguage.cpp.

References GetGlobalPluginProperties().

◆ GetFunctionNameInfo()

std::pair< FunctionNameType, std::optional< ConstString > > CPlusPlusLanguage::GetFunctionNameInfo ( ConstString name) const
overridevirtual

◆ GetHardcodedSummaries()

◆ GetHardcodedSynthetics()

◆ GetHighlighter()

const Highlighter * lldb_private::CPlusPlusLanguage::GetHighlighter ( ) const
inlineoverridevirtual

Reimplemented from lldb_private::Language.

Definition at line 84 of file CPlusPlusLanguage.h.

References m_highlighter.

◆ GetInstanceVariableName()

llvm::StringRef lldb_private::CPlusPlusLanguage::GetInstanceVariableName ( )
inlineoverridevirtual

Reimplemented from lldb_private::Language.

Definition at line 237 of file CPlusPlusLanguage.h.

◆ GetLanguageType()

lldb::LanguageType lldb_private::CPlusPlusLanguage::GetLanguageType ( ) const
inlineoverridevirtual

Implements lldb_private::Language.

Definition at line 64 of file CPlusPlusLanguage.h.

References lldb::eLanguageTypeC_plus_plus.

◆ GetMethodName()

std::unique_ptr< Language::MethodName > CPlusPlusLanguage::GetMethodName ( ConstString name) const
overridevirtual

Reimplemented from lldb_private::Language.

Definition at line 69 of file CPlusPlusLanguage.cpp.

◆ GetNilReferenceSummaryString()

llvm::StringRef lldb_private::CPlusPlusLanguage::GetNilReferenceSummaryString ( )
inlineoverridevirtual

Returns the summary string for ValueObjects for which IsNilReference() is true.

Reimplemented from lldb_private::Language.

Definition at line 80 of file CPlusPlusLanguage.h.

◆ GetPluginName()

llvm::StringRef lldb_private::CPlusPlusLanguage::GetPluginName ( )
inlineoverridevirtual

Implements lldb_private::PluginInterface.

Definition at line 242 of file CPlusPlusLanguage.h.

References GetPluginNameStatic().

Referenced by GetFormatters().

◆ GetPluginNameStatic()

llvm::StringRef lldb_private::CPlusPlusLanguage::GetPluginNameStatic ( )
inlinestatic

Definition at line 93 of file CPlusPlusLanguage.h.

Referenced by GetPluginName(), and Initialize().

◆ GetTypeScavenger()

◆ GetUserEntryPointName()

llvm::StringRef lldb_private::CPlusPlusLanguage::GetUserEntryPointName ( ) const
inlineoverridevirtual

Reimplemented from lldb_private::Language.

Definition at line 68 of file CPlusPlusLanguage.h.

◆ HandleFrameFormatVariable()

◆ Initialize()

void CPlusPlusLanguage::Initialize ( )
static

◆ IsCPPMangledName()

bool lldb_private::CPlusPlusLanguage::IsCPPMangledName ( llvm::StringRef name)
static

◆ IsNilReference()

◆ IsSourceFile()

bool CPlusPlusLanguage::IsSourceFile ( llvm::StringRef file_path) const
overridevirtual

Implements lldb_private::Language.

Definition at line 2126 of file CPlusPlusLanguage.cpp.

◆ SubstituteStructor_ItaniumMangle()

llvm::Expected< ConstString > CPlusPlusLanguage::SubstituteStructor_ItaniumMangle ( llvm::StringRef mangled_name,
llvm::StringRef subst_from,
llvm::StringRef subst_to )
static

Substitutes Itanium structor encoding substrings given by subst_from in mangled_name with subst_to.

This function will only replace Itanium structor encodings (i.e., <ctor-dtor-name> productions in the Itanium ABI mangling grammar). However, no verifiction is done on whether subst_from or subst_to is a valid structor encoding.

Parameters
[in]mangled_nameMangled name to perform the substitutions in. This function only supports Itanium ABI mangling.
[in]subst_fromThe substring to substitute.
[in]subst_toThe substring to insert.
Returns
The mangled string with substitutions. If no substitutions have been made, returns an empty ConstString (even if the string already contained the substitutions). If an error occurred, this function returns the error.

Definition at line 2474 of file CPlusPlusLanguage.cpp.

Referenced by lldb_private::plugin::dwarf::SymbolFileDWARF::ResolveFunctionCallLabel().

◆ SubstituteStructorAliases_ItaniumMangle()

llvm::Expected< ConstString > CPlusPlusLanguage::SubstituteStructorAliases_ItaniumMangle ( llvm::StringRef mangled_name)
static

Tries replacing Itanium structor encoding substrings in mangled_name with potential aliases.j.

This function will only replace Itanium structor encodings (i.e., <ctor-dtor-name> productions in the Itanium ABI mangling grammar).

E.g., on some platforms, the C1/D1 variants are aliased to the C2/D2 variants. This function will try to replace occurrences of C1/D1 with C2/D2.

Parameters
[in]mangled_nameMangled name to perform the substitutions in. This function only supports Itanium ABI mangling.
Returns
The mangled string with substitutions. If no substitutions have been made, returns an empty ConstString (even if the string already contained the substitutions). If an error occurred, this function returns the error.

Definition at line 2481 of file CPlusPlusLanguage.cpp.

Referenced by lldb_private::plugin::dwarf::SymbolFileDWARF::FindFunctionDefinition(), and GenerateAlternateFunctionManglings().

◆ SubstituteType_ItaniumMangle()

llvm::Expected< ConstString > CPlusPlusLanguage::SubstituteType_ItaniumMangle ( llvm::StringRef mangled_name,
llvm::StringRef subst_from,
llvm::StringRef subst_to )
static

Substitutes Itanium type encoding substrings given by subst_from in mangled_name with subst_to.

This function will only replace Itanium type encodings (i.e., <type> productions in the Itanium ABI mangling grammar). However, no verifiction is done on whether subst_from or subst_to is a valid type encoding.

Parameters
[in]mangled_nameMangled name to perform the substitutions in. This function only supports Itanium ABI mangling.
[in]subst_fromThe substring to substitute.
[in]subst_toThe substring to insert.
Returns
The mangled string with substitutions. If no substitutions have been made, returns an empty ConstString (even if the string already contained the substitutions). If an error occurred, this function returns the error.

Definition at line 2468 of file CPlusPlusLanguage.cpp.

Referenced by GenerateAlternateFunctionManglings().

◆ SymbolNameFitsToLanguage()

bool CPlusPlusLanguage::SymbolNameFitsToLanguage ( Mangled name) const
overridevirtual

Returns true iff the given symbol name is compatible with the mangling scheme of this language.

This function should only return true if there is a high confidence that the name actually belongs to this language.

Reimplemented from lldb_private::Language.

Definition at line 106 of file CPlusPlusLanguage.cpp.

References lldb_private::Mangled::eManglingSchemeItanium, lldb_private::Mangled::eManglingSchemeMSVC, lldb_private::ConstString::GetCString(), lldb_private::Mangled::GetMangledName(), and lldb_private::Mangled::GetManglingScheme().

◆ Terminate()

void CPlusPlusLanguage::Terminate ( )
static

Member Data Documentation

◆ m_highlighter

ClangHighlighter lldb_private::CPlusPlusLanguage::m_highlighter
private

Definition at line 25 of file CPlusPlusLanguage.h.

Referenced by GetHighlighter().


The documentation for this class was generated from the following files: