X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FbasicTypes%2FSrcLoc.lhs;h=c3fca1db6434dd0ea1e4cd035792a04a801aafb0;hb=b085ee40c7f265a5977ea6ec1c415e573be5ff8c;hp=5eaf8e6e40f4cff8be53b5248e8038a25179a34b;hpb=30d559930fff086ad3a8ef4162e7d748d1e96b70;p=ghc-hetmet.git diff --git a/ghc/compiler/basicTypes/SrcLoc.lhs b/ghc/compiler/basicTypes/SrcLoc.lhs index 5eaf8e6..c3fca1d 100644 --- a/ghc/compiler/basicTypes/SrcLoc.lhs +++ b/ghc/compiler/basicTypes/SrcLoc.lhs @@ -11,15 +11,12 @@ module SrcLoc ( SrcLoc, -- Abstract - mkSrcLoc, - noSrcLoc, isNoSrcLoc, -- "I'm sorry, I haven't a clue" + mkSrcLoc, isGoodSrcLoc, + noSrcLoc, -- "I'm sorry, I haven't a clue" - mkIfaceSrcLoc, -- Unknown place in an interface - -- (this one can die eventually ToDo) - - mkBuiltinSrcLoc, -- Something wired into the compiler - - mkGeneratedSrcLoc, -- Code generated within the compiler + importedSrcLoc, -- Unknown place in an interface + builtinSrcLoc, -- Something wired into the compiler + generatedSrcLoc, -- Code generated within the compiler incSrcLine, replaceSrcLine, @@ -33,7 +30,8 @@ import Util ( thenCmp ) import Outputable import FastString ( unpackFS ) import FastTypes -import GlaExts ( Int(..), (+#) ) +import FastString +import GlaExts ( (+#) ) \end{code} %************************************************************************ @@ -46,12 +44,12 @@ We keep information about the {\em definition} point for each entity; this is the obvious stuff: \begin{code} data SrcLoc - = NoSrcLoc - - | SrcLoc FAST_STRING -- A precise location (file name) + = SrcLoc FastString -- A precise location (file name) FastInt - | UnhelpfulSrcLoc FAST_STRING -- Just a general indication + | UnhelpfulSrcLoc FastString -- Just a general indication + + | NoSrcLoc \end{code} Note that an entity might be imported via more than one route, and @@ -67,17 +65,16 @@ rare case. Things to make 'em: \begin{code} -noSrcLoc = NoSrcLoc -mkSrcLoc x y = SrcLoc x (iUnbox y) +mkSrcLoc x y = SrcLoc x (iUnbox y) +noSrcLoc = NoSrcLoc +importedSrcLoc = UnhelpfulSrcLoc FSLIT("") +builtinSrcLoc = UnhelpfulSrcLoc FSLIT("") +generatedSrcLoc = UnhelpfulSrcLoc FSLIT("") -mkIfaceSrcLoc = UnhelpfulSrcLoc SLIT("") -mkBuiltinSrcLoc = UnhelpfulSrcLoc SLIT("") -mkGeneratedSrcLoc = UnhelpfulSrcLoc SLIT("") +isGoodSrcLoc (SrcLoc _ _) = True +isGoodSrcLoc other = False -isNoSrcLoc NoSrcLoc = True -isNoSrcLoc other = False - -srcLocFile :: SrcLoc -> FAST_STRING +srcLocFile :: SrcLoc -> FastString srcLocFile (SrcLoc fname _) = fname srcLocLine :: SrcLoc -> FastInt @@ -124,19 +121,15 @@ cmpSrcLoc (SrcLoc s1 l1) (SrcLoc s2 l2) = (s1 `compare` s2) `thenCmp` (l1 ` instance Outputable SrcLoc where ppr (SrcLoc src_path src_line) = getPprStyle $ \ sty -> - if userStyle sty then - hcat [ text src_file, char ':', int (iBox src_line) ] - else - if debugStyle sty then - hcat [ ptext src_path, char ':', int (iBox src_line) ] + if userStyle sty || debugStyle sty then + hcat [ ftext src_path, char ':', int (iBox src_line) ] else hcat [text "{-# LINE ", int (iBox src_line), space, - char '\"', ptext src_path, text " #-}"] + char '\"', ftext src_path, text " #-}"] where src_file = unpackFS src_path -- Leave the directory prefix intact, -- so emacs can find the file - ppr (UnhelpfulSrcLoc s) = ptext s - - ppr NoSrcLoc = text "" + ppr (UnhelpfulSrcLoc s) = ftext s + ppr NoSrcLoc = ptext SLIT("") \end{code}