r302677 - [libclang] Introduce clang_Cursor_isExternalSymbol that provides info about decls marked with external_source_symbol attribute
Argyrios Kyrtzidis via cfe-commits
cfe-commits at lists.llvm.org
Wed May 10 10:00:13 PDT 2017
That’s a good idea, if you don’t get to it I’ll look into it at some point later on but it will probably not be soon.
> On May 10, 2017, at 9:10 AM, Alex L <arphaman at gmail.com> wrote:
>
>
>
> On 10 May 2017 at 16:10, Argyrios Kyrtzidis via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
> Author: akirtzidis
> Date: Wed May 10 10:10:36 2017
> New Revision: 302677
>
> URL: http://llvm.org/viewvc/llvm-project?rev=302677&view=rev <http://llvm.org/viewvc/llvm-project?rev=302677&view=rev>
> Log:
> [libclang] Introduce clang_Cursor_isExternalSymbol that provides info about decls marked with external_source_symbol attribute
>
> Modified:
> cfe/trunk/include/clang-c/Index.h
> cfe/trunk/test/Index/get-cursor.m
> cfe/trunk/tools/c-index-test/c-index-test.c
> cfe/trunk/tools/libclang/CIndex.cpp
> cfe/trunk/tools/libclang/libclang.exports
>
> Modified: cfe/trunk/include/clang-c/Index.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=302677&r1=302676&r2=302677&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=302677&r1=302676&r2=302677&view=diff>
> ==============================================================================
> --- cfe/trunk/include/clang-c/Index.h (original)
> +++ cfe/trunk/include/clang-c/Index.h Wed May 10 10:10:36 2017
> @@ -32,7 +32,7 @@
> * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
> */
> #define CINDEX_VERSION_MAJOR 0
> -#define CINDEX_VERSION_MINOR 38
> +#define CINDEX_VERSION_MINOR 39
>
> #define CINDEX_VERSION_ENCODE(major, minor) ( \
> ((major) * 10000) \
> @@ -4081,6 +4081,23 @@ CINDEX_LINKAGE unsigned clang_Cursor_isO
> CINDEX_LINKAGE unsigned clang_Cursor_isVariadic(CXCursor C);
>
> /**
> + * \brief Returns non-zero if the given cursor points to a symbol marked with
> + * external_source_symbol attribute.
> + *
> + * \param language If non-NULL, and the attribute is present, will be set to
> + * the 'language' string from the attribute.
> + *
> + * \param definedIn If non-NULL, and the attribute is present, will be set to
> + * the 'definedIn' string from the attribute.
> + *
> + * \param isGenerated If non-NULL, and the attribute is present, will be set to
> + * non-zero is the 'generated_declaration' is set in the attribute.
> + */
> +CINDEX_LINKAGE unsigned clang_Cursor_isExternalSymbol(CXCursor C,
> + CXString *language, CXString *definedIn,
> + unsigned *isGenerated);
> +
> +/**
> * \brief Given a cursor that represents a declaration, return the associated
> * comment's source range. The range may include multiple consecutive comments
> * with whitespace in between.
>
> Modified: cfe/trunk/test/Index/get-cursor.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/get-cursor.m?rev=302677&r1=302676&r2=302677&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/get-cursor.m?rev=302677&r1=302676&r2=302677&view=diff>
> ==============================================================================
> --- cfe/trunk/test/Index/get-cursor.m (original)
> +++ cfe/trunk/test/Index/get-cursor.m Wed May 10 10:10:36 2017
> @@ -154,6 +154,12 @@ SomeT someVar;
> typedef MY_TYPE2(SomeT2) { int x; };
> SomeT2 someVar2;
>
> +#define GEN_DECL(mod_name) __attribute__((external_source_symbol(language="Swift", defined_in=mod_name, generated_declaration)))
> +
> +GEN_DECL("some_module")
> + at interface ExtCls
> +-(void)method;
> + at end
>
> // RUN: c-index-test -cursor-at=%s:4:28 -cursor-at=%s:5:28 %s | FileCheck -check-prefix=CHECK-PROP %s
> // CHECK-PROP: ObjCPropertyDecl=foo1:4:26
> @@ -226,3 +232,8 @@ SomeT2 someVar2;
> // CHECK-TRANSPARENT: 147:1 TypeRef=TokenPaste_t:144:9 Extent=[147:1 - 147:13] Spelling=TokenPaste_t ([147:1 - 147:13])
> // CHECK-TRANSPARENT: 151:1 TypeRef=SomeT:150:17 (Transparent: struct SomeT) Extent=[151:1 - 151:6] Spelling=SomeT ([151:1 - 151:6])
> // CHECK-TRANSPARENT: 155:1 TypeRef=SomeT2:154:18 Extent=[155:1 - 155:7] Spelling=SomeT2 ([155:1 - 155:7])
> +
> +// RUN: c-index-test -cursor-at=%s:160:12 -cursor-at=%s:161:8 %s | FileCheck -check-prefix=CHECK-EXTERNAL %s
> +// CHECK-EXTERNAL: 160:12 ObjCInterfaceDecl=ExtCls:160:12 (external lang: Swift, defined: some_module, gen: 1)
> +// CHECK-EXTERNAL: 161:8 ObjCInstanceMethodDecl=method:161:8 (external lang: Swift, defined: some_module, gen: 1)
> +C
> \ No newline at end of file
>
> Modified: cfe/trunk/tools/c-index-test/c-index-test.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=302677&r1=302676&r2=302677&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=302677&r1=302676&r2=302677&view=diff>
> ==============================================================================
> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
> +++ cfe/trunk/tools/c-index-test/c-index-test.c Wed May 10 10:10:36 2017
> @@ -809,6 +809,19 @@ static void PrintCursor(CXCursor Cursor,
> if (clang_Cursor_isObjCOptional(Cursor))
> printf(" (@optional)");
>
> + {
> + CXString language;
> + CXString definedIn;
> + unsigned generated;
> + if (clang_Cursor_isExternalSymbol(Cursor, &language, &definedIn,
> + &generated)) {
> + printf(" (external lang: %s, defined: %s, gen: %d)",
> + clang_getCString(language), clang_getCString(definedIn), generated);
> + clang_disposeString(language);
> + clang_disposeString(definedIn);
> + }
> + }
> +
> if (Cursor.kind == CXCursor_IBOutletCollectionAttr) {
> CXType T =
> clang_getCanonicalType(clang_getIBOutletCollectionType(Cursor));
>
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=302677&r1=302676&r2=302677&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=302677&r1=302676&r2=302677&view=diff>
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Wed May 10 10:10:36 2017
> @@ -7479,6 +7479,35 @@ unsigned clang_Cursor_isVariadic(CXCurso
> return 0;
> }
>
> +unsigned clang_Cursor_isExternalSymbol(CXCursor C,
> + CXString *language, CXString *definedIn,
> + unsigned *isGenerated) {
> + if (!clang_isDeclaration(C.kind))
> + return 0;
> +
> + const Decl *D = getCursorDecl(C);
> +
> + auto getExternalSymAttr = [](const Decl *D) -> ExternalSourceSymbolAttr* {
> + if (auto *attr = D->getAttr<ExternalSourceSymbolAttr>())
> + return attr;
> + if (auto *dcd = dyn_cast<Decl>(D->getDeclContext())) {
> + if (auto *attr = dcd->getAttr<ExternalSourceSymbolAttr>())
> + return attr;
> + }
> + return nullptr;
> + };
>
> I think this pattern is used in the indexing code as well. We should probably create a method in Decl that does this search for ExternalSourceSymbol attribute.
>
> + if (auto *attr = getExternalSymAttr(D)) {
> + if (language)
> + *language = cxstring::createDup(attr->getLanguage());
> + if (definedIn)
> + *definedIn = cxstring::createDup(attr->getDefinedIn());
> + if (isGenerated)
> + *isGenerated = attr->getGeneratedDeclaration();
> + return 1;
> + }
> + return 0;
> +}
> +
> CXSourceRange clang_Cursor_getCommentRange(CXCursor C) {
> if (!clang_isDeclaration(C.kind))
> return clang_getNullRange();
>
> Modified: cfe/trunk/tools/libclang/libclang.exports
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=302677&r1=302676&r2=302677&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=302677&r1=302676&r2=302677&view=diff>
> ==============================================================================
> --- cfe/trunk/tools/libclang/libclang.exports (original)
> +++ cfe/trunk/tools/libclang/libclang.exports Wed May 10 10:10:36 2017
> @@ -35,6 +35,7 @@ clang_Cursor_getReceiverType
> clang_Cursor_isAnonymous
> clang_Cursor_isBitField
> clang_Cursor_isDynamicCall
> +clang_Cursor_isExternalSymbol
> clang_Cursor_isNull
> clang_Cursor_isObjCOptional
> clang_Cursor_isVariadic
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170510/d16caab5/attachment-0001.html>
More information about the cfe-commits
mailing list