[libclang] Change clang_findReferencesInFile and clang_findIncludesInFile to return an enum,
as suggested by Jordan.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176732 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index df7fa40..07c0ffb 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -5006,6 +5006,23 @@
enum CXVisitorResult (*visit)(void *context, CXCursor, CXSourceRange);
} CXCursorAndRangeVisitor;
+typedef enum {
+ /**
+ * \brief Function returned successfully.
+ */
+ CXResult_Success = 0,
+ /**
+ * \brief One of the parameters was invalid for the function.
+ */
+ CXResult_Invalid = 1,
+ /**
+ * \brief The function was terminated by a callback (e.g. it returned
+ * CXVisit_Break)
+ */
+ CXResult_VisitBreak = 2
+
+} CXResult;
+
/**
* \brief Find references of a declaration in a specific file.
*
@@ -5018,13 +5035,10 @@
* The CXSourceRange will point inside the file; if the reference is inside
* a macro (and not a macro argument) the CXSourceRange will be invalid.
*
- * \returns
- * 1 : if a parameter was invalid
- * -1 : if the callback returned CXVisit_Break,
- * otherwise returns 0.
+ * \returns one of the CXResult enumerators.
*/
-CINDEX_LINKAGE int clang_findReferencesInFile(CXCursor cursor, CXFile file,
- CXCursorAndRangeVisitor visitor);
+CINDEX_LINKAGE CXResult clang_findReferencesInFile(CXCursor cursor, CXFile file,
+ CXCursorAndRangeVisitor visitor);
/**
* \brief Find #import/#include directives in a specific file.
@@ -5036,13 +5050,11 @@
* \param visitor callback that will receive pairs of CXCursor/CXSourceRange for
* each directive found.
*
- * \returns
- * 1 : if a parameter was invalid
- * -1 : if the callback returned CXVisit_Break,
- * otherwise returns 0.
+ * \returns one of the CXResult enumerators.
*/
-CINDEX_LINKAGE int clang_findIncludesInFile(CXTranslationUnit TU, CXFile file,
- CXCursorAndRangeVisitor visitor);
+CINDEX_LINKAGE CXResult clang_findIncludesInFile(CXTranslationUnit TU,
+ CXFile file,
+ CXCursorAndRangeVisitor visitor);
#ifdef __has_feature
# if __has_feature(blocks)
@@ -5051,12 +5063,12 @@
(^CXCursorAndRangeVisitorBlock)(CXCursor, CXSourceRange);
CINDEX_LINKAGE
-int clang_findReferencesInFileWithBlock(CXCursor, CXFile,
- CXCursorAndRangeVisitorBlock);
+CXResult clang_findReferencesInFileWithBlock(CXCursor, CXFile,
+ CXCursorAndRangeVisitorBlock);
CINDEX_LINKAGE
-int clang_findIncludesInFileWithBlock(CXTranslationUnit, CXFile,
- CXCursorAndRangeVisitorBlock);
+CXResult clang_findIncludesInFileWithBlock(CXTranslationUnit, CXFile,
+ CXCursorAndRangeVisitorBlock);
# endif
#endif
diff --git a/tools/libclang/CIndexHigh.cpp b/tools/libclang/CIndexHigh.cpp
index 0457a32..2a55af5 100644
--- a/tools/libclang/CIndexHigh.cpp
+++ b/tools/libclang/CIndexHigh.cpp
@@ -409,29 +409,29 @@
extern "C" {
-int clang_findReferencesInFile(CXCursor cursor, CXFile file,
- CXCursorAndRangeVisitor visitor) {
+CXResult clang_findReferencesInFile(CXCursor cursor, CXFile file,
+ CXCursorAndRangeVisitor visitor) {
LogRef Log = Logger::make(LLVM_FUNCTION_NAME);
if (clang_Cursor_isNull(cursor)) {
if (Log)
*Log << "Null cursor";
- return 1;
+ return CXResult_Invalid;
}
if (cursor.kind == CXCursor_NoDeclFound) {
if (Log)
*Log << "Got CXCursor_NoDeclFound";
- return 1;
+ return CXResult_Invalid;
}
if (!file) {
if (Log)
*Log << "Null file";
- return 1;
+ return CXResult_Invalid;
}
if (!visitor.visit) {
if (Log)
*Log << "Null visitor";
- return 1;
+ return CXResult_Invalid;
}
if (Log)
@@ -439,7 +439,7 @@
ASTUnit *CXXUnit = cxcursor::getCursorASTUnit(cursor);
if (!CXXUnit)
- return 1;
+ return CXResult_Invalid;
ASTUnit::ConcurrencyCheck Check(*CXXUnit);
@@ -449,8 +449,8 @@
cursor,
static_cast<const FileEntry *>(file),
visitor))
- return -1; // visitation break;
- return 0;
+ return CXResult_VisitBreak;
+ return CXResult_Success;
}
// We are interested in semantics of identifiers so for C++ constructor exprs
@@ -467,35 +467,35 @@
if (!clang_isDeclaration(refCursor.kind)) {
if (Log)
*Log << "cursor is not referencing a declaration";
- return 1;
+ return CXResult_Invalid;
}
if (findIdRefsInFile(cxcursor::getCursorTU(cursor),
refCursor,
static_cast<const FileEntry *>(file),
visitor))
- return -1; //visitation break;
- return 0;
+ return CXResult_VisitBreak;
+ return CXResult_Success;
}
-int clang_findIncludesInFile(CXTranslationUnit TU, CXFile file,
+CXResult clang_findIncludesInFile(CXTranslationUnit TU, CXFile file,
CXCursorAndRangeVisitor visitor) {
LogRef Log = Logger::make(LLVM_FUNCTION_NAME);
if (!TU) {
if (Log)
*Log << "Null CXTranslationUnit";
- return 1;
+ return CXResult_Invalid;
}
if (!file) {
if (Log)
*Log << "Null file";
- return 1;
+ return CXResult_Invalid;
}
if (!visitor.visit) {
if (Log)
*Log << "Null visitor";
- return 1;
+ return CXResult_Invalid;
}
if (Log)
@@ -503,13 +503,13 @@
ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
if (!CXXUnit)
- return 1;
+ return CXResult_Invalid;
ASTUnit::ConcurrencyCheck Check(*CXXUnit);
if (findIncludesInFile(TU, static_cast<const FileEntry *>(file), visitor))
- return -1; //visitation break;
- return 0;
+ return CXResult_VisitBreak;
+ return CXResult_Success;
}
static enum CXVisitorResult _visitCursorAndRange(void *context,
@@ -519,17 +519,17 @@
return INVOKE_BLOCK2(block, cursor, range);
}
-int clang_findReferencesInFileWithBlock(CXCursor cursor,
- CXFile file,
- CXCursorAndRangeVisitorBlock block) {
+CXResult clang_findReferencesInFileWithBlock(CXCursor cursor,
+ CXFile file,
+ CXCursorAndRangeVisitorBlock block) {
CXCursorAndRangeVisitor visitor = { block,
block ? _visitCursorAndRange : 0 };
return clang_findReferencesInFile(cursor, file, visitor);
}
-int clang_findIncludesInFileWithBlock(CXTranslationUnit TU,
- CXFile file,
- CXCursorAndRangeVisitorBlock block) {
+CXResult clang_findIncludesInFileWithBlock(CXTranslationUnit TU,
+ CXFile file,
+ CXCursorAndRangeVisitorBlock block) {
CXCursorAndRangeVisitor visitor = { block,
block ? _visitCursorAndRange : 0 };
return clang_findIncludesInFile(TU, file, visitor);