From: Ted Kremenek Date: Fri, 27 Aug 2010 21:57:20 +0000 (+0000) Subject: Add source file I meant to include in my previous commit. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=585b318a7333b5dd1d900881db7b6610e2701fe8;p=clang Add source file I meant to include in my previous commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@112303 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/libclang/CIndexCXX.cpp b/tools/libclang/CIndexCXX.cpp new file mode 100644 index 0000000000..a168f16045 --- /dev/null +++ b/tools/libclang/CIndexCXX.cpp @@ -0,0 +1,48 @@ +//===- CIndexCXX.cpp - Clang-C Source Indexing Library --------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the libclang support for C++ cursors. +// +//===----------------------------------------------------------------------===// + +#include "CIndexer.h" +#include "CXCursor.h" +#include "CXType.h" +#include "clang/AST/DeclCXX.h" + +using namespace clang; +using namespace clang::cxstring; + +extern "C" { + +unsigned clang_isVirtualBase(CXCursor C) { + if (C.kind != CXCursor_CXXBaseSpecifier) + return 0; + + CXXBaseSpecifier *B = cxcursor::getCursorCXXBaseSpecifier(C); + return B->isVirtual(); +} + +enum CX_CXXAccessSpecifier clang_getCXXAccessSpecifier(CXCursor C) { + if (C.kind != CXCursor_CXXBaseSpecifier) + return CX_CXXInvalidAccessSpecifier; + + CXXBaseSpecifier *B = cxcursor::getCursorCXXBaseSpecifier(C); + switch (B->getAccessSpecifier()) { + case AS_public: return CX_CXXPublic; + case AS_protected: return CX_CXXProtected; + case AS_private: return CX_CXXPrivate; + case AS_none: return CX_CXXInvalidAccessSpecifier; + } + + // FIXME: Clang currently thinks this is reachable. + return CX_CXXInvalidAccessSpecifier; +} + +} // end extern "C"