@@ -0,0 +1,42 @@
1+module Main where
2+
3+import Idris.Core.TT
4+import Idris.AbsSyntax
5+import Idris.ElabDecls
6+import Idris.REPL
7+
8+import IRTS.Compiler
9+import IRTS.CodegenJavaScript
10+
11+import System.Environment
12+import System.Exit
13+
14+import Paths_idris
15+
16+data Opts = Opts { inputs :: [FilePath]
17+ , output :: FilePath
18+ }
19+
20+showUsage = do putStrLn "Usage: idris-javascript <ibc-files> [-o <output-file>]"
21+ exitWith ExitSuccess
22+
23+getOpts :: IO Opts
24+getOpts = do xs <- getArgs
25+ return $ process (Opts [] "main.js") xs
26+ where
27+ process opts ("-o":o:xs) = process (opts { output = o }) xs
28+ process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs
29+ process opts [] = opts
30+
31+jsMain :: Opts -> Idris ()
32+jsMain opts = do elabPrims
33+ loadInputs (inputs opts) Nothing
34+ mainProg <- elabMain
35+ ir <- compile (Via "javascript") (output opts) mainProg
36+ runIO $ codegenJavaScript ir
37+
38+main :: IO ()
39+main = do opts <- getOpts
40+ if (null (inputs opts))
41+ then showUsage
42+ else runMain (jsMain opts)