diff options
Diffstat (limited to 'Main.hs')
-rw-r--r-- | Main.hs | 35 |
1 files changed, 21 insertions, 14 deletions
@@ -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 |