X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FbasicTypes%2FSrcLoc.lhs;fp=ghc%2Fcompiler%2FbasicTypes%2FSrcLoc.lhs;h=95b7172c1b9494f01d7a09b4331a9493e7ff6a6c;hb=864388a3bddc77623b438b83070722da1629bf16;hp=8d02e03ace127a85dc02f6b3c0c77e2bc0b404d1;hpb=a022fe5001d0d3da666b331aeb6f36f7b6521a72;p=ghc-hetmet.git diff --git a/ghc/compiler/basicTypes/SrcLoc.lhs b/ghc/compiler/basicTypes/SrcLoc.lhs index 8d02e03..95b7172 100644 --- a/ghc/compiler/basicTypes/SrcLoc.lhs +++ b/ghc/compiler/basicTypes/SrcLoc.lhs @@ -284,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