diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-03-03 06:36:57 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-03-03 06:36:57 +0000 |
commit | 16b4259aecaa22b642d35d36fd89965ed700c1e0 (patch) | |
tree | de184cbd9e805e175a8b02e4745cf07202a7223f | |
parent | 7ada111fd5e81aff355e67bad0e4083f552b34bd (diff) |
Add clang_getCursorLinkage(), which returns the
underlying linkage for the entity referred to by a
CXCursor.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97646 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang-c/Index.h | 26 | ||||
-rw-r--r-- | tools/CIndex/CIndex.cpp | 19 |
2 files changed, 45 insertions, 0 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index c1238e5d88..7bc290d88f 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -889,6 +889,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); + +/** * @} */ diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp index e13dddfcad..6fc7b53030 100644 --- a/tools/CIndex/CIndex.cpp +++ b/tools/CIndex/CIndex.cpp @@ -2210,6 +2210,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. //===----------------------------------------------------------------------===// |