From: Nikolai Kosjar Date: Fri, 10 May 2019 13:58:34 +0000 (+0000) Subject: [libclang] Forward isInline for NamespaceDecl to libclang X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c06fed002f4859ab3eaab5401d7d48a75ffecd89;p=clang [libclang] Forward isInline for NamespaceDecl to libclang git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@360428 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h index 24b865cbaf..7982d65bf2 100644 --- a/include/clang-c/Index.h +++ b/include/clang-c/Index.h @@ -32,7 +32,7 @@ * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable. */ #define CINDEX_VERSION_MAJOR 0 -#define CINDEX_VERSION_MINOR 56 +#define CINDEX_VERSION_MINOR 57 #define CINDEX_VERSION_ENCODE(major, minor) ( \ ((major) * 10000) \ @@ -3932,6 +3932,12 @@ CINDEX_LINKAGE unsigned clang_Cursor_isAnonymous(CXCursor C); */ CINDEX_LINKAGE unsigned clang_Cursor_isAnonymousRecordDecl(CXCursor C); +/** + * Determine whether the given cursor represents an inline namespace + * declaration. + */ +CINDEX_LINKAGE unsigned clang_Cursor_isInlineNamespace(CXCursor C); + enum CXRefQualifierKind { /** No ref-qualifier was provided. */ CXRefQualifier_None = 0, diff --git a/test/Index/print-type.cpp b/test/Index/print-type.cpp index 17bae2e9c3..32d1185eec 100644 --- a/test/Index/print-type.cpp +++ b/test/Index/print-type.cpp @@ -90,6 +90,8 @@ class X { namespace { int a; } + +inline namespace InlineNS {} // RUN: c-index-test -test-print-type %s -std=c++14 | FileCheck %s // CHECK: Namespace=outer:1:11 (Definition) [type=] [typekind=Invalid] [isPOD=0] // CHECK: ClassTemplate=Foo:4:8 (Definition) [type=] [typekind=Invalid] [isPOD=0] @@ -204,3 +206,4 @@ namespace { // CHECK: UnionDecl=:86:3 (Definition) [type=X::(anonymous union at {{.*}}print-type.cpp:86:3)] [typekind=Record] [isPOD=1] [nbFields=2] [isAnon=1] // CHECK: EnumDecl=:87:3 (Definition) [type=X::(anonymous enum at {{.*}}print-type.cpp:87:3)] [typekind=Enum] [isPOD=1] [isAnon=1] // CHECK: Namespace=:90:11 (Definition) [type=] [typekind=Invalid] [isPOD=0] [isAnon=1] +// CHECK: Namespace=InlineNS:94:18 (Definition) [type=] [typekind=Invalid] [isPOD=0] [isAnonRecDecl=0] [isInlineNamespace=1] diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 17b773c636..42fd0bbef0 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -1671,6 +1671,13 @@ static enum CXChildVisitResult PrintType(CXCursor cursor, CXCursor p, printf(" [isAnonRecDecl=%d]", isAnonRecDecl); } + /* Print if it is an inline namespace decl */ + { + unsigned isInlineNamespace = clang_Cursor_isInlineNamespace(cursor); + if (isInlineNamespace != 0) + printf(" [isInlineNamespace=%d]", isInlineNamespace); + } + printf("\n"); } return CXChildVisit_Recurse; diff --git a/tools/libclang/CXType.cpp b/tools/libclang/CXType.cpp index 47a9bb9c1d..c7ac572382 100644 --- a/tools/libclang/CXType.cpp +++ b/tools/libclang/CXType.cpp @@ -1271,6 +1271,14 @@ unsigned clang_Cursor_isAnonymousRecordDecl(CXCursor C){ return 0; } +unsigned clang_Cursor_isInlineNamespace(CXCursor C) { + if (!clang_isDeclaration(C.kind)) + return 0; + const Decl *D = cxcursor::getCursorDecl(C); + const NamespaceDecl *ND = dyn_cast_or_null(D); + return ND ? ND->isInline() : 0; +} + CXType clang_Type_getNamedType(CXType CT){ QualType T = GetQualType(CT); const Type *TP = T.getTypePtrOrNull(); diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports index 1d3cd5cd14..3c76090d64 100644 --- a/tools/libclang/libclang.exports +++ b/tools/libclang/libclang.exports @@ -43,6 +43,7 @@ clang_Cursor_isAnonymousRecordDecl clang_Cursor_isBitField clang_Cursor_isDynamicCall clang_Cursor_isExternalSymbol +clang_Cursor_isInlineNamespace clang_Cursor_isNull clang_Cursor_isObjCOptional clang_Cursor_isVariadic