blob: 296cefa551312702b50d960cb14b71c8f20e98df (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
-- This program must be called with GHC's libdir as the single command line
-- argument.
module Main where
-- import Data.Generics
import Data.Data
import Data.List (intercalate)
import System.IO
import GHC
import GHC.Driver.Session
import GHC.Driver.Ppr
import GHC.Utils.Monad
import GHC.Utils.Outputable
import GHC.Data.Bag (filterBag,isEmptyBag)
import System.Directory (removeFile)
import System.Environment( getArgs )
import qualified Data.Map as Map
import Data.Dynamic ( fromDynamic,Dynamic )
import Control.Monad.IO.Class
main::IO()
main = do
[libdir] <- getArgs
testOneFile libdir "LiteralsTest"
testOneFile libdir fileName = do
t <- runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
let mn =mkModuleName fileName
addTarget Target { targetId = TargetModule mn
, targetAllowObjCode = True
, targetUnitId = homeUnitId_ dflags
, targetContents = Nothing }
load LoadAllTargets
modSum <- getModSummary mn
toks <- liftIO $ getRichTokenStream modSum
return toks
putStrLn (intercalate "\n" [showToks t])
showToks ts = intercalate ",\n\n"
$ map (\((L p t),s) ->
"(" ++ pp p ++ "," ++ show t ++ ",[" ++ s ++ "])") ts
pp a = showPprUnsafe a
|