]> granicus.if.org Git - clang/commitdiff
c-index-test: Simplify file scanning code.
authorDaniel Dunbar <daniel@zuster.org>
Sun, 14 Feb 2010 08:32:32 +0000 (08:32 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sun, 14 Feb 2010 08:32:32 +0000 (08:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96159 91177308-0d34-0410-b5e6-96231b3b80d8

tools/c-index-test/c-index-test.c

index 4f56efe1570c7c292b36319ca2a8b5cf01f697eb..b7ea47e67536c75fd7bfd6f8dc572993e57d4b8c 100644 (file)
@@ -579,12 +579,10 @@ static int perform_file_scan(const char *ast_file, const char *source_file,
   CXIndex Idx;
   CXTranslationUnit TU;
   FILE *fp;
-  unsigned line;
-  CXCursor prevCursor;
+  CXCursor prevCursor = clang_getNullCursor();
   CXFile file;
-  unsigned printed;
-  unsigned start_line, start_col, last_line, last_col;
-  size_t i;
+  unsigned line = 1, col = 1;
+  unsigned start_line = 1, start_col = 1, prev_line = 0, prev_col = 0;
   
   if (!(Idx = clang_createIndex(/* excludeDeclsFromPCH */ 1))) {
     fprintf(stderr, "Could not create Index\n");
@@ -599,52 +597,36 @@ static int perform_file_scan(const char *ast_file, const char *source_file,
     return 1;
   }
   
-  line = 0;
-  prevCursor = clang_getNullCursor();
-  printed = 0;
-  start_line = last_line = 1;
-  start_col = last_col = 1;
-  
   file = clang_getFile(TU, source_file);
-  while (!feof(fp)) {
-    size_t len = 0;
-    int c;
-
-    while ((c = fgetc(fp)) != EOF) {
-      len++;
-      if (c == '\n')
-        break;
+  for (;;) {
+    CXCursor cursor;
+    int c = fgetc(fp);
+
+    if (c == '\n') {
+      ++line;
+      col = 1;
+    } else
+      ++col;
+
+    /* Check the cursor at this position, and dump the previous one if we have
+     * found something new.
+     */
+    cursor = clang_getCursor(TU, clang_getLocation(TU, file, line, col));
+    if ((c == EOF || !clang_equalCursors(cursor, prevCursor)) &&
+        prevCursor.kind != CXCursor_InvalidFile) {
+      print_cursor_file_scan(prevCursor, start_line, start_col,
+                             prev_line, prev_col, prefix);
+      start_line = line;
+      start_col = col;
     }
+    if (c == EOF)
+      break;
 
-    ++line;
-    
-    for (i = 0; i < len ; ++i) {
-      CXCursor cursor;
-      cursor = clang_getCursor(TU, clang_getLocation(TU, file, line, i+1));
-
-      if (!clang_equalCursors(cursor, prevCursor) &&
-          prevCursor.kind != CXCursor_InvalidFile) {
-        print_cursor_file_scan(prevCursor, start_line, start_col,
-                               last_line, last_col, prefix);
-        printed = 1;
-        start_line = line;
-        start_col = (unsigned) i+1;
-      }
-      else {
-        printed = 0;
-      }
-      
-      prevCursor = cursor;
-      last_line = line;
-      last_col = (unsigned) i+1;
-    }    
+    prevCursor = cursor;
+    prev_line = line;
+    prev_col = col;
   }
   
-  if (!printed && prevCursor.kind != CXCursor_InvalidFile) {
-    print_cursor_file_scan(prevCursor, start_line, start_col,
-                           last_line, last_col, prefix);
-  }  
-  
   fclose(fp);
   return 0;
 }