[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
This revision was automatically updated to reflect the committed changes. Closed by commit rL363908: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC). (authored by zer0, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D63584?vs=205729=205739#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63584/new/ https://reviews.llvm.org/D63584 Files: cfe/trunk/include/clang/AST/Mangle.h cfe/trunk/lib/AST/Mangle.cpp Index: cfe/trunk/include/clang/AST/Mangle.h === --- cfe/trunk/include/clang/AST/Mangle.h +++ cfe/trunk/include/clang/AST/Mangle.h @@ -17,7 +17,6 @@ #include "clang/AST/Type.h" #include "clang/Basic/ABI.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/IR/DataLayout.h" #include "llvm/Support/Casting.h" namespace llvm { @@ -246,21 +245,16 @@ }; class ASTNameGenerator { - std::unique_ptr MC; - llvm::DataLayout DL; - public: explicit ASTNameGenerator(ASTContext ); + ~ASTNameGenerator(); bool writeName(const Decl *D, raw_ostream ); std::string getName(const Decl *D); std::vector getAllManglings(const Decl *D); private: - std::vector getAllManglings(const ObjCContainerDecl *OCD); - bool writeFuncOrVarName(const NamedDecl *D, raw_ostream ); - void writeObjCClassName(const ObjCInterfaceDecl *D, raw_ostream ); - std::string getMangledStructor(const NamedDecl *ND, unsigned StructorType); - std::string getMangledThunk(const CXXMethodDecl *MD, const ThunkInfo ); + class Implementation; + std::unique_ptr Impl; }; } Index: cfe/trunk/lib/AST/Mangle.cpp === --- cfe/trunk/lib/AST/Mangle.cpp +++ cfe/trunk/lib/AST/Mangle.cpp @@ -22,6 +22,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/IR/DataLayout.h" #include "llvm/IR/Mangler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" @@ -283,183 +284,204 @@ Out << OS.str().size() << OS.str(); } -ASTNameGenerator::ASTNameGenerator(ASTContext ) -: MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) {} - -bool ASTNameGenerator::writeName(const Decl *D, raw_ostream ) { - // First apply frontend mangling. - SmallString<128> FrontendBuf; - llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); - if (auto *FD = dyn_cast(D)) { -if (FD->isDependentContext()) +class ASTNameGenerator::Implementation { + std::unique_ptr MC; + llvm::DataLayout DL; + +public: + explicit Implementation(ASTContext ) + : MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) { + } + + bool writeName(const Decl *D, raw_ostream ) { +// First apply frontend mangling. +SmallString<128> FrontendBuf; +llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); +if (auto *FD = dyn_cast(D)) { + if (FD->isDependentContext()) +return true; + if (writeFuncOrVarName(FD, FrontendBufOS)) +return true; +} else if (auto *VD = dyn_cast(D)) { + if (writeFuncOrVarName(VD, FrontendBufOS)) +return true; +} else if (auto *MD = dyn_cast(D)) { + MC->mangleObjCMethodNameWithoutSize(MD, OS); + return false; +} else if (auto *ID = dyn_cast(D)) { + writeObjCClassName(ID, FrontendBufOS); +} else { return true; -if (writeFuncOrVarName(FD, FrontendBufOS)) - return true; - } else if (auto *VD = dyn_cast(D)) { -if (writeFuncOrVarName(VD, FrontendBufOS)) - return true; - } else if (auto *MD = dyn_cast(D)) { -MC->mangleObjCMethodNameWithoutSize(MD, OS); +} + +// Now apply backend mangling. +llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); return false; - } else if (auto *ID = dyn_cast(D)) { -writeObjCClassName(ID, FrontendBufOS); - } else { -return true; } - // Now apply backend mangling. - llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); - return false; -} - -std::string ASTNameGenerator::getName(const Decl *D) { - std::string Name; - { -llvm::raw_string_ostream OS(Name); -writeName(D, OS); + std::string getName(const Decl *D) { +std::string Name; +{ + llvm::raw_string_ostream OS(Name); + writeName(D, OS); +} +return Name; } - return Name; -} -enum ObjCKind { - ObjCClass, - ObjCMetaclass, -}; - -static StringRef getClassSymbolPrefix(ObjCKind Kind, - const ASTContext ) { - if (Context.getLangOpts().ObjCRuntime.isGNUFamily()) -return Kind == ObjCMetaclass ? "_OBJC_METACLASS_" : "_OBJC_CLASS_"; - return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; -} - -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { - StringRef ClassName; - if (const auto *OID =
[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
compnerd accepted this revision. compnerd added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/AST/Mangle.cpp:343 -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { + std::vector getAllManglings(const ObjCContainerDecl *OCD) { StringRef ClassName; plotfi wrote: > @aaron.ballman I can move this down to the private section in a subsequent > NFC if you'd like. The implementation is never leaked to the user. This means that this is effectively private. Comment at: clang/lib/AST/Mangle.cpp:416 -bool ASTNameGenerator::writeFuncOrVarName(const NamedDecl *D, raw_ostream ) { +private: + bool writeFuncOrVarName(const NamedDecl *D, raw_ostream ) { Don't think that it really matters to make this private or public really. The implementation is fully private. Comment at: clang/lib/AST/Mangle.cpp:473 +ASTNameGenerator::ASTNameGenerator(ASTContext ) +: Impl(new Implementation(Ctx)) {} + `llvm::make_unique` would be nicer. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63584/new/ https://reviews.llvm.org/D63584 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
plotfi marked an inline comment as done. plotfi added inline comments. Comment at: clang/lib/AST/Mangle.cpp:343 -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { + std::vector getAllManglings(const ObjCContainerDecl *OCD) { StringRef ClassName; @aaron.ballman I can move this down to the private section in a subsequent NFC if you'd like. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63584/new/ https://reviews.llvm.org/D63584 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
plotfi updated this revision to Diff 205729. plotfi added a comment. full context Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63584/new/ https://reviews.llvm.org/D63584 Files: clang/include/clang/AST/Mangle.h clang/lib/AST/Mangle.cpp Index: clang/lib/AST/Mangle.cpp === --- clang/lib/AST/Mangle.cpp +++ clang/lib/AST/Mangle.cpp @@ -22,6 +22,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/IR/DataLayout.h" #include "llvm/IR/Mangler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" @@ -283,10 +284,16 @@ Out << OS.str().size() << OS.str(); } -ASTNameGenerator::ASTNameGenerator(ASTContext ) -: MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) {} +class ASTNameGenerator::Implementation { + std::unique_ptr MC; + llvm::DataLayout DL; -bool ASTNameGenerator::writeName(const Decl *D, raw_ostream ) { +public: + explicit Implementation(ASTContext ) + : MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) { + } + + bool writeName(const Decl *D, raw_ostream ) { // First apply frontend mangling. SmallString<128> FrontendBuf; llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); @@ -312,7 +319,7 @@ return false; } -std::string ASTNameGenerator::getName(const Decl *D) { + std::string getName(const Decl *D) { std::string Name; { llvm::raw_string_ostream OS(Name); @@ -333,8 +340,7 @@ return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; } -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { + std::vector getAllManglings(const ObjCContainerDecl *OCD) { StringRef ClassName; if (const auto *OID = dyn_cast(OCD)) ClassName = OID->getObjCRuntimeNameAsString(); @@ -357,7 +363,7 @@ }; } -std::vector ASTNameGenerator::getAllManglings(const Decl *D) { + std::vector getAllManglings(const Decl *D) { if (const auto *OCD = dyn_cast(D)) return getAllManglings(OCD); @@ -407,7 +413,8 @@ return Manglings; } -bool ASTNameGenerator::writeFuncOrVarName(const NamedDecl *D, raw_ostream ) { +private: + bool writeFuncOrVarName(const NamedDecl *D, raw_ostream ) { if (MC->shouldMangleDeclName(D)) { if (const auto *CtorD = dyn_cast(D)) MC->mangleCXXCtor(CtorD, Ctor_Complete, OS); @@ -425,14 +432,12 @@ } } -void ASTNameGenerator::writeObjCClassName(const ObjCInterfaceDecl *D, - raw_ostream ) { + void writeObjCClassName(const ObjCInterfaceDecl *D, raw_ostream ) { OS << getClassSymbolPrefix(ObjCClass, D->getASTContext()); OS << D->getObjCRuntimeNameAsString(); } -std::string ASTNameGenerator::getMangledStructor(const NamedDecl *ND, - unsigned StructorType) { + std::string getMangledStructor(const NamedDecl *ND, unsigned StructorType) { std::string FrontendBuf; llvm::raw_string_ostream FOS(FrontendBuf); @@ -449,8 +454,7 @@ return BOS.str(); } -std::string ASTNameGenerator::getMangledThunk(const CXXMethodDecl *MD, - const ThunkInfo ) { + std::string getMangledThunk(const CXXMethodDecl *MD, const ThunkInfo ) { std::string FrontendBuf; llvm::raw_string_ostream FOS(FrontendBuf); @@ -463,3 +467,21 @@ return BOS.str(); } +}; + +ASTNameGenerator::ASTNameGenerator(ASTContext ) +: Impl(new Implementation(Ctx)) {} + +ASTNameGenerator::~ASTNameGenerator() {} + +bool ASTNameGenerator::writeName(const Decl *D, raw_ostream ) { + return Impl->writeName(D, OS); +} + +std::string ASTNameGenerator::getName(const Decl *D) { + return Impl->getName(D); +} + +std::vector ASTNameGenerator::getAllManglings(const Decl *D) { + return Impl->getAllManglings(D); +} Index: clang/include/clang/AST/Mangle.h === --- clang/include/clang/AST/Mangle.h +++ clang/include/clang/AST/Mangle.h @@ -17,7 +17,6 @@ #include "clang/AST/Type.h" #include "clang/Basic/ABI.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/IR/DataLayout.h" #include "llvm/Support/Casting.h" namespace llvm { @@ -246,21 +245,16 @@ }; class ASTNameGenerator { - std::unique_ptr MC; - llvm::DataLayout DL; - public: explicit ASTNameGenerator(ASTContext ); + ~ASTNameGenerator(); bool writeName(const Decl *D, raw_ostream ); std::string getName(const Decl *D); std::vector getAllManglings(const Decl *D); private: - std::vector getAllManglings(const ObjCContainerDecl *OCD); - bool writeFuncOrVarName(const NamedDecl *D, raw_ostream ); - void writeObjCClassName(const ObjCInterfaceDecl *D, raw_ostream ); - std::string getMangledStructor(const NamedDecl *ND, unsigned
[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
plotfi updated this revision to Diff 205728. plotfi added a comment. moving datalayout.h Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63584/new/ https://reviews.llvm.org/D63584 Files: clang/include/clang/AST/Mangle.h clang/lib/AST/Mangle.cpp Index: clang/lib/AST/Mangle.cpp === --- clang/lib/AST/Mangle.cpp +++ clang/lib/AST/Mangle.cpp @@ -22,6 +22,7 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/IR/DataLayout.h" #include "llvm/IR/Mangler.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" @@ -283,183 +284,204 @@ Out << OS.str().size() << OS.str(); } -ASTNameGenerator::ASTNameGenerator(ASTContext ) -: MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) {} +class ASTNameGenerator::Implementation { + std::unique_ptr MC; + llvm::DataLayout DL; -bool ASTNameGenerator::writeName(const Decl *D, raw_ostream ) { - // First apply frontend mangling. - SmallString<128> FrontendBuf; - llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); - if (auto *FD = dyn_cast(D)) { -if (FD->isDependentContext()) - return true; -if (writeFuncOrVarName(FD, FrontendBufOS)) - return true; - } else if (auto *VD = dyn_cast(D)) { -if (writeFuncOrVarName(VD, FrontendBufOS)) +public: + explicit Implementation(ASTContext ) + : MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) { + } + + bool writeName(const Decl *D, raw_ostream ) { +// First apply frontend mangling. +SmallString<128> FrontendBuf; +llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); +if (auto *FD = dyn_cast(D)) { + if (FD->isDependentContext()) +return true; + if (writeFuncOrVarName(FD, FrontendBufOS)) +return true; +} else if (auto *VD = dyn_cast(D)) { + if (writeFuncOrVarName(VD, FrontendBufOS)) +return true; +} else if (auto *MD = dyn_cast(D)) { + MC->mangleObjCMethodNameWithoutSize(MD, OS); + return false; +} else if (auto *ID = dyn_cast(D)) { + writeObjCClassName(ID, FrontendBufOS); +} else { return true; - } else if (auto *MD = dyn_cast(D)) { -MC->mangleObjCMethodNameWithoutSize(MD, OS); +} + +// Now apply backend mangling. +llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); return false; - } else if (auto *ID = dyn_cast(D)) { -writeObjCClassName(ID, FrontendBufOS); - } else { -return true; } - // Now apply backend mangling. - llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); - return false; -} - -std::string ASTNameGenerator::getName(const Decl *D) { - std::string Name; - { -llvm::raw_string_ostream OS(Name); -writeName(D, OS); + std::string getName(const Decl *D) { +std::string Name; +{ + llvm::raw_string_ostream OS(Name); + writeName(D, OS); +} +return Name; } - return Name; -} -enum ObjCKind { - ObjCClass, - ObjCMetaclass, -}; + enum ObjCKind { +ObjCClass, +ObjCMetaclass, + }; -static StringRef getClassSymbolPrefix(ObjCKind Kind, - const ASTContext ) { - if (Context.getLangOpts().ObjCRuntime.isGNUFamily()) -return Kind == ObjCMetaclass ? "_OBJC_METACLASS_" : "_OBJC_CLASS_"; - return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; -} + static StringRef getClassSymbolPrefix(ObjCKind Kind, +const ASTContext ) { +if (Context.getLangOpts().ObjCRuntime.isGNUFamily()) + return Kind == ObjCMetaclass ? "_OBJC_METACLASS_" : "_OBJC_CLASS_"; +return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; + } -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { - StringRef ClassName; - if (const auto *OID = dyn_cast(OCD)) -ClassName = OID->getObjCRuntimeNameAsString(); - else if (const auto *OID = dyn_cast(OCD)) -ClassName = OID->getObjCRuntimeNameAsString(); - - if (ClassName.empty()) -return {}; - - auto Mangle = [&](ObjCKind Kind, StringRef ClassName) -> std::string { -SmallString<40> Mangled; -auto Prefix = getClassSymbolPrefix(Kind, OCD->getASTContext()); -llvm::Mangler::getNameWithPrefix(Mangled, Prefix + ClassName, DL); -return Mangled.str(); - }; + std::vector getAllManglings(const ObjCContainerDecl *OCD) { +StringRef ClassName; +if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); +else if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); + +if (ClassName.empty()) + return {}; + +auto Mangle = [&](ObjCKind Kind, StringRef ClassName) -> std::string { + SmallString<40> Mangled; + auto Prefix = getClassSymbolPrefix(Kind, OCD->getASTContext()); +
[PATCH] D63584: [clang][AST] Refactoring ASTNameGenerator to use pimpl pattern (NFC).
plotfi created this revision. plotfi added reviewers: compnerd, aaron.ballman. Herald added a project: clang. Herald added a subscriber: cfe-commits. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D63584 Files: clang/include/clang/AST/Mangle.h clang/lib/AST/Mangle.cpp Index: clang/lib/AST/Mangle.cpp === --- clang/lib/AST/Mangle.cpp +++ clang/lib/AST/Mangle.cpp @@ -283,183 +283,204 @@ Out << OS.str().size() << OS.str(); } -ASTNameGenerator::ASTNameGenerator(ASTContext ) -: MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) {} +class ASTNameGenerator::Implementation { + std::unique_ptr MC; + llvm::DataLayout DL; -bool ASTNameGenerator::writeName(const Decl *D, raw_ostream ) { - // First apply frontend mangling. - SmallString<128> FrontendBuf; - llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); - if (auto *FD = dyn_cast(D)) { -if (FD->isDependentContext()) - return true; -if (writeFuncOrVarName(FD, FrontendBufOS)) - return true; - } else if (auto *VD = dyn_cast(D)) { -if (writeFuncOrVarName(VD, FrontendBufOS)) +public: + explicit Implementation(ASTContext ) + : MC(Ctx.createMangleContext()), DL(Ctx.getTargetInfo().getDataLayout()) { + } + + bool writeName(const Decl *D, raw_ostream ) { +// First apply frontend mangling. +SmallString<128> FrontendBuf; +llvm::raw_svector_ostream FrontendBufOS(FrontendBuf); +if (auto *FD = dyn_cast(D)) { + if (FD->isDependentContext()) +return true; + if (writeFuncOrVarName(FD, FrontendBufOS)) +return true; +} else if (auto *VD = dyn_cast(D)) { + if (writeFuncOrVarName(VD, FrontendBufOS)) +return true; +} else if (auto *MD = dyn_cast(D)) { + MC->mangleObjCMethodNameWithoutSize(MD, OS); + return false; +} else if (auto *ID = dyn_cast(D)) { + writeObjCClassName(ID, FrontendBufOS); +} else { return true; - } else if (auto *MD = dyn_cast(D)) { -MC->mangleObjCMethodNameWithoutSize(MD, OS); +} + +// Now apply backend mangling. +llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); return false; - } else if (auto *ID = dyn_cast(D)) { -writeObjCClassName(ID, FrontendBufOS); - } else { -return true; } - // Now apply backend mangling. - llvm::Mangler::getNameWithPrefix(OS, FrontendBufOS.str(), DL); - return false; -} - -std::string ASTNameGenerator::getName(const Decl *D) { - std::string Name; - { -llvm::raw_string_ostream OS(Name); -writeName(D, OS); + std::string getName(const Decl *D) { +std::string Name; +{ + llvm::raw_string_ostream OS(Name); + writeName(D, OS); +} +return Name; } - return Name; -} -enum ObjCKind { - ObjCClass, - ObjCMetaclass, -}; + enum ObjCKind { +ObjCClass, +ObjCMetaclass, + }; -static StringRef getClassSymbolPrefix(ObjCKind Kind, - const ASTContext ) { - if (Context.getLangOpts().ObjCRuntime.isGNUFamily()) -return Kind == ObjCMetaclass ? "_OBJC_METACLASS_" : "_OBJC_CLASS_"; - return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; -} + static StringRef getClassSymbolPrefix(ObjCKind Kind, +const ASTContext ) { +if (Context.getLangOpts().ObjCRuntime.isGNUFamily()) + return Kind == ObjCMetaclass ? "_OBJC_METACLASS_" : "_OBJC_CLASS_"; +return Kind == ObjCMetaclass ? "OBJC_METACLASS_$_" : "OBJC_CLASS_$_"; + } -std::vector -ASTNameGenerator::getAllManglings(const ObjCContainerDecl *OCD) { - StringRef ClassName; - if (const auto *OID = dyn_cast(OCD)) -ClassName = OID->getObjCRuntimeNameAsString(); - else if (const auto *OID = dyn_cast(OCD)) -ClassName = OID->getObjCRuntimeNameAsString(); - - if (ClassName.empty()) -return {}; - - auto Mangle = [&](ObjCKind Kind, StringRef ClassName) -> std::string { -SmallString<40> Mangled; -auto Prefix = getClassSymbolPrefix(Kind, OCD->getASTContext()); -llvm::Mangler::getNameWithPrefix(Mangled, Prefix + ClassName, DL); -return Mangled.str(); - }; + std::vector getAllManglings(const ObjCContainerDecl *OCD) { +StringRef ClassName; +if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); +else if (const auto *OID = dyn_cast(OCD)) + ClassName = OID->getObjCRuntimeNameAsString(); + +if (ClassName.empty()) + return {}; + +auto Mangle = [&](ObjCKind Kind, StringRef ClassName) -> std::string { + SmallString<40> Mangled; + auto Prefix = getClassSymbolPrefix(Kind, OCD->getASTContext()); + llvm::Mangler::getNameWithPrefix(Mangled, Prefix + ClassName, DL); + return Mangled.str(); +}; + +return { +Mangle(ObjCClass, ClassName), +Mangle(ObjCMetaclass, ClassName), +}; + } - return { - Mangle(ObjCClass, ClassName), -