]> granicus.if.org Git - clang/commitdiff
Augment clang_getCursorUSR() to not always expect that clang_getCursorDecl() does...
authorTed Kremenek <kremenek@apple.com>
Sun, 11 Apr 2010 22:20:26 +0000 (22:20 +0000)
committerTed Kremenek <kremenek@apple.com>
Sun, 11 Apr 2010 22:20:26 +0000 (22:20 +0000)
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

tools/CIndex/CIndexUSRs.cpp

index e90d965a1cd31674fa4835864d986a462dd807e3..a2cb0402820c8df4c7873381d063a2f8d1583802 100644 (file)
@@ -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));