diff --git a/codegen/idris-node/Main.hs b/codegen/idris-node/Main.hs new file mode 100644 index 0000000000..55976bbe5f --- /dev/null +++ b/codegen/idris-node/Main.hs @@ -0,0 +1,42 @@ +module Main where + +import Idris.Core.TT +import Idris.AbsSyntax +import Idris.ElabDecls +import Idris.REPL + +import IRTS.Compiler +import IRTS.CodegenJavaScript + +import System.Environment +import System.Exit + +import Paths_idris + +data Opts = Opts { inputs :: [FilePath] + , output :: FilePath + } + +showUsage = do putStrLn "Usage: idris-node [-o ]" + exitWith ExitSuccess + +getOpts :: IO Opts +getOpts = do xs <- getArgs + return $ process (Opts [] "main.js") xs + where + process opts ("-o":o:xs) = process (opts { output = o }) xs + process opts (x:xs) = process (opts { inputs = x:inputs opts }) xs + process opts [] = opts + +jsMain :: Opts -> Idris () +jsMain opts = do elabPrims + loadInputs (inputs opts) Nothing + mainProg <- elabMain + ir <- compile (Via "node") (output opts) mainProg + runIO $ codegenNode ir + +main :: IO () +main = do opts <- getOpts + if (null (inputs opts)) + then showUsage + else runMain (jsMain opts) diff --git a/idris.cabal b/idris.cabal index 8925a6b6ad..7fa0c7f841 100644 --- a/idris.cabal +++ b/idris.cabal @@ -778,3 +778,16 @@ Executable idris-javascript ghc-prof-options: -auto-all -caf-all ghc-options: -threaded -rtsopts -funbox-strict-fields + +Executable idris-node + Main-is: Main.hs + hs-source-dirs: codegen/idris-node + + Build-depends: idris + , base + , filepath + , haskeline >= 0.7 + , transformers + + ghc-prof-options: -auto-all -caf-all + ghc-options: -threaded -rtsopts -funbox-strict-fields diff --git a/src/IRTS/Compiler.hs b/src/IRTS/Compiler.hs index c6b1572fe9..5cc3022aba 100644 --- a/src/IRTS/Compiler.hs +++ b/src/IRTS/Compiler.hs @@ -128,7 +128,6 @@ generate codegen mainmod ir -- Built-in code generators (FIXME: lift these out!) Via "c" -> codegenC ir Via "java" -> codegenJava ir - Via "node" -> codegenNode ir Via "llvm" -> codegenLLVM ir -- Any external code generator Via cg -> do let cmd = "idris-" ++ cg ++ " " ++ mainmod ++