[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);