Construct the mangle context upon each call. It is cheap to construct. And makes the call independent and static-ready :)
This commit is contained in:
parent
846aac852c
commit
f1e156daa4
@ -37,7 +37,6 @@ namespace clang {
|
||||
class DeclContext;
|
||||
class FunctionDecl;
|
||||
class NamedDecl;
|
||||
class MangleContext;
|
||||
class Parser;
|
||||
class QualType;
|
||||
class Sema;
|
||||
@ -138,10 +137,6 @@ namespace cling {
|
||||
///
|
||||
llvm::OwningPtr<LookupHelper> m_LookupHelper;
|
||||
|
||||
///\brief Helper object for mangling names.
|
||||
///
|
||||
mutable llvm::OwningPtr<clang::MangleContext> m_MangleCtx;
|
||||
|
||||
///\brief Counter used when we need unique names.
|
||||
///
|
||||
unsigned long long m_UniqueCounter;
|
||||
|
@ -851,30 +851,29 @@ namespace cling {
|
||||
///
|
||||
///D - mangle this decl's name
|
||||
///mangledName - put the mangled name in here
|
||||
if (!m_MangleCtx) {
|
||||
m_MangleCtx.reset(getCI()->getASTContext().createMangleContext());
|
||||
}
|
||||
if (m_MangleCtx->shouldMangleDeclName(D)) {
|
||||
llvm::OwningPtr<MangleContext> mangleCtx;
|
||||
mangleCtx.reset(D->getASTContext().createMangleContext());
|
||||
if (mangleCtx->shouldMangleDeclName(D)) {
|
||||
llvm::raw_string_ostream RawStr(mangledName);
|
||||
switch(D->getKind()) {
|
||||
case Decl::CXXConstructor:
|
||||
//Ctor_Complete, // Complete object ctor
|
||||
//Ctor_Base, // Base object ctor
|
||||
//Ctor_CompleteAllocating // Complete object allocating ctor (unused)
|
||||
m_MangleCtx->mangleCXXCtor(cast<CXXConstructorDecl>(D),
|
||||
Ctor_Complete, RawStr);
|
||||
mangleCtx->mangleCXXCtor(cast<CXXConstructorDecl>(D),
|
||||
Ctor_Complete, RawStr);
|
||||
break;
|
||||
|
||||
case Decl::CXXDestructor:
|
||||
//Dtor_Deleting, // Deleting dtor
|
||||
//Dtor_Complete, // Complete object dtor
|
||||
//Dtor_Base // Base object dtor
|
||||
m_MangleCtx->mangleCXXDtor(cast<CXXDestructorDecl>(D),
|
||||
Dtor_Complete, RawStr);
|
||||
mangleCtx->mangleCXXDtor(cast<CXXDestructorDecl>(D),
|
||||
Dtor_Complete, RawStr);
|
||||
break;
|
||||
|
||||
default :
|
||||
m_MangleCtx->mangleName(D, RawStr);
|
||||
mangleCtx->mangleName(D, RawStr);
|
||||
break;
|
||||
}
|
||||
RawStr.flush();
|
||||
|
Loading…
x
Reference in New Issue
Block a user