on master help sign in
javascript: lift out node backend
commitf905a795c8f592f8afcc37900b83dbc0b7de8912 authorraichoo <raichoo@googlemail.com> dateFri 22 Aug 2014, 17:50 (12 years ago) parent31de6be
3 files changed+55−1
codegen/idris-node/Main.hs+42 idris.cabal+13 src/IRTS/Compiler.hs−1
codegen/idris-node/Main.hsnew file+42
@@ -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-node <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 "node") (output opts) mainProg
36+ runIO $ codegenNode ir
37+
38+main :: IO ()
39+main = do opts <- getOpts
40+ if (null (inputs opts))
41+ then showUsage
42+ else runMain (jsMain opts)
idris.cabal+13
@@ -778,3 +778,16 @@ Executable idris-javascript
778778
779779 ghc-prof-options: -auto-all -caf-all
780780 ghc-options: -threaded -rtsopts -funbox-strict-fields
781+
782+Executable idris-node
783+ Main-is: Main.hs
784+ hs-source-dirs: codegen/idris-node
785+
786+ Build-depends: idris
787+ , base
788+ , filepath
789+ , haskeline >= 0.7
790+ , transformers
791+
792+ ghc-prof-options: -auto-all -caf-all
793+ ghc-options: -threaded -rtsopts -funbox-strict-fields
src/IRTS/Compiler.hs−1
@@ -128,7 +128,6 @@ generate codegen mainmod ir
128128 -- Built-in code generators (FIXME: lift these out!)
129129 Via "c" -> codegenC ir
130130 Via "java" -> codegenJava ir
131− Via "node" -> codegenNode ir
132131 Via "llvm" -> codegenLLVM ir
133132 -- Any external code generator
134133 Via cg -> do let cmd = "idris-" ++ cg ++ " " ++ mainmod ++