[cfe-commits] r96162 - in /cfe/trunk: bindings/python/tests/cindex/test_diagnostics.py include/clang-c/Index.h tools/CIndex/CIndex.cpp tools/c-index-test/c-index-test.c

Daniel Dunbar daniel at zuster.org
Sun Feb 14 02:02:58 PST 2010


Author: ddunbar
Date: Sun Feb 14 04:02:57 2010
New Revision: 96162

URL: http://llvm.org/viewvc/llvm-project?rev=96162&view=rev
Log:
CIndex: Switch CXSourceRange to proper half-open intervals.
 - Doug, please review.

Modified:
    cfe/trunk/bindings/python/tests/cindex/test_diagnostics.py
    cfe/trunk/include/clang-c/Index.h
    cfe/trunk/tools/CIndex/CIndex.cpp
    cfe/trunk/tools/c-index-test/c-index-test.c

Modified: cfe/trunk/bindings/python/tests/cindex/test_diagnostics.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/python/tests/cindex/test_diagnostics.py?rev=96162&r1=96161&r2=96162&view=diff

==============================================================================
--- cfe/trunk/bindings/python/tests/cindex/test_diagnostics.py (original)
+++ cfe/trunk/bindings/python/tests/cindex/test_diagnostics.py Sun Feb 14 04:02:57 2010
@@ -44,5 +44,5 @@
     assert tu.diagnostics[0].fixits[0].range.start.line == 1
     assert tu.diagnostics[0].fixits[0].range.start.column == 26
     assert tu.diagnostics[0].fixits[0].range.end.line == 1
-    assert tu.diagnostics[0].fixits[0].range.end.column == 29
+    assert tu.diagnostics[0].fixits[0].range.end.column == 30
     assert tu.diagnostics[0].fixits[0].value == '.f0 = '

Modified: cfe/trunk/include/clang-c/Index.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=96162&r1=96161&r2=96162&view=diff

