[clang] Remove duplicate API (PR #132776)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 2 06:29:56 PDT 2025
https://github.com/Jugst3r updated https://github.com/llvm/llvm-project/pull/132776
>From bb4be5c1ab45dc927cfcada9b666d4ef0c1d863d Mon Sep 17 00:00:00 2001
From: Matthieu Eyraud <eyraud at adacore.com>
Date: Mon, 24 Mar 2025 14:38:50 +0000
Subject: [PATCH] libclang: deprecate duplicate API
Explicitly mark the clang_Cursor_getBinaryOpcode and
clang_Cursor_getBinaryOpcodeStr as deprecated and mutualize the
implementation, accounting for comments made when implementing the
second implementation in the first implementation.
---
clang/bindings/python/clang/cindex.py | 4 +-
clang/docs/ReleaseNotes.rst | 4 ++
clang/include/clang-c/Index.h | 73 +++++++++++++------------
clang/tools/c-index-test/c-index-test.c | 6 +-
clang/tools/libclang/CIndex.cpp | 35 ++++--------
5 files changed, 58 insertions(+), 64 deletions(-)
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index e881bf131d6c4..2dc7ed7aaad98 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -1876,7 +1876,7 @@ def binary_operator(self):
"""
if not hasattr(self, "_binopcode"):
- self._binopcode = conf.lib.clang_Cursor_getBinaryOpcode(self)
+ self._binopcode = conf.lib.clang_getCursorBinaryOperatorKind(self)
return BinaryOperator.from_id(self._binopcode)
@@ -4043,7 +4043,7 @@ def set_property(self, property, value):
("clang_Cursor_getTemplateArgumentType", [Cursor, c_uint], Type),
("clang_Cursor_getTemplateArgumentValue", [Cursor, c_uint], c_longlong),
("clang_Cursor_getTemplateArgumentUnsignedValue", [Cursor, c_uint], c_ulonglong),
- ("clang_Cursor_getBinaryOpcode", [Cursor], c_int),
+ ("clang_getCursorBinaryOperatorKind", [Cursor], c_int),
("clang_Cursor_getBriefCommentText", [Cursor], _CXString),
("clang_Cursor_getRawCommentText", [Cursor], _CXString),
("clang_Cursor_getOffsetOfField", [Cursor], c_longlong),
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 8182bccdd2da8..eb56a9a6ba8c6 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -483,6 +483,10 @@ libclang
- Fixed a buffer overflow in ``CXString`` implementation. The fix may result in
increased memory allocation.
+- Deprecate ``clang_Cursor_GetBinaryOpcode`` and ``clang_Cursor_getBinaryOpcodeStr``
+ implementations, which are duplicates of ``clang_getCursorBinaryOperatorKind``
+ and ``clang_getBinaryOperatorKindSpelling`` respectively.
+
Code Completion
---------------
diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h
index 38e2417dcd181..21df5dba1e38a 100644
--- a/clang/include/clang-c/Index.h
+++ b/clang/include/clang-c/Index.h
@@ -3882,12 +3882,16 @@ enum CX_BinaryOperatorKind {
/**
* \brief Returns the operator code for the binary operator.
+ *
+ * @deprecated: use clang_getCursorBinaryOperatorKind instead.
*/
CINDEX_LINKAGE enum CX_BinaryOperatorKind
clang_Cursor_getBinaryOpcode(CXCursor C);
/**
* \brief Returns a string containing the spelling of the binary operator.
+ *
+ * @deprecated: use clang_getBinaryOperatorKindSpelling instead
*/
CINDEX_LINKAGE CXString
clang_Cursor_getBinaryOpcodeStr(enum CX_BinaryOperatorKind Op);
@@ -6671,73 +6675,74 @@ CINDEX_LINKAGE unsigned clang_visitCXXMethods(CXType T, CXFieldVisitor visitor,
*/
enum CXBinaryOperatorKind {
/** This value describes cursors which are not binary operators. */
- CXBinaryOperator_Invalid,
+ CXBinaryOperator_Invalid = 0,
/** C++ Pointer - to - member operator. */
- CXBinaryOperator_PtrMemD,
+ CXBinaryOperator_PtrMemD = 1,
/** C++ Pointer - to - member operator. */
- CXBinaryOperator_PtrMemI,
+ CXBinaryOperator_PtrMemI = 2,
/** Multiplication operator. */
- CXBinaryOperator_Mul,
+ CXBinaryOperator_Mul = 3,
/** Division operator. */
- CXBinaryOperator_Div,
+ CXBinaryOperator_Div = 4,
/** Remainder operator. */
- CXBinaryOperator_Rem,
+ CXBinaryOperator_Rem = 5,
/** Addition operator. */
- CXBinaryOperator_Add,
+ CXBinaryOperator_Add = 6,
/** Subtraction operator. */
- CXBinaryOperator_Sub,
+ CXBinaryOperator_Sub = 7,
/** Bitwise shift left operator. */
- CXBinaryOperator_Shl,
+ CXBinaryOperator_Shl = 8,
/** Bitwise shift right operator. */
- CXBinaryOperator_Shr,
+ CXBinaryOperator_Shr = 9,
/** C++ three-way comparison (spaceship) operator. */
- CXBinaryOperator_Cmp,
+ CXBinaryOperator_Cmp = 10,
/** Less than operator. */
- CXBinaryOperator_LT,
+ CXBinaryOperator_LT = 11,
/** Greater than operator. */
- CXBinaryOperator_GT,
+ CXBinaryOperator_GT = 12,
/** Less or equal operator. */
- CXBinaryOperator_LE,
+ CXBinaryOperator_LE = 13,
/** Greater or equal operator. */
- CXBinaryOperator_GE,
+ CXBinaryOperator_GE = 14,
/** Equal operator. */
- CXBinaryOperator_EQ,
+ CXBinaryOperator_EQ = 15,
/** Not equal operator. */
- CXBinaryOperator_NE,
+ CXBinaryOperator_NE = 16,
/** Bitwise AND operator. */
- CXBinaryOperator_And,
+ CXBinaryOperator_And = 17,
/** Bitwise XOR operator. */
- CXBinaryOperator_Xor,
+ CXBinaryOperator_Xor = 18,
/** Bitwise OR operator. */
- CXBinaryOperator_Or,
+ CXBinaryOperator_Or = 19,
/** Logical AND operator. */
- CXBinaryOperator_LAnd,
+ CXBinaryOperator_LAnd = 20,
/** Logical OR operator. */
- CXBinaryOperator_LOr,
+ CXBinaryOperator_LOr = 21,
/** Assignment operator. */
- CXBinaryOperator_Assign,
+ CXBinaryOperator_Assign = 22,
/** Multiplication assignment operator. */
- CXBinaryOperator_MulAssign,
+ CXBinaryOperator_MulAssign = 23,
/** Division assignment operator. */
- CXBinaryOperator_DivAssign,
+ CXBinaryOperator_DivAssign = 24,
/** Remainder assignment operator. */
- CXBinaryOperator_RemAssign,
+ CXBinaryOperator_RemAssign = 25,
/** Addition assignment operator. */
- CXBinaryOperator_AddAssign,
+ CXBinaryOperator_AddAssign = 26,
/** Subtraction assignment operator. */
- CXBinaryOperator_SubAssign,
+ CXBinaryOperator_SubAssign = 27,
/** Bitwise shift left assignment operator. */
- CXBinaryOperator_ShlAssign,
+ CXBinaryOperator_ShlAssign = 28,
/** Bitwise shift right assignment operator. */
- CXBinaryOperator_ShrAssign,
+ CXBinaryOperator_ShrAssign = 29,
/** Bitwise AND assignment operator. */
- CXBinaryOperator_AndAssign,
+ CXBinaryOperator_AndAssign = 30,
/** Bitwise XOR assignment operator. */
- CXBinaryOperator_XorAssign,
+ CXBinaryOperator_XorAssign = 31,
/** Bitwise OR assignment operator. */
- CXBinaryOperator_OrAssign,
+ CXBinaryOperator_OrAssign = 32,
/** Comma operator. */
- CXBinaryOperator_Comma
+ CXBinaryOperator_Comma = 33,
+ CXBinaryOperator_Last = CXBinaryOperator_Comma
};
/**
diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c
index 7711df3fd9209..35255a9d7f871 100644
--- a/clang/tools/c-index-test/c-index-test.c
+++ b/clang/tools/c-index-test/c-index-test.c
@@ -1863,14 +1863,14 @@ static enum CXChildVisitResult PrintTypeSize(CXCursor cursor, CXCursor p,
static enum CXChildVisitResult PrintBinOps(CXCursor C, CXCursor p,
CXClientData d) {
enum CXCursorKind ck = clang_getCursorKind(C);
- enum CX_BinaryOperatorKind bok;
+ enum CXBinaryOperatorKind bok;
CXString opstr;
if (ck != CXCursor_BinaryOperator && ck != CXCursor_CompoundAssignOperator)
return CXChildVisit_Recurse;
PrintCursor(C, NULL);
- bok = clang_Cursor_getBinaryOpcode(C);
- opstr = clang_Cursor_getBinaryOpcodeStr(bok);
+ bok = clang_getCursorBinaryOperatorKind(C);
+ opstr = clang_getBinaryOperatorKindSpelling(bok);
printf(" BinOp=%s %d\n", clang_getCString(opstr), bok);
clang_disposeString(opstr);
return CXChildVisit_Recurse;
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index e498a875bbbe8..7925b3b2c6194 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -5442,7 +5442,8 @@ CXString clang_getCursorSpelling(CXCursor C) {
if (C.kind == CXCursor_BinaryOperator ||
C.kind == CXCursor_CompoundAssignOperator) {
- return clang_Cursor_getBinaryOpcodeStr(clang_Cursor_getBinaryOpcode(C));
+ return clang_getBinaryOperatorKindSpelling(
+ clang_getCursorBinaryOperatorKind(C));
}
const Decl *D = getDeclFromExpr(getCursorExpr(C));
@@ -9211,32 +9212,13 @@ unsigned clang_Cursor_isExternalSymbol(CXCursor C, CXString *language,
}
enum CX_BinaryOperatorKind clang_Cursor_getBinaryOpcode(CXCursor C) {
- if (C.kind != CXCursor_BinaryOperator &&
- C.kind != CXCursor_CompoundAssignOperator) {
- return CX_BO_Invalid;
- }
-
- const Expr *D = getCursorExpr(C);
- if (const auto *BinOp = dyn_cast<BinaryOperator>(D)) {
- switch (BinOp->getOpcode()) {
-#define BINARY_OPERATION(Name, Spelling) \
- case BO_##Name: \
- return CX_BO_##Name;
-#include "clang/AST/OperationKinds.def"
- }
- }
-
- return CX_BO_Invalid;
+ return static_cast<CX_BinaryOperatorKind>(
+ clang_getCursorBinaryOperatorKind(C));
}
CXString clang_Cursor_getBinaryOpcodeStr(enum CX_BinaryOperatorKind Op) {
- if (Op > CX_BO_LAST)
- return cxstring::createEmpty();
-
- return cxstring::createDup(
- // BinaryOperator::getOpcodeStr has no case for CX_BO_Invalid,
- // so subtract 1
- BinaryOperator::getOpcodeStr(static_cast<BinaryOperatorKind>(Op - 1)));
+ return clang_getBinaryOperatorKindSpelling(
+ static_cast<CXBinaryOperatorKind>(Op));
}
CXSourceRange clang_Cursor_getCommentRange(CXCursor C) {
@@ -10111,7 +10093,10 @@ cxindex::Logger::~Logger() {
}
CXString clang_getBinaryOperatorKindSpelling(enum CXBinaryOperatorKind kind) {
- return cxstring::createRef(
+ if (kind > CXBinaryOperator_Last)
+ return cxstring::createEmpty();
+
+ return cxstring::createDup(
BinaryOperator::getOpcodeStr(static_cast<BinaryOperatorKind>(kind - 1)));
}
More information about the cfe-commits
mailing list