X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2FbasicTypes%2FSrcLoc.lhs;h=52c47178914697a588afc6e331062dfa2e5b4815;hb=1b1e5a46082b74cb7ce05c14def21416375a9545;hp=51d4318b0be60e8c785d8a28b959b04e4c7a62f3;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/basicTypes/SrcLoc.lhs b/compiler/basicTypes/SrcLoc.lhs index 51d4318..52c4717 100644 --- a/compiler/basicTypes/SrcLoc.lhs +++ b/compiler/basicTypes/SrcLoc.lhs @@ -1,11 +1,6 @@ % -% (c) The University of Glasgow, 1992-2003 +% (c) The University of Glasgow, 1992-2006 % -%************************************************************************ -%* * -\section[SrcLoc]{The @SrcLoc@ type} -%* * -%************************************************************************ \begin{code} module SrcLoc ( @@ -26,22 +21,23 @@ module SrcLoc ( pprDefnLoc, SrcSpan, -- Abstract - noSrcSpan, + noSrcSpan, mkGeneralSrcSpan, - isGoodSrcSpan, + isGoodSrcSpan, isOneLineSpan, mkSrcSpan, srcLocSpan, combineSrcSpans, - srcSpanFile, - srcSpanStartLine, srcSpanEndLine, - srcSpanStartCol, srcSpanEndCol, srcSpanStart, srcSpanEnd, + -- These are dubious exports, because they crash on some inputs, + -- used only in Lexer.x where we are sure what the Span looks like + srcSpanFile, srcSpanEndLine, srcSpanEndCol, + Located(..), getLoc, unLoc, noLoc, eqLocated, cmpLocated, combineLocs, addCLoc ) where #include "HsVersions.h" -import Util ( thenCmp ) +import Util import Outputable import FastString \end{code} @@ -156,7 +152,7 @@ instance Outputable SrcLoc where hcat [text "{-# LINE ", int src_line, space, char '\"', ftext src_path, text " #-}"] - ppr (ImportedLoc mod) = ptext SLIT("Imported from") <+> text mod + ppr (ImportedLoc mod) = ptext SLIT("Defined in") <+> text mod ppr (UnhelpfulLoc s) = ftext s \end{code} @@ -222,6 +218,19 @@ isGoodSrcSpan SrcSpanMultiLine{} = True isGoodSrcSpan SrcSpanPoint{} = True isGoodSrcSpan _ = False +isOneLineSpan :: SrcSpan -> Bool +-- True if the span is known to straddle more than one line +-- By default, it returns False +isOneLineSpan s + | isGoodSrcSpan s = srcSpanStartLine s == srcSpanEndLine s + | otherwise = False + +-------------------------------------------------------- +-- Don't export these four; +-- they panic on Imported, Unhelpful. +-- They are for internal use only +-- Urk! Some are needed for Lexer.x; see comment in export list + srcSpanStartLine SrcSpanOneLine{ srcSpanLine=l } = l srcSpanStartLine SrcSpanMultiLine{ srcSpanSLine=l } = l srcSpanStartLine SrcSpanPoint{ srcSpanLine=l } = l @@ -241,13 +250,13 @@ srcSpanEndCol SrcSpanOneLine{ srcSpanECol=c } = c srcSpanEndCol SrcSpanMultiLine{ srcSpanECol=c } = c srcSpanEndCol SrcSpanPoint{ srcSpanCol=c } = c srcSpanEndCol _ = panic "SrcLoc.srcSpanEndCol" +-------------------------------------------------------- srcSpanStart (ImportedSpan str) = ImportedLoc str srcSpanStart (UnhelpfulSpan str) = UnhelpfulLoc str -srcSpanStart s = - mkSrcLoc (srcSpanFile s) - (srcSpanStartLine s) - (srcSpanStartCol s) +srcSpanStart s = mkSrcLoc (srcSpanFile s) + (srcSpanStartLine s) + (srcSpanStartCol s) srcSpanEnd (ImportedSpan str) = ImportedLoc str srcSpanEnd (UnhelpfulSpan str) = UnhelpfulLoc str @@ -340,7 +349,7 @@ pprUserSpan (SrcSpanPoint src_path line col) char ':', int col ] -pprUserSpan (ImportedSpan mod) = ptext SLIT("Imported from") <+> quotes (text mod) +pprUserSpan (ImportedSpan mod) = ptext SLIT("Defined in") <+> text mod pprUserSpan (UnhelpfulSpan s) = ftext s \end{code}