summaryrefslogtreecommitdiff
path: root/Main.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Main.hs')
-rw-r--r--Main.hs35
1 files changed, 21 insertions, 14 deletions
diff --git a/Main.hs b/Main.hs
index 20f479b..4d3ef82 100644
--- a/Main.hs
+++ b/Main.hs
@@ -4,6 +4,7 @@ import Control.Monad
import System.Environment
import System.Exit
+import ASTOptimiser
import Compiler
import CompilerMacros
import Optimiser
@@ -17,25 +18,27 @@ usage = do
progname <- getProgName
putStrLn $ "Usage: " ++ progname ++ " [-h] [-ast] [-ir] [filename.lisp]"
putStrLn $ "When no filename is given, will read from stdin."
- putStrLn $ " -h Show this help"
- putStrLn $ " -ast Print AST after compiler macro's"
- putStrLn $ " -irpre Print IR after optimisation, before stackification"
- putStrLn $ " -ir Print IR after optimisation and stackification"
+ putStrLn $ " -h Show this help"
+ putStrLn $ " -ast Print AST after compiler macro's"
+ putStrLn $ " -astopt Print AST after compiler macro's"
+ putStrLn $ " -irpre Print IR after optimisation, before stackification"
+ putStrLn $ " -ir Print IR after optimisation and stackification"
-data Options = Options { optAST :: Bool, optIRPre :: Bool, optIR :: Bool, optFiles :: [FilePath] }
+data Options = Options { optAST :: Bool, optASTOpt :: Bool, optIRPre :: Bool, optIR :: Bool, optFiles :: [FilePath] }
parseOptions :: Options -> [String] -> IO Options
-parseOptions o [] = return o
-parseOptions _ ("-h":_) = usage >> exitSuccess
-parseOptions o ("-ast":as) = parseOptions (o { optAST = True }) as
-parseOptions o ("-irpre":as) = parseOptions (o { optIRPre = True }) as
-parseOptions o ("-ir":as) = parseOptions (o { optIR = True }) as
-parseOptions _ (('-':a):_) = putStrLn ("Unknown option '" ++ a ++ "'") >> usage >> exitFailure
-parseOptions o (f:as) = parseOptions (o { optFiles = optFiles o ++ [f] }) as
+parseOptions o [] = return o
+parseOptions _ ("-h":_) = usage >> exitSuccess
+parseOptions o ("-ast":as) = parseOptions (o { optAST = True }) as
+parseOptions o ("-astopt":as) = parseOptions (o { optASTOpt = True }) as
+parseOptions o ("-irpre":as) = parseOptions (o { optIRPre = True }) as
+parseOptions o ("-ir":as) = parseOptions (o { optIR = True }) as
+parseOptions _ (('-':a):_) = putStrLn ("Unknown option '" ++ a ++ "'") >> usage >> exitFailure
+parseOptions o (f:as) = parseOptions (o { optFiles = optFiles o ++ [f] }) as
main :: IO ()
main = do
- opts <- getArgs >>= parseOptions (Options False False False [])
+ opts <- getArgs >>= parseOptions (Options False False False False [])
mfname <- case optFiles opts of
[] -> return Nothing
[fname] -> return (Just fname)
@@ -47,7 +50,11 @@ main = do
let prog' = compilerMacros prog
when (optAST opts) $ print prog'
- irprog <- either die return (compileProgram prog')
+ let prog'' = optimiseAST prog'
+ when (optASTOpt opts) $ print prog''
+
+ irprog <- either die return (compileProgram prog'')
+ -- print irprog
let opt = optimise irprog
when (optIRPre opts) $ print opt