LLDB mainline
Mangled.cpp File Reference
#include "lldb/Core/Mangled.h"
#include "lldb/Core/DataFileCache.h"
#include "lldb/Core/DemangledNameInfo.h"
#include "lldb/Target/Language.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/DataEncoder.h"
#include "lldb/Utility/RegularExpression.h"
#include "lldb/Utility/Stream.h"
#include "lldb/lldb-enumerations.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include <mutex>
#include <optional>
#include <vector>

Go to the source code of this file.

Enumerations

enum  MangledEncoding { Empty = 0u , DemangledOnly = 1u , MangledOnly = 2u , MangledAndDemangled = 3u }

Functions

static ManglingSchemeRegistry & GetManglingSchemeRegistry ()
static Mangled::ManglingScheme SchemeForIndex (size_t index)
static bool OverlapsActiveScheme (llvm::ArrayRef< llvm::StringRef > prefixes, llvm::ArrayRef< RegisteredManglingScheme > schemes)
 Returns true if a name could start with both one of prefixes and a prefix of one of the active schemes.
Stream & operator<< (Stream &s, const Mangled &obj)

Enumeration Type Documentation

◆ MangledEncoding

Enumerator
Empty 

If the Mangled object has neither a mangled name or demangled name we can encode the object with one zero byte using the Empty enumeration.

DemangledOnly 

If the Mangled object has only a demangled name and no mangled named, we can encode only the demangled name.

MangledOnly 

If the mangle name can calculate the demangled name (it is the mangled/demangled counterpart), then we only need to encode the mangled name as the demangled name can be recomputed.

MangledAndDemangled 

If we have a Mangled object with two different names that are not related then we need to save both strings.

This can happen if we have a name that isn't a true mangled name, but we want to be able to lookup a symbol by name and type in the symbol table. We do this for Objective C symbols like "OBJC_CLASS_$_NSValue" where the mangled named will be set to "OBJC_CLASS_$_NSValue" and the demangled name will be manually set to "NSValue". If we tried to demangled the name "OBJC_CLASS_$_NSValue" it would fail, but in these cases we want these unrelated names to be preserved.

Definition at line 381 of file Mangled.cpp.

Function Documentation

◆ GetManglingSchemeRegistry()

◆ operator<<()

Stream & operator<< ( Stream & s,
const Mangled & obj )

◆ OverlapsActiveScheme()

bool OverlapsActiveScheme ( llvm::ArrayRef< llvm::StringRef > prefixes,
llvm::ArrayRef< RegisteredManglingScheme > schemes )
static

Returns true if a name could start with both one of prefixes and a prefix of one of the active schemes.

Definition at line 78 of file Mangled.cpp.

◆ SchemeForIndex()

Mangled::ManglingScheme SchemeForIndex ( size_t index)
static

Definition at line 70 of file Mangled.cpp.

References lldb_private::Mangled::eFirstRegisteredManglingScheme.