@@ -6,6 +6,7 @@ import IRTS.Lang
6import IRTS.Defunctionalise
6import IRTS.Defunctionalise
7import IRTS.Simplified
7import IRTS.Simplified
8import IRTS.CodegenC
8import IRTS.CodegenC
9+import IRTS.CodegenJava
10import Idris.AbsSyntax
11import Idris.AbsSyntax
11import Core.TT
12import Core.TT
@@ -21,28 +22,30 @@ import System.Environment
22import Paths_idris
23import Paths_idris
24−compileC :: FilePath -> Term -> Idris ()
25+compile :: Target -> FilePath -> Term -> Idris ()
25−compileC f tm = do checkMVs
27+ = do checkMVs
26− let tmnames = namesUsed (STerm tm)
28+ let tmnames = namesUsed (STerm tm)
27− used <- mapM (allNames []) tmnames
29+ used <- mapM (allNames []) tmnames
28− defsIn <- mkDecls tm (concat used)
30+ defsIn <- mkDecls tm (concat used)
29− maindef <- irMain tm
31+ maindef <- irMain tm
30− objs <- getObjectFiles
32+ objs <- getObjectFiles
31− libs <- getLibs
33+ libs <- getLibs
32− hdrs <- getHdrs
34+ hdrs <- getHdrs
33− let defs = defsIn ++ [(MN 0 "runMain", maindef)]
35+ let defs = defsIn ++ [(MN 0 "runMain", maindef)]
34− -- iputStrLn $ showSep "\n" (map show defs)
36+ -- iputStrLn $ showSep "\n" (map show defs)
35− let (nexttag, tagged) = addTags 0 (liftAll defs)
37+ let (nexttag, tagged) = addTags 0 (liftAll defs)
36− let ctxtIn = addAlist tagged emptyContext
38+ let ctxtIn = addAlist tagged emptyContext
37− let defuns = defunctionalise nexttag ctxtIn
39+ let defuns = defunctionalise nexttag ctxtIn
38− -- iputStrLn $ showSep "\n" (map show (toAlist defuns))
40+ -- iputStrLn $ showSep "\n" (map show (toAlist defuns))
39− let checked = checkDefs defuns (toAlist defuns)
41+ let checked = checkDefs defuns (toAlist defuns)
40− case checked of
42+ case checked of
41− OK c -> do -- iputStrLn $ showSep "\n" (map show c)
43+ OK c -> case target of
42− liftIO $ codegenC c f True hdrs
44+ ViaC -> liftIO $ codegenC c f True hdrs
43− (concatMap mkObj objs)
45+ (concatMap mkObj objs)
44− (concatMap mkLib libs) NONE
46+ (concatMap mkLib libs) NONE
47+ ViaJava -> liftIO $ codegenJava c f
45− Error e -> fail $ show e
48+ Error e -> fail $ show e
46 where checkMVs = do i <- get
49 where checkMVs = do i <- get
47 case idris_metavars i \\ primDefs of
50 case idris_metavars i \\ primDefs of
48 [] -> return ()
51 [] -> return ()