| commit 865b9340996f9f9d04b73b187248737dc6fd845e |
| Author: Michael Wu <mwu@mozilla.com> |
| Date: Mon Sep 14 17:47:21 2015 -0400 |
| |
| Add support for querying the visibility of a cursor |
| |
| diff --git a/llvm/tools/clang/include/clang-c/Index.h b/llvm/tools/clang/include/clang-c/Index.h |
| index fad9cfa..311bfcb 100644 |
| --- a/llvm/tools/clang/include/clang-c/Index.h |
| +++ b/llvm/tools/clang/include/clang-c/Index.h |
| @@ -2440,6 +2440,24 @@ enum CXLinkageKind { |
| CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor); |
| |
| /** |
| + * \brief Describe the visibility of the entity referred to by a cursor. |
| + */ |
| +enum CXVisibilityKind { |
| + /** \brief This value indicates that no visibility information is available |
| + * for a provided CXCursor. */ |
| + CXVisibility_Invalid, |
| + |
| + /** \brief Symbol not seen by the linker. */ |
| + CXVisibility_Hidden, |
| + /** \brief Symbol seen by the linker but resolves to a symbol inside this object. */ |
| + CXVisibility_Protected, |
| + /** \brief Symbol seen by the linker and acts like a normal symbol. */ |
| + CXVisibility_Default, |
| +}; |
| + |
| +CINDEX_LINKAGE enum CXVisibilityKind clang_getCursorVisibility(CXCursor cursor); |
| + |
| +/** |
| * \brief Determine the availability of the entity that this cursor refers to, |
| * taking the current target platform into account. |
| * |
| diff --git a/llvm/tools/clang/tools/libclang/CIndex.cpp b/llvm/tools/clang/tools/libclang/CIndex.cpp |
| index 8225a6c..9fa18d3 100644 |
| --- a/llvm/tools/clang/tools/libclang/CIndex.cpp |
| +++ b/llvm/tools/clang/tools/libclang/CIndex.cpp |
| @@ -6361,6 +6361,27 @@ CXLinkageKind clang_getCursorLinkage(CXCursor cursor) { |
| } // end: extern "C" |
| |
| //===----------------------------------------------------------------------===// |
| +// Operations for querying visibility of a cursor. |
| +//===----------------------------------------------------------------------===// |
| + |
| +extern "C" { |
| +CXVisibilityKind clang_getCursorVisibility(CXCursor cursor) { |
| + if (!clang_isDeclaration(cursor.kind)) |
| + return CXVisibility_Invalid; |
| + |
| + const Decl *D = cxcursor::getCursorDecl(cursor); |
| + if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D)) |
| + switch (ND->getVisibility()) { |
| + case HiddenVisibility: return CXVisibility_Hidden; |
| + case ProtectedVisibility: return CXVisibility_Protected; |
| + case DefaultVisibility: return CXVisibility_Default; |
| + }; |
| + |
| + return CXVisibility_Invalid; |
| +} |
| +} // end: extern "C" |
| + |
| +//===----------------------------------------------------------------------===// |
| // Operations for querying language of a cursor. |
| //===----------------------------------------------------------------------===// |
| |
| diff --git a/llvm/tools/clang/tools/libclang/libclang.exports b/llvm/tools/clang/tools/libclang/libclang.exports |
| index f6a7175..a919a8e 100644 |
| --- a/llvm/tools/clang/tools/libclang/libclang.exports |
| +++ b/llvm/tools/clang/tools/libclang/libclang.exports |
| @@ -173,6 +173,7 @@ clang_getCursorSemanticParent |
| clang_getCursorSpelling |
| clang_getCursorType |
| clang_getCursorUSR |
| +clang_getCursorVisibility |
| clang_getDeclObjCTypeEncoding |
| clang_getDefinitionSpellingAndExtent |
| clang_getDiagnostic |