]> granicus.if.org Git - clang/commitdiff
Add 'clang_getCursorLanguage' to return the "language" of the AST element (e.g.,...
authorTed Kremenek <kremenek@apple.com>
Mon, 12 Apr 2010 21:22:16 +0000 (21:22 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 12 Apr 2010 21:22:16 +0000 (21:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101070 91177308-0d34-0410-b5e6-96231b3b80d8

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

index bfb64817da138d8b5605c8001e354d4a3ffb31ba..0ea5f2cff5ae7054a2c8622236e64f88a29930aa 100644 (file)
@@ -936,10 +936,25 @@ enum CXLinkageKind {
 };
 
 /**
- * \brief Determine the linkage of the entity referred to be a given cursor.
+ * \brief Determine the linkage of the entity referred to by a given cursor.
  */
 CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor);
 
+/**
+ * \brief Describe the "language" of the entity referred to by a cursor.
+ */
+CINDEX_LINKAGE enum CXLanguageKind {
+  CXLanguage_C,
+  CXLanguage_ObjC,
+  CXLanguage_CPlusPlus,
+  CXLanguage_Invalid
+};
+
+/**
+ * \brief Determine the "language" of the entity referred to by a given cursor.
+ */
+CINDEX_LINKAGE enum CXLanguageKind clang_getCursorLanguage(CXCursor cursor);
+
 /**
  * @}
  */
index d7b6f39bbe56752a0ba3911b475050fefc9ab864..43aa34f4cfc316368cc9234aa4ff928d57fc1262 100644 (file)
@@ -2464,6 +2464,69 @@ CXLinkageKind clang_getCursorLinkage(CXCursor cursor) {
 }
 } // end: extern "C"
 
+//===----------------------------------------------------------------------===//
+// Operations for querying language of a cursor.
+//===----------------------------------------------------------------------===//
+
+static CXLanguageKind getDeclLanguage(const Decl *D) {
+  switch (D->getKind()) {
+    default:
+      break;
+    case Decl::ImplicitParam:
+    case Decl::ObjCAtDefsField:
+    case Decl::ObjCCategory:
+    case Decl::ObjCCategoryImpl:
+    case Decl::ObjCClass:
+    case Decl::ObjCCompatibleAlias:
+    case Decl::ObjCContainer:
+    case Decl::ObjCForwardProtocol:
+    case Decl::ObjCImplementation:
+    case Decl::ObjCInterface:
+    case Decl::ObjCIvar:
+    case Decl::ObjCMethod:
+    case Decl::ObjCProperty:
+    case Decl::ObjCPropertyImpl:
+    case Decl::ObjCProtocol:
+      return CXLanguage_ObjC;
+    case Decl::CXXConstructor:
+    case Decl::CXXConversion:
+    case Decl::CXXDestructor:
+    case Decl::CXXMethod:
+    case Decl::CXXRecord:
+    case Decl::ClassTemplate:
+    case Decl::ClassTemplatePartialSpecialization:
+    case Decl::ClassTemplateSpecialization:
+    case Decl::Friend:
+    case Decl::FriendTemplate:
+    case Decl::FunctionTemplate:
+    case Decl::LinkageSpec:
+    case Decl::Namespace:
+    case Decl::NamespaceAlias:
+    case Decl::NonTypeTemplateParm:
+    case Decl::StaticAssert:
+    case Decl::Template:
+    case Decl::TemplateTemplateParm:
+    case Decl::TemplateTypeParm:
+    case Decl::UnresolvedUsingTypename:
+    case Decl::UnresolvedUsingValue:
+    case Decl::Using:
+    case Decl::UsingDirective:
+    case Decl::UsingShadow:
+      return CXLanguage_CPlusPlus;
+  }
+
+  return CXLanguage_C;
+}
+
+extern "C" {
+CXLanguageKind clang_getCursorLanguage(CXCursor cursor) {
+  if (clang_isDeclaration(cursor.kind))
+    return getDeclLanguage(cxcursor::getCursorDecl(cursor));
+
+  return CXLanguage_Invalid;
+}
+} // end: extern "C"
+
 //===----------------------------------------------------------------------===//
 // CXString Operations.
 //===----------------------------------------------------------------------===//
index 0fcbf6de8d155e9c107b7b99a2d70a2692777eb1..b36116805311e29dbbdf12522bada0379d41be3f 100644 (file)
@@ -32,6 +32,7 @@ _clang_getCursorDefinition
 _clang_getCursorExtent
 _clang_getCursorKind
 _clang_getCursorKindSpelling
+_clang_getCursorLanguage
 _clang_getCursorLinkage
 _clang_getCursorLocation
 _clang_getCursorReferenced