[project @ 2004-12-30 22:14:59 by simonpj]
[ghc-hetmet.git] / ghc / compiler / basicTypes / SrcLoc.lhs
index 8b25be9..95b7172 100644 (file)
@@ -65,20 +65,6 @@ data SrcLoc
   | ImportedLoc        String          -- Module name
 
   | UnhelpfulLoc FastString    -- Just a general indication
-
-{-
-data SrcSpan
-  = WiredInSpan
-
-       -- A precise source file span
-  | SrcSpan    FastString      -- file name
-               FastInt         -- beginning line
-               FastInt         -- beginning column
-               FastInt         -- end line
-               FastInt         -- end column           
-
-  | UnhelpfulSrcSpan FastString        -- Just a general indication
--}
 \end{code}
 
 Note that an entity might be imported via more than one route, and
@@ -298,21 +284,25 @@ mkSrcSpan loc1 loc2
        file = srcLocFile loc1
 
 combineSrcSpans        :: SrcSpan -> SrcSpan -> SrcSpan
+-- Assumes the 'file' part is the same in both
 combineSrcSpans        (ImportedSpan str) _  = ImportedSpan str
 combineSrcSpans        (UnhelpfulSpan str) r = r -- this seems more useful
 combineSrcSpans        _ (ImportedSpan str)  = ImportedSpan str
 combineSrcSpans        l (UnhelpfulSpan str) = l
 combineSrcSpans        start end 
- | line1 == line2 = if col1 == col2
-                       then SrcSpanPoint file line1 col1
-                       else SrcSpanOneLine file line1 col1 col2
- | otherwise      = SrcSpanMultiLine file line1 col1 line2 col2
+ = case line1 `compare` line2 of
+     EQ -> case col1 `compare` col2 of
+               EQ -> SrcSpanPoint file line1 col1
+               LT -> SrcSpanOneLine file line1 col1 col2
+               GT -> SrcSpanOneLine file line1 col2 col1
+     LT -> SrcSpanMultiLine file line1 col1 line2 col2
+     GT -> SrcSpanMultiLine file line2 col2 line1 col1
   where
        line1 = srcSpanStartLine start
+       col1  = srcSpanStartCol start
        line2 = srcSpanEndLine end
-       col1 = srcSpanStartCol start
-       col2 = srcSpanEndCol end
-       file = srcSpanFile start
+       col2  = srcSpanEndCol end
+       file  = srcSpanFile start
 
 instance Outputable SrcSpan where
     ppr span