]> granicus.if.org Git - clang/commitdiff
Start adding cursor kinds for attributes, with first exposing
authorTed Kremenek <kremenek@apple.com>
Thu, 18 Feb 2010 03:09:07 +0000 (03:09 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 18 Feb 2010 03:09:07 +0000 (03:09 +0000)
IBActionAttr and IBOutletAttr respectively.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96563 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang-c/Index.h
tools/CIndex/CIndex.cpp
tools/CIndex/CXCursor.cpp
tools/CIndex/CXCursor.h

index 2ff6a97d9f815d7312452f4ced12ee16afd28618..0c671048dcd6fb2b0aaba15de796b858d802a9ba 100644 (file)
@@ -764,7 +764,19 @@ enum CXCursorKind {
    * The translation unit cursor exists primarily to act as the root
    * cursor for traversing the contents of a translation unit.
    */
-  CXCursor_TranslationUnit               = 300
+  CXCursor_TranslationUnit               = 300,
+
+  /* Attributes */
+  CXCursor_FirstAttr                     = 400,
+  /**
+   * \brief An attribute whose specific kind is not exposed via this
+   * interface.
+   */
+  CXCursor_UnexposedAttr                 = 400,
+
+  CXCursor_IBActionAttr                  = 401,
+  CXCursor_IBOutletAttr                  = 402,
+  CXCursor_LastAttr                      = CXCursor_IBOutletAttr
 };
 
 /**
index 5fc61685946cc0aa0745bacb1ec73ff6a37facf1..21f3860abd02779e4aee0d1d07ceff5592efd5d0 100644 (file)
@@ -1441,6 +1441,12 @@ CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
       return createCXString("NotImplemented");
   case CXCursor_TranslationUnit:
       return createCXString("TranslationUnit");
+  case CXCursor_UnexposedAttr:
+      return createCXString("UnexposedAttr");
+  case CXCursor_IBActionAttr:
+      return createCXString("attribute(ibaction)");
+    case CXCursor_IBOutletAttr:
+      return createCXString("attribute(iboutlet)");
   }
 
   llvm_unreachable("Unhandled CXCursorKind");
index ec1477eb8a275586cc740ced0a35380c1c541e32..0fa73a513da4d8e5464a58234d08318ef9138959 100644 (file)
@@ -72,6 +72,23 @@ static CXCursorKind GetCursorKind(Decl *D) {
   return CXCursor_NotImplemented;  
 }
 
+static CXCursorKind GetCursorKind(const Attr *A) {
+  assert(A && "Invalid arguments!");
+  switch (A->getKind()) {
+    default: break;
+    case Attr::IBActionKind: return CXCursor_IBActionAttr;
+    case Attr::IBOutletKind: return CXCursor_IBOutletAttr;
+  }
+
+  return CXCursor_UnexposedAttr;
+}
+
+CXCursor cxcursor::MakeCXCursor(const Attr *A, Decl *Parent, ASTUnit *TU) {
+  assert(A && Parent && TU && "Invalid arguments!");
+  CXCursor C = { GetCursorKind(A), { Parent, (void*)A, TU } };
+  return C;
+}
+
 CXCursor cxcursor::MakeCXCursor(Decl *D, ASTUnit *TU) {
   assert(D && TU && "Invalid arguments!");
   CXCursor C = { GetCursorKind(D), { D, 0, TU } };
index 30fb26c936bfed443e752ea54fde4587010a2c79..934d5e2aebd39ed32202f6052d7ea17585811d01 100644 (file)
@@ -22,6 +22,7 @@ namespace clang {
 
 class ASTContext;
 class ASTUnit;
+class Attr;
 class Decl;
 class Expr;
 class NamedDecl;
@@ -32,9 +33,10 @@ class TypeDecl;
 
 namespace cxcursor {
   
-CXCursor MakeCXCursorInvalid(CXCursorKind K);
-CXCursor MakeCXCursor(clang::Stmt *S, clang::Decl *Parent, ASTUnit *TU);
+CXCursor MakeCXCursor(const clang::Attr *A, clang::Decl *Parent, ASTUnit *TU);
 CXCursor MakeCXCursor(clang::Decl *D, ASTUnit *TU);
+CXCursor MakeCXCursor(clang::Stmt *S, clang::Decl *Parent, ASTUnit *TU);
+CXCursor MakeCXCursorInvalid(CXCursorKind K);
 
 /// \brief Create an Objective-C superclass reference at the given location.
 CXCursor MakeCursorObjCSuperClassRef(ObjCInterfaceDecl *Super,