[libclang] Change clang_findReferencesInFile and clang_findIncludesInFile to return an enum,

as suggested by Jordan.

llvm-svn: 176732
This commit is contained in:
Argyrios Kyrtzidis 2013-03-08 22:47:41 +00:00
parent f9b76cd8b5
commit 51c3318b01
2 changed files with 53 additions and 41 deletions

View File

@ -5006,6 +5006,23 @@ typedef struct {
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 @@ typedef struct {
* 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 @@ CINDEX_LINKAGE int clang_findReferencesInFile(CXCursor cursor, CXFile file,
* \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 @@ typedef enum CXVisitorResult
(^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

View File

@ -409,29 +409,29 @@ static bool findIncludesInFile(CXTranslationUnit TU, const FileEntry *File,
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 @@ int clang_findReferencesInFile(CXCursor cursor, CXFile file,
ASTUnit *CXXUnit = cxcursor::getCursorASTUnit(cursor);
if (!CXXUnit)
return 1;
return CXResult_Invalid;
ASTUnit::ConcurrencyCheck Check(*CXXUnit);
@ -449,8 +449,8 @@ int clang_findReferencesInFile(CXCursor cursor, CXFile file,
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 @@ int clang_findReferencesInFile(CXCursor cursor, CXFile file,
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 @@ int clang_findIncludesInFile(CXTranslationUnit TU, CXFile file,
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 @@ static enum CXVisitorResult _visitCursorAndRange(void *context,
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);