packages feed

HaRe-0.6: tools/hs2html/RefsTypes.hs

module RefsTypes(module RefsTypes,Pos(..),sameModuleName,noModule) where
import HsName(ModuleName,sameModuleName,noModule)
import HsLexerPos(Pos(..))
import SrcLoc1(SrcLoc)
{-+
The cross reference information was once written to files by #tstModules#
and then read by #hs2html#. That is why there were #Show# and #Read# instances,
and why the constructor names are short.
<p>
Since hs2html has been integrated into pfe now, these types are rather
obsolete...
-}

--data SP = T | V deriving (Read)
data T = V | Co Name {-Ref-} | Me Name {-Ref-} | Fi Name {-Ref-} | T | Cl deriving (Eq,Show,Read)
data R = DT | DL | DC | DI | DP | U | Ex | Im deriving ({-Show,Read,-}Eq)
type Module = ModuleName
type Name = String
--type Pos = (Int,Int) -- (line,column)
type SrcPos = (FilePath,Pos) -- better to keep SrcLoc?
type Global = (Module,Name)
type Local = SrcPos
type Ref = Either Global Local
type Orig = (Name,R,T,[(T,Ref)])
type Refs = [(Pos,Orig)]

isDef U = False
isDef DI = False
isDef Ex = False
isDef Im = False
isDef _ = True

isType Cl = True
isType T = True
isType _ = False

shPos p = show (line p)++":"++show (column p)
shPos' p = show (line p)++"."++show (column p)

-- Merge a sorted list of reference info with a list of lexical tokens
-- (Designed to be lazy in the reference list)
merge rs [] = []
merge rs tts@(t@(_,(tp,_)):ts) = (t,optref):merge rs' ts
  where
    (optref,rs') = findref rs

    findref [] = (Nothing,[])
    findref rrs@((rp,ref):rs) =
	  case compare rp tp of
	    LT -> findref rs
	    EQ -> (Just ref,rs)
	    GT -> (Nothing,rrs)

{-
-- Strict merge (only marginally faster, it seems):
merge' rs [] = []
merge' [] ts = map (flip (,) Nothing) ts
merge' rrs@(r@(rp,ref):rs) tts@(t@(_,(tp,_)):ts) =
  case compare rp tp of
    LT -> merge' rs tts
    EQ -> (t,Just ref):merge' rs ts
    GT -> (t,Nothing):merge' rrs ts
-}