@@ -25,9 +25,6 @@ import Idris.Primitives
25import Idris.Imports
25import Idris.Imports
26import Idris.Error
26import Idris.Error
31import Paths_idris
28import Paths_idris
33-- Main program reads command line options, parses the main program, and gets
30-- Main program reads command line options, parses the main program, and gets
@@ -38,91 +35,13 @@ main = do xs <- getArgs
38 runInputT defaultSettings $ execStateT (runIdris opts) idrisInit
35 runInputT defaultSettings $ execStateT (runIdris opts) idrisInit
40runIdris :: [Opt] -> Idris ()
37runIdris :: [Opt] -> Idris ()
41−runIdris opts =
38+runIdris opts = do
42− do let inputs = opt getFile opts
43− let runrepl = not (NoREPL `elem` opts)
44− let output = opt getOutput opts
45− let newoutput = opt getNewOutput opts
46− let ibcsubdir = opt getIBCSubDir opts
47− let importdirs = opt getImportDir opts
48− let bcs = opt getBC opts
49− let vm = opt getFOVM opts
51 when (Ver `elem` opts) $ liftIO showver
39 when (Ver `elem` opts) $ liftIO showver
52 when (Usage `elem` opts) $ liftIO usage
40 when (Usage `elem` opts) $ liftIO usage
53 when (ShowIncs `elem` opts) $ liftIO showIncs
41 when (ShowIncs `elem` opts) $ liftIO showIncs
54 when (ShowLibs `elem` opts) $ liftIO showLibs
42 when (ShowLibs `elem` opts) $ liftIO showLibs
55 when (ShowLibdir `elem` opts) $ liftIO showLibdir
43 when (ShowLibdir `elem` opts) $ liftIO showLibdir
56− setREPL runrepl
44+ idrisMain opts -- in Idris.REPL
58− when (Verbose `elem` opts) $ setVerbose True
59− mapM_ makeOption opts
60− -- if we have the --fovm flag, drop into the first order VM testing
63− xs -> liftIO $ mapM_ fovm xs
64− -- if we have the --bytecode flag, drop into the bytecode assembler
67− xs -> return () -- liftIO $ mapM_ bcAsm xs
69− [] -> setIBCSubDir ""
70− (d:_) -> setIBCSubDir d
71− setImportDirs importdirs
73− when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
75− when runrepl $ iputStrLn banner
77− mods <- mapM loadModule inputs
79− when ok $ case output of
81− (o:_) -> process "" (Compile ViaC o)
82− when ok $ case newoutput of
84− (o:_) -> process "" (NewCompile o)
85− when runrepl $ repl ist inputs
87− when (not ok) $ liftIO (exitWith (ExitFailure 1))
89− makeOption (OLogging i) = setLogLevel i
90− makeOption TypeCase = setTypeCase True
91− makeOption TypeInType = setTypeInType True
92− makeOption NoCoverage = setCoverage False
93− makeOption ErrContext = setErrContext True
94− makeOption _ = return ()
96−getFile :: Opt -> Maybe String
97−getFile (Filename str) = Just str
100−getBC :: Opt -> Maybe String
101−getBC (BCAsm str) = Just str
104−getFOVM :: Opt -> Maybe String
105−getFOVM (FOVM str) = Just str
108−getOutput :: Opt -> Maybe String
109−getOutput (Output str) = Just str
110−getOutput _ = Nothing
112−getNewOutput :: Opt -> Maybe String
113−getNewOutput (NewOutput str) = Just str
114−getNewOutput _ = Nothing
116−getIBCSubDir :: Opt -> Maybe String
117−getIBCSubDir (IBCSubDir str) = Just str
118−getIBCSubDir _ = Nothing
120−getImportDir :: Opt -> Maybe String
121−getImportDir (ImportDir str) = Just str
122−getImportDir _ = Nothing
124−opt :: (Opt -> Maybe a) -> [Opt] -> [a]
127usage = do putStrLn usagemsg
46usage = do putStrLn usagemsg
128 exitWith ExitSuccess
47 exitWith ExitSuccess
@@ -165,14 +84,6 @@ parseArgs ("--bytecode":n:ns) = liftM (\x -> NoREPL : BCAsm n : x) (parseArgs
165parseArgs ("--fovm":n:ns) = liftM (\x -> NoREPL : FOVM n : x) (parseArgs ns)
84parseArgs ("--fovm":n:ns) = liftM (\x -> NoREPL : FOVM n : x) (parseArgs ns)
166parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
85parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
168−ver = showVersion version
170−banner = " ____ __ _ \n" ++
171− " / _/___/ /____(_)____ \n" ++
172− " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++
173− " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
174− " /___/\\__,_/_/ /_/____/ Type :? for help \n"
176usagemsg = "Idris version " ++ ver ++ "\n" ++
87usagemsg = "Idris version " ++ ver ++ "\n" ++
177 "--------------" ++ map (\x -> '-') ver ++ "\n" ++
88 "--------------" ++ map (\x -> '-') ver ++ "\n" ++
178 "Usage: idris [input file] [options]\n" ++
89 "Usage: idris [input file] [options]\n" ++