forked from OSchip/llvm-project
Add clang_getCursorLinkage(), which returns the
underlying linkage for the entity referred to by a CXCursor. llvm-svn: 97646
This commit is contained in:
parent
3e1ffd06fc
commit
fb4961dfd0
|
@ -888,6 +888,32 @@ CINDEX_LINKAGE unsigned clang_isInvalid(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);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -2209,6 +2209,25 @@ void clang_disposeTokens(CXTranslationUnit TU,
|
|||
|
||||
} // 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.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue