[cfe-commits] r86439 - /cfe/trunk/tools/CIndex/CIndex.cpp

Daniel Dunbar daniel at zuster.org
Sat Nov 7 20:13:53 PST 2009


Author: ddunbar
Date: Sat Nov  7 22:13:53 2009
New Revision: 86439

URL: http://llvm.org/viewvc/llvm-project?rev=86439&view=rev
Log:
Move a function which returns a class outside of extern C scope.

Modified:
    cfe/trunk/tools/CIndex/CIndex.cpp

Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=86439&r1=86438&r2=86439&view=diff

==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Sat Nov  7 22:13:53 2009
@@ -353,6 +353,70 @@
 
 }
 
+static SourceLocation getLocationFromCursor(CXCursor C, 
+                                            SourceManager &SourceMgr,
+                                            NamedDecl *ND) {
+  if (clang_isReference(C.kind)) {
+    switch (C.kind) {
+      case CXCursor_ObjCClassRef: {
+        if (isa<ObjCInterfaceDecl>(ND)) {
+          // FIXME: This is a hack (storing the parent decl in the stmt slot).
+          NamedDecl *parentDecl = static_cast<NamedDecl *>(C.stmt);
+          return parentDecl->getLocation();
+        }
+        ObjCCategoryDecl *OID = dyn_cast<ObjCCategoryDecl>(ND);
+        assert(OID && "clang_getCursorLine(): Missing category decl");
+        return OID->getClassInterface()->getLocation();
+      }
+      case CXCursor_ObjCSuperClassRef: {
+        ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND);
+        assert(OID && "clang_getCursorLine(): Missing interface decl");
+        return OID->getSuperClassLoc();
+      }
+      case CXCursor_ObjCProtocolRef: {
+        ObjCProtocolDecl *OID = dyn_cast<ObjCProtocolDecl>(ND);
+        assert(OID && "clang_getCursorLine(): Missing protocol decl");
+        return OID->getLocation();
+      }
+      case CXCursor_ObjCSelectorRef: {
+        ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(
+                                 static_cast<Stmt *>(C.stmt));
+        assert(OME && "clang_getCursorLine(): Missing message expr");
+        return OME->getLeftLoc(); /* FIXME: should be a range */
+      }
+      case CXCursor_VarRef:
+      case CXCursor_FunctionRef:
+      case CXCursor_EnumConstantRef: {
+        DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(
+                                 static_cast<Stmt *>(C.stmt));
+        assert(DRE && "clang_getCursorLine(): Missing decl ref expr");
+        return DRE->getLocation();
+      }
+      default:
+        return SourceLocation();
+    }
+  } else { // We have a declaration or a definition.
+    SourceLocation SLoc;
+    switch (ND->getKind()) {
+      case Decl::ObjCInterface: {
+        SLoc = dyn_cast<ObjCInterfaceDecl>(ND)->getClassLoc();
+        break;
+      }
+      case Decl::ObjCProtocol: {
+        SLoc = ND->getLocation(); /* FIXME: need to get the name location. */
+        break;
+      }
+      default: {
+        SLoc = ND->getLocation();
+        break;
+      }
+    }
+    if (SLoc.isInvalid())
+      return SourceLocation();
+    return SourceMgr.getSpellingLoc(SLoc); // handles macro instantiations.
+  }
+}
+
 extern "C" {
 
 CXIndex clang_createIndex(int excludeDeclarationsFromPCH,
@@ -862,71 +926,6 @@
   return 0;
 }
 
-  
-static SourceLocation getLocationFromCursor(CXCursor C, 
-                                            SourceManager &SourceMgr,
-                                            NamedDecl *ND) {
-  if (clang_isReference(C.kind)) {
-    switch (C.kind) {
-      case CXCursor_ObjCClassRef: {
-        if (isa<ObjCInterfaceDecl>(ND)) {
-          // FIXME: This is a hack (storing the parent decl in the stmt slot).
-          NamedDecl *parentDecl = static_cast<NamedDecl *>(C.stmt);
-          return parentDecl->getLocation();
-        }
-        ObjCCategoryDecl *OID = dyn_cast<ObjCCategoryDecl>(ND);
-        assert(OID && "clang_getCursorLine(): Missing category decl");
-        return OID->getClassInterface()->getLocation();
-      }
-      case CXCursor_ObjCSuperClassRef: {
-        ObjCInterfaceDecl *OID = dyn_cast<ObjCInterfaceDecl>(ND);
-        assert(OID && "clang_getCursorLine(): Missing interface decl");
-        return OID->getSuperClassLoc();
-      }
-      case CXCursor_ObjCProtocolRef: {
-        ObjCProtocolDecl *OID = dyn_cast<ObjCProtocolDecl>(ND);
-        assert(OID && "clang_getCursorLine(): Missing protocol decl");
-        return OID->getLocation();
-      }
-      case CXCursor_ObjCSelectorRef: {
-        ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(
-                                 static_cast<Stmt *>(C.stmt));
-        assert(OME && "clang_getCursorLine(): Missing message expr");
-        return OME->getLeftLoc(); /* FIXME: should be a range */
-      }
-      case CXCursor_VarRef:
-      case CXCursor_FunctionRef:
-      case CXCursor_EnumConstantRef: {
-        DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(
-                                 static_cast<Stmt *>(C.stmt));
-        assert(DRE && "clang_getCursorLine(): Missing decl ref expr");
-        return DRE->getLocation();
-      }
-      default:
-        return SourceLocation();
-    }
-  } else { // We have a declaration or a definition.
-    SourceLocation SLoc;
-    switch (ND->getKind()) {
-      case Decl::ObjCInterface: {
-        SLoc = dyn_cast<ObjCInterfaceDecl>(ND)->getClassLoc();
-        break;
-      }
-      case Decl::ObjCProtocol: {
-        SLoc = ND->getLocation(); /* FIXME: need to get the name location. */
-        break;
-      }
-      default: {
-        SLoc = ND->getLocation();
-        break;
-      }
-    }
-    if (SLoc.isInvalid())
-      return SourceLocation();
-    return SourceMgr.getSpellingLoc(SLoc); // handles macro instantiations.
-  }
-}
-
 unsigned clang_getCursorLine(CXCursor C)
 {
   assert(C.decl && "CXCursor has null decl");





More information about the cfe-commits mailing list