X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FbasicTypes%2FSrcLoc.lhs;h=c3249dfd27a08790da80c836c6e4cba11dcb33cd;hb=b180d2d4959b3b5b8361afc8329f40479176555b;hp=c3fca1db6434dd0ea1e4cd035792a04a801aafb0;hpb=b085ee40c7f265a5977ea6ec1c415e573be5ff8c;p=ghc-hetmet.git diff --git a/ghc/compiler/basicTypes/SrcLoc.lhs b/ghc/compiler/basicTypes/SrcLoc.lhs index c3fca1d..c3249df 100644 --- a/ghc/compiler/basicTypes/SrcLoc.lhs +++ b/ghc/compiler/basicTypes/SrcLoc.lhs @@ -11,11 +11,11 @@ module SrcLoc ( SrcLoc, -- Abstract - mkSrcLoc, isGoodSrcLoc, + mkSrcLoc, isGoodSrcLoc, isWiredInLoc, noSrcLoc, -- "I'm sorry, I haven't a clue" importedSrcLoc, -- Unknown place in an interface - builtinSrcLoc, -- Something wired into the compiler + wiredInSrcLoc, -- Something wired into the compiler generatedSrcLoc, -- Code generated within the compiler incSrcLine, replaceSrcLine, @@ -31,7 +31,8 @@ import Outputable import FastString ( unpackFS ) import FastTypes import FastString -import GlaExts ( (+#) ) + +import GLAEXTS ( (+#) ) \end{code} %************************************************************************ @@ -44,12 +45,16 @@ We keep information about the {\em definition} point for each entity; this is the obvious stuff: \begin{code} data SrcLoc - = SrcLoc FastString -- A precise location (file name) + = WiredInLoc -- Used exclusively for Ids and TyCons + -- that are totally wired in to the + -- compiler. That supports the + -- occasionally-useful predicate + -- isWiredInName + + | SrcLoc FastString -- A precise location (file name) FastInt | UnhelpfulSrcLoc FastString -- Just a general indication - - | NoSrcLoc \end{code} Note that an entity might be imported via more than one route, and @@ -66,14 +71,17 @@ rare case. Things to make 'em: \begin{code} mkSrcLoc x y = SrcLoc x (iUnbox y) -noSrcLoc = NoSrcLoc +wiredInSrcLoc = WiredInLoc +noSrcLoc = UnhelpfulSrcLoc FSLIT("") importedSrcLoc = UnhelpfulSrcLoc FSLIT("") -builtinSrcLoc = UnhelpfulSrcLoc FSLIT("") generatedSrcLoc = UnhelpfulSrcLoc FSLIT("") isGoodSrcLoc (SrcLoc _ _) = True isGoodSrcLoc other = False +isWiredInLoc WiredInLoc = True +isWiredInLoc other = False + srcLocFile :: SrcLoc -> FastString srcLocFile (SrcLoc fname _) = fname @@ -104,13 +112,13 @@ instance Eq SrcLoc where instance Ord SrcLoc where compare = cmpSrcLoc -cmpSrcLoc NoSrcLoc NoSrcLoc = EQ -cmpSrcLoc NoSrcLoc other = LT +cmpSrcLoc WiredInLoc WiredInLoc = EQ +cmpSrcLoc WiredInLoc other = LT cmpSrcLoc (UnhelpfulSrcLoc s1) (UnhelpfulSrcLoc s2) = s1 `compare` s2 cmpSrcLoc (UnhelpfulSrcLoc s1) other = GT -cmpSrcLoc (SrcLoc s1 l1) NoSrcLoc = GT +cmpSrcLoc (SrcLoc s1 l1) WiredInLoc = GT cmpSrcLoc (SrcLoc s1 l1) (UnhelpfulSrcLoc _) = LT cmpSrcLoc (SrcLoc s1 l1) (SrcLoc s2 l2) = (s1 `compare` s2) `thenCmp` (l1 `cmpline` l2) where @@ -131,5 +139,5 @@ instance Outputable SrcLoc where -- so emacs can find the file ppr (UnhelpfulSrcLoc s) = ftext s - ppr NoSrcLoc = ptext SLIT("") + ppr WiredInLoc = ptext SLIT("") \end{code}