diff options
-rw-r--r-- | tools/CIndex/CIndexUSRs.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
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<Decl*>(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)); |