on bd8ea0a help sign in
40 lines 1.2 kB history raw
1module Main where
3import Idris.AbsSyntax
4import Idris.ElabDecls
5import Idris.Main
6import Idris.Options
7import IRTS.CodegenJavaScript
8import IRTS.Compiler
10import System.Environment
11import System.Exit
13data Opts = Opts { inputs :: [FilePath]
14 , output :: FilePath
15 }
17showUsage = do putStrLn "A code generator which is intended to be called by the compiler, not by a user."
18 putStrLn "Usage: idris-codegen-node <ibc-files> [-o <output-file>]"
19 exitWith ExitSuccess
21getOpts :: IO Opts
22getOpts = do xs <- getArgs
23 return $ process (Opts [] "main.js") xs
24 where
25 process opts ("-o":o:xs) = process (opts { output = o }) xs
26 process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs
27 process opts [] = opts
29jsMain :: Opts -> Idris ()
30jsMain opts = do elabPrims
31 loadInputs (inputs opts) Nothing
32 mainProg <- elabMain
33 ir <- compile (Via IBCFormat "node") (output opts) (Just mainProg)
34 runIO $ codegenNode ir
36main :: IO ()
37main = do opts <- getOpts
38 if (null (inputs opts))
39 then showUsage
40 else runMain (jsMain opts)