Add 'clang_getCursorLanguage' to return the "language" of the AST element (e.g., distinguish between C and Objective-C language features). Currently this only returns results for declarations.
llvm-svn: 101070
This commit is contained in:
parent
601f6d5b59
commit
4ed2925b91
|
@ -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);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -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.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -32,6 +32,7 @@ _clang_getCursorDefinition
|
|||
_clang_getCursorExtent
|
||||
_clang_getCursorKind
|
||||
_clang_getCursorKindSpelling
|
||||
_clang_getCursorLanguage
|
||||
_clang_getCursorLinkage
|
||||
_clang_getCursorLocation
|
||||
_clang_getCursorReferenced
|
||||
|
|
Loading…
Reference in New Issue