From: Ted Kremenek Date: Sun, 11 Apr 2010 22:20:26 +0000 (+0000) Subject: Augment clang_getCursorUSR() to not always expect that clang_getCursorDecl() does... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c3ef91d784a08efbda6fac063215a163552a8e75;p=clang Augment clang_getCursorUSR() to not always expect that clang_getCursorDecl() does the right thing if the cursor is not a decl (such as in the case of macros). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100996 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/CIndex/CIndexUSRs.cpp b/tools/CIndex/CIndexUSRs.cpp index e90d965a1c..a2cb040282 100644 --- a/tools/CIndex/CIndexUSRs.cpp +++ b/tools/CIndex/CIndexUSRs.cpp @@ -263,23 +263,29 @@ static inline llvm::StringRef extractUSRSuffix(llvm::StringRef s) { return s.startswith("c:") ? s.substr(2) : ""; } -extern "C" { - -CXString clang_getCursorUSR(CXCursor C) { +static CXString getDeclCursorUSR(const CXCursor &C) { Decl *D = cxcursor::getCursorDecl(C); if (!D) return createCXString(NULL); StringUSRGenerator SUG; - SUG->Visit(static_cast(D)); + SUG->Visit(D); if (SUG->ignoreResults()) return createCXString(""); - // Return a copy of the string that must be disposed by the caller. + // Return a copy of the string that must be disposed by the caller. return createCXString(SUG.str(), true); } +extern "C" { + +CXString clang_getCursorUSR(CXCursor C) { + if (clang_isDeclaration(clang_getCursorKind(C))) + return getDeclCursorUSR(C); + return createCXString(""); +} + CXString clang_constructUSR_ObjCIvar(const char *name, CXString classUSR) { StringUSRGenerator SUG; SUG << extractUSRSuffix(clang_getCString(classUSR));