diff options
author | Luca Di Sera <luca.disera@qt.io> | 2023-01-23 13:14:17 +0100 |
---|---|---|
committer | Luca Di Sera <luca.disera@qt.io> | 2023-01-27 13:23:41 +0100 |
commit | 0a51bc731bcc2c27e4fe97957a83642d93d989be (patch) | |
tree | c8498bf5552ab2c7c2ca6877faf76ff3815565d2 /clang/tools/c-index-test/c-index-test.c | |
parent | 9922c78a67eb1eaffc0337dbda7777caa841929c (diff) | |
download | llvm-0a51bc731bcc2c27e4fe97957a83642d93d989be.zip llvm-0a51bc731bcc2c27e4fe97957a83642d93d989be.tar.gz llvm-0a51bc731bcc2c27e4fe97957a83642d93d989be.tar.bz2 |
Add clang_CXXMethod_isExplicit to libclang
The new method is a wrapper of `CXXConstructorDecl::isExplicit` and
`CXXConversionDecl::isExplicit`, allowing the user to recognize whether
the declaration pointed to by a cursor was marked with the explicit
specifier.
An export for the function, together with its documentation, was added
to "clang/include/clang-c/Index.h" with an implementation provided in
"clang/tools/libclang/CIndex.cpp".
The implementation is based on similar `clang_CXXMethod`
implementations, returning a falsy unsigned value when the cursor is not
a declaration, is not a declaration for a constructor or conversion
function or is not a relevant declaration that was marked with the
`explicit` specifier.
The new symbol was added to "clang/tools/libclang/libclang.map" to be
exported, under the LLVM16 tag.
"clang/tools/c-index-test/c-index-test.c" was modified to print a
specific tag, "(explicit)", for cursors that are recognized by
`clang_CXXMethod_isExplicit`.
Two new regression files, "explicit-constructor.cpp" and
"explicit-conversion-function.cpp", were added to "clang/test/Index", to
ensure that the behavior of the new function is correct for constructors
and conversion functions, respectively.
The "get-cursor.cpp", "index-file.cpp" and
"recursive-cxx-member-calls.cpp" regression files in "clang/test/Index"
were updated as they were affected by the new "(explicit)" tag.
A binding for the new function was added to libclang's python's
bindings, in "clang/bindings/python/clang/cindex.py", as the
"is_explicit_method" method under `Cursor`.
An accompanying test was added to
"clang/bindings/python/tests/cindex/test_cursor.py", mimicking the
regression tests for the C side.
The current release note for Clang, "clang/docs/ReleaseNotes.rst" was
modified to report the new addition under the "libclang" section.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D140756
Diffstat (limited to 'clang/tools/c-index-test/c-index-test.c')
-rw-r--r-- | clang/tools/c-index-test/c-index-test.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index cc425fc..983738d 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -916,6 +916,8 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) { printf(" (copy-assignment operator)"); if (clang_CXXMethod_isMoveAssignmentOperator(Cursor)) printf(" (move-assignment operator)"); + if (clang_CXXMethod_isExplicit(Cursor)) + printf(" (explicit)"); if (clang_CXXRecord_isAbstract(Cursor)) printf(" (abstract)"); if (clang_EnumDecl_isScoped(Cursor)) |