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:
Vassil Vassilev 2013-10-22 16:44:05 -05:00 committed by sftnight
parent 846aac852c
commit f1e156daa4
2 changed files with 8 additions and 14 deletions

View File

@ -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;

View File

@ -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();