module ReportImports where
import qualified Data.Map as Map
import List(nub,groupBy,intersperse,sortBy)
import SysDeps(unpackPS)
import TokenId (extractM,extractV)
import IntState
reportImports :: String -> IntState -> [String]
reportImports m =
map ("import "++) .
nub .
map moduleName .
filter ((m/=).moduleName) .
concatMap (possibleTid.snd) .
Map.toList .
getSymbolTable
reportFnImports :: String -> IntState -> [String]
reportFnImports m =
map (\xs-> "import "++ fst (head xs) ++ "\t(" ++
concat (intersperse ", " (map snd xs)) ++ ")") .
groupBy (\(x,_) (y,_)-> x==y) .
sortBy (\(x,_) (y,_)-> compare x y) .
map (\t-> (moduleName t, varName t)) .
filter (("Prelude"/=).moduleName) .
filter ((m/=).moduleName) .
concatMap (possibleTid.snd) .
Map.toList .
getSymbolTable
moduleName :: TokenId -> String
moduleName = reverse . unpackPS . extractM
varName :: TokenId -> String
varName = reverse . unpackPS . extractV
possibleTid (InfoClear) = []
possibleTid (InfoUsed unique uses) = []
possibleTid (InfoUsedClass unique uses insts) = []
possibleTid (InfoData unique tid ie nt dk) = [tid]
possibleTid (InfoClass unique tid ie nt ms ds insts) = [tid]
possibleTid (InfoVar unique tid ie fix nt annot) = [tid]
possibleTid (InfoConstr unique tid ie fix nt fields iType) = []
possibleTid (InfoField unique tid ie icon_offs iData iSel) = []
possibleTid (InfoMethod unique tid ie fix nt annot iClass) = []
possibleTid (InfoIMethod unique tid nt annot iMethod) = []
possibleTid (InfoDMethod unique tid nt annot iClass) = []
possibleTid (InfoInstance unique mrps nt iClass) = []
possibleTid (InfoName _ tid _ _ _) = [tid] --PHtprof
|