Add clang_getCursorLinkage(), which returns the

underlying linkage for the entity referred to by a
CXCursor.

llvm-svn: 97646
This commit is contained in:
Ted Kremenek 2010-03-03 06:36:57 +00:00
parent 3e1ffd06fc
commit fb4961dfd0
2 changed files with 45 additions and 0 deletions

View File

@ -888,6 +888,32 @@ CINDEX_LINKAGE unsigned clang_isInvalid(enum CXCursorKind);
*/ */
CINDEX_LINKAGE unsigned clang_isTranslationUnit(enum CXCursorKind); CINDEX_LINKAGE unsigned clang_isTranslationUnit(enum CXCursorKind);
/**
* \brief Describe the linkage of the entity referred to by a cursor.
*/
enum CXLinkageKind {
/** \brief This value indicates that no linkage information is available
* for a provided CXCursor. */
CXLinkage_Invalid,
/**
* \brief This is the linkage for variables, parameters, and so on that
* have automatic storage. This covers normal (non-extern) local variables.
*/
CXLinkage_NoLinkage,
/** \brief This is the linkage for static variables and static functions. */
CXLinkage_Internal,
/** \brief This is the linkage for entities with external linkage that live
* in C++ anonymous namespaces.*/
CXLinkage_UniqueExternal,
/** \brief This is the linkage for entities with true, external linkage. */
CXLinkage_External
};
/**
* \brief Determine the linkage of the entity referred to be a given cursor.
*/
CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor);
/** /**
* @} * @}
*/ */

View File

@ -2209,6 +2209,25 @@ void clang_disposeTokens(CXTranslationUnit TU,
} // end: extern "C" } // end: extern "C"
//===----------------------------------------------------------------------===//
// Operations for querying linkage of a cursor.
//===----------------------------------------------------------------------===//
extern "C" {
CXLinkageKind clang_getCursorLinkage(CXCursor cursor) {
Decl *D = cxcursor::getCursorDecl(cursor);
if (NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D))
switch (ND->getLinkage()) {
case NoLinkage: return CXLinkage_NoLinkage;
case InternalLinkage: return CXLinkage_Internal;
case UniqueExternalLinkage: return CXLinkage_UniqueExternal;
case ExternalLinkage: return CXLinkage_External;
};
return CXLinkage_Invalid;
}
} // end: extern "C"
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// CXString Operations. // CXString Operations.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//