import ParseHaskellProgram(parseHaskellProgram) import ScopeHaskellProgram(scopeHaskellProgram) import ScopeProgram import PrettyPrint import UTF8Util import MUtils import ParsedSyntax import UniqueNames import TypedIds import List(sort) import System(getArgs) import Directory(doesDirectoryExist,createDirectory) main = (test=< tstScope files "xrefs":files -> crossRefs files _ -> fail "Usage: tstScopeNames (test|xrefs) " tstScope = putStrLn.upp.fst @@ scopeHaskellProgram @@ parseHaskellProgram where upp x = utf8 . pp $ x crossRefs files = writeIt.scopeProgram' =<< parseHaskellProgram files where writeIt (mrs,mss) = do optCreateDirectory "hi" mapM_ writeRefs (simpmods mrs) writeFile "hi/ModuleSourceFiles.txt" (show (map modfile (concat mss))) writeRefs (m,rs) = writeFile ("hi/"++m++".refs") (showl (sort rs)) optCreateDirectory d = unlessM (doesDirectoryExist d) (createDirectory d) simpmods ms = [(m,simprefs refs)|(Module m,refs)<-ms] simprefs rs = [(simpp p,(show n,simpsp sp,map (simpos.getHSName) os))| (sp,i,os)<-rs, let PN n p=getHSName i] modfile m = (srcFile m,pp (hsModName m)) simpsp ValueNames = V simpsp ClassOrTypeNames = T simpp (S s) = simpls s simpls (SrcLoc f r c) = (r,c) simpes (SrcLoc f r c) = (f,(r,c)) simpos (PN n o) = simpo o where simpo (G (Module m) n) = Left (m,n) simpo (S s) = Right (simpes s) data SP = V | T deriving (Show,Eq,Ord) showl x = unlines . map show $ x