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