==============================================================================
--- cfe/trunk/include/clang-c/Index.h (original)
+++ cfe/trunk/include/clang-c/Index.h Sun Feb 14 04:02:57 2010
@@ -257,7 +257,7 @@
 } CXSourceLocation;
 
 /**
- * \brief Identifies a range of source locations in the source code.
+ * \brief Identifies a half-open character range in the source code.
  *
  * Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
  * starting and end locations from a source range, respectively.

Modified: cfe/trunk/tools/CIndex/CIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=96162&r1=96161&r2=96162&view=diff

==============================================================================
--- cfe/trunk/tools/CIndex/CIndex.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndex.cpp Sun Feb 14 04:02:57 2010
@@ -139,9 +139,11 @@
                                           SourceRange R2) {
   assert(R1.isValid() && "First range is invalid?");
   assert(R2.isValid() && "Second range is invalid?");
-  if (SM.isBeforeInTranslationUnit(R1.getEnd(), R2.getBegin()))
+  if (R1.getEnd() == R2.getBegin() ||
+      SM.isBeforeInTranslationUnit(R1.getEnd(), R2.getBegin()))
     return RangeBefore;
-  if (SM.isBeforeInTranslationUnit(R2.getEnd(), R1.getBegin()))
+  if (R2.getEnd() == R1.getBegin() ||
+      SM.isBeforeInTranslationUnit(R2.getEnd(), R1.getBegin()))
     return RangeAfter;
   return RangeOverlap;
 }
@@ -180,9 +182,6 @@
   // Preprocessor::getLocForEndOfToken().
   if (InstLoc.isValid()) {
     unsigned Length = Lexer::MeasureTokenLength(InstLoc, SM, LangOpts);
-    // FIXME: Temporarily represent as closed range to preserve API
-    // compatibility.
-    if (Length) --Length;
     EndLoc = EndLoc.getFileLocWithOffset(Length);
   }
 
@@ -235,7 +234,7 @@
   /// \brief Determine whether this particular source range comes before, comes 
   /// after, or overlaps the region of interest. 
   ///
-  /// \param R a source range retrieved from the abstract syntax tree.
+  /// \param R a half-open source range retrieved from the abstract syntax tree.
   RangeComparisonResult CompareRegionOfInterest(SourceRange R); 
   
 public:
@@ -319,12 +318,6 @@
 } // end anonymous namespace
 
 RangeComparisonResult CursorVisitor::CompareRegionOfInterest(SourceRange R) {
-  // Move the end of the input range to the end of the last token in that
-  // range.
-  SourceLocation NewEnd
-    = TU->getPreprocessor().getLocForEndOfToken(R.getEnd(), 1);
-  if (NewEnd.isValid())
-    R.setEnd(NewEnd);
   return RangeCompare(TU->getSourceManager(), R, RegionOfInterest);
 }
 
@@ -444,12 +437,15 @@
 bool CursorVisitor::VisitDeclContext(DeclContext *DC) {
   for (DeclContext::decl_iterator
        I = DC->decls_begin(), E = DC->decls_end(); I != E; ++I) {
+    CXCursor Cursor = MakeCXCursor(*I, TU);
+
     if (RegionOfInterest.isValid()) {
-      SourceRange R = (*I)->getSourceRange();
-      if (R.isInvalid())
+      SourceRange Range =
+        cxloc::translateCXSourceRange(clang_getCursorExtent(Cursor));
+      if (Range.isInvalid())
         continue;
-      
-      switch (CompareRegionOfInterest(R)) {
+
+      switch (CompareRegionOfInterest(Range)) {
       case RangeBefore:
         // This declaration comes before the region of interest; skip it.
         continue;
@@ -464,7 +460,7 @@
       }      
     }
     
-    if (Visit(MakeCXCursor(*I, TU), true))
+    if (Visit(Cursor, true))
       return true;
   }
   
@@ -1194,7 +1190,7 @@
   CXSourceRange Result = { { 0, 0 }, 0, 0 };
   return Result;
 }
-  
+
 CXSourceRange clang_getRange(CXSourceLocation begin, CXSourceLocation end) {
   if (begin.ptr_data[0] != end.ptr_data[0] ||
       begin.ptr_data[1] != end.ptr_data[1])
@@ -1468,7 +1464,7 @@
   SourceLocation SLoc = cxloc::translateSourceLocation(Loc);
   CXCursor Result = MakeCXCursorInvalid(CXCursor_NoDeclFound);
   if (SLoc.isValid()) {
-    SourceRange RegionOfInterest(SLoc, SLoc);
+    SourceRange RegionOfInterest(SLoc, SLoc.getFileLocWithOffset(1));
     
     // FIXME: Would be great to have a "hint" cursor, then walk from that
     // hint cursor upward until we find a cursor whose source range encloses
@@ -2118,8 +2114,7 @@
   SourceLocation End
     = cxloc::translateSourceLocation(clang_getTokenLocation(TU, 
                                                      Tokens[NumTokens - 1]));
-  RegionOfInterest.setEnd(CXXUnit->getPreprocessor().getLocForEndOfToken(End, 
-                                                                         1));
+  RegionOfInterest.setEnd(CXXUnit->getPreprocessor().getLocForEndOfToken(End));
   // FIXME: Would be great to have a "hint" cursor, then walk from that
   // hint cursor upward until we find a cursor whose source range encloses
   // the region of interest, rather than starting from the translation unit.

Modified: cfe/trunk/tools/c-index-test/c-index-test.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=96162&r1=96161&r2=96162&view=diff

==============================================================================
--- cfe/trunk/tools/c-index-test/c-index-test.c (original)
+++ cfe/trunk/tools/c-index-test/c-index-test.c Sun Feb 14 04:02:57 2010
@@ -34,9 +34,8 @@
 
 static void PrintExtent(FILE *out, unsigned begin_line, unsigned begin_column,
                         unsigned end_line, unsigned end_column) {
-  /* FIXME: Remove this + 1. */
   fprintf(out, "[%d:%d - %d:%d]", begin_line, begin_column,
-          end_line, end_column + 1);
+          end_line, end_column);
 }
 
 static unsigned CreateTranslationUnit(CXIndex Idx, const char *file,
@@ -616,7 +615,7 @@
     if ((c == EOF || !clang_equalCursors(cursor, prevCursor)) &&
         prevCursor.kind != CXCursor_InvalidFile) {
       print_cursor_file_scan(prevCursor, start_line, start_col,
-                             line, col - 1, prefix);
+                             line, col, prefix);
       start_line = line;
       start_col = col;
     }





More information about the cfe-commits mailing list