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);
|
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"
|
} // 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.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
Loading…
Reference in New Issue