diff options
author | David Chisnall <csdavec@swan.ac.uk> | 2010-09-02 18:01:51 +0000 |
---|---|---|
committer | David Chisnall <csdavec@swan.ac.uk> | 2010-09-02 18:01:51 +0000 |
commit | cf60744cd73d284b40c14a73abeccde2711e4684 (patch) | |
tree | 6b7985f8d35067ee7eac92e0558f1d80b50c794e /clang/lib/CodeGen/CGDebugInfo.cpp | |
parent | 1ce2faca0552fac5ffc039487ca376d412d5468b (diff) | |
download | bcm5719-llvm-cf60744cd73d284b40c14a73abeccde2711e4684.tar.gz bcm5719-llvm-cf60744cd73d284b40c14a73abeccde2711e4684.zip |
Tidy up last commit, as per Devang's comments.
llvm-svn: 112840
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index d59faa16024..406db886eee 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -95,6 +95,24 @@ llvm::StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) { return llvm::StringRef(StrPtr, NS.length()); } +llvm::StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) { + llvm::SmallString<256> MethodName; + llvm::raw_svector_ostream OS(MethodName); + OS << (OMD->isInstanceMethod() ? '-' : '+') << '['; + const DeclContext *DC = OMD->getDeclContext(); + if (const ObjCImplementationDecl *OID = dyn_cast<const ObjCImplementationDecl>(DC)) { + OS << OID->getName(); + } else if (const ObjCCategoryImplDecl *OCD = dyn_cast<const ObjCCategoryImplDecl>(DC)){ + OS << ((NamedDecl *)OCD)->getIdentifier()->getNameStart() << '(' << + OCD->getIdentifier()->getNameStart() << ')'; + } + OS << ' ' << OMD->getSelector().getAsString() << ']'; + + char *StrPtr = DebugInfoNames.Allocate<char>(OS.tell()); + memcpy(StrPtr, MethodName.begin(), OS.tell()); + return llvm::StringRef(StrPtr, OS.tell()); +} + /// getClassName - Get class name including template argument list. llvm::StringRef CGDebugInfo::getClassName(RecordDecl *RD) { @@ -1472,18 +1490,7 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, QualType FnType, // Use mangled name as linkage name for c/c++ functions. LinkageName = CGM.getMangledName(GD); } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) { - llvm::SmallString<256> MethodName; - llvm::raw_svector_ostream OS(MethodName); - OS << (OMD->isInstanceMethod() ? '-' : '+') << '['; - const DeclContext *DC = OMD->getDeclContext(); - if (const ObjCImplementationDecl *OID = dyn_cast<const ObjCImplementationDecl>(DC)) { - OS << OID->getName(); - } else if (const ObjCCategoryImplDecl *OCD = dyn_cast<const ObjCCategoryImplDecl>(DC)){ - OS << ((NamedDecl *)OCD)->getIdentifier()->getNameStart() << '(' << - OCD->getIdentifier()->getNameStart() << ')'; - } - OS << ' ' << OMD->getSelector().getAsString() << ']'; - Name = MethodName; + Name = getObjCMethodName(OMD); LinkageName = Name; } else { // Use llvm function name as linkage name. |