@@ -27,6 +27,7 @@ import Core.Constraints
28import IRTS.Compiler
28import IRTS.Compiler
29import IRTS.LParser
29import IRTS.LParser
30+import IRTS.CodegenCommon
31-- import RTS.SC
32-- import RTS.SC
32-- import RTS.Bytecode
33-- import RTS.Bytecode
@@ -178,7 +179,8 @@ process fn (ExecVal t)
178-- [pexp t])
179-- [pexp t])
179 (tmpn, tmph) <- liftIO tempfile
180 (tmpn, tmph) <- liftIO tempfile
180 liftIO $ hClose tmph
181 liftIO $ hClose tmph
181− compile ViaC tmpn tm
183+ compile t tmpn tm
182 liftIO $ system tmpn
184 liftIO $ system tmpn
183 return ()
185 return ()
184 where fc = FC "(input)" 0
186 where fc = FC "(input)" 0
@@ -334,7 +336,8 @@ process fn Execute = do (m, _) <- elabVal toplevel False
334-- (PRef (FC "main" 0) (NS (UN "main") ["main"]))
336-- (PRef (FC "main" 0) (NS (UN "main") ["main"]))
335 (tmpn, tmph) <- liftIO tempfile
337 (tmpn, tmph) <- liftIO tempfile
336 liftIO $ hClose tmph
338 liftIO $ hClose tmph
337− compile ViaC tmpn m
340+ compile t tmpn m
338 liftIO $ system tmpn
341 liftIO $ system tmpn
339 return ()
342 return ()
340 where fc = FC "main" 0
343 where fc = FC "main" 0
@@ -443,7 +446,8 @@ parseArgs ("--install":n:ns) = PkgInstall n : (parseArgs ns)
443parseArgs ("--clean":n:ns) = PkgClean n : (parseArgs ns)
446parseArgs ("--clean":n:ns) = PkgClean n : (parseArgs ns)
444parseArgs ("--bytecode":n:ns) = NoREPL : BCAsm n : (parseArgs ns)
447parseArgs ("--bytecode":n:ns) = NoREPL : BCAsm n : (parseArgs ns)
445parseArgs ("--fovm":n:ns) = NoREPL : FOVM n : (parseArgs ns)
448parseArgs ("--fovm":n:ns) = NoREPL : FOVM n : (parseArgs ns)
446−parseArgs ("--dumpc":n:ns) = DumpC n : (parseArgs ns)
449+parseArgs ("-S":ns) = OutputTy Raw : (parseArgs ns)
450+parseArgs ("-c":ns) = OutputTy Object : (parseArgs ns)
447parseArgs ("--dumpdefuns":n:ns) = DumpDefun n : (parseArgs ns)
451parseArgs ("--dumpdefuns":n:ns) = DumpDefun n : (parseArgs ns)
448parseArgs ("--dumpcases":n:ns) = DumpCases n : (parseArgs ns)
452parseArgs ("--dumpcases":n:ns) = DumpCases n : (parseArgs ns)
449parseArgs (n:ns) = Filename n : (parseArgs ns)
453parseArgs (n:ns) = Filename n : (parseArgs ns)
@@ -489,17 +493,25 @@ idrisMain opts =
489 let bcs = opt getBC opts
493 let bcs = opt getBC opts
490 let vm = opt getFOVM opts
494 let vm = opt getFOVM opts
491 let pkgdirs = opt getPkgDir opts
495 let pkgdirs = opt getPkgDir opts
496+ let outty = case opt getOutputTy opts of
499+ let tgt = case opt getTarget opts of
492 when (DefaultTotal `elem` opts) $ do i <- get
502 when (DefaultTotal `elem` opts) $ do i <- get
493 put (i { default_total = True })
503 put (i { default_total = True })
494 setREPL runrepl
504 setREPL runrepl
495 setVerbose runrepl
505 setVerbose runrepl
496 setCmdLine opts
506 setCmdLine opts
497 when (Verbose `elem` opts) $ setVerbose True
509 when (Verbose `elem` opts) $ setVerbose True
498 mapM_ makeOption opts
510 mapM_ makeOption opts
499 -- if we have the --fovm flag, drop into the first order VM testing
511 -- if we have the --fovm flag, drop into the first order VM testing
500 case vm of
512 case vm of
501 [] -> return ()
513 [] -> return ()
502− xs -> liftIO $ mapM_ fovm xs
514+ xs -> liftIO $ mapM_ (fovm tgt outty) xs
503 -- if we have the --bytecode flag, drop into the bytecode assembler
515 -- if we have the --bytecode flag, drop into the bytecode assembler
504 case bcs of
516 case bcs of
505 [] -> return ()
517 [] -> return ()
@@ -519,7 +531,7 @@ idrisMain opts =
519 ok <- noErrors
531 ok <- noErrors
520 when ok $ case output of
532 when ok $ case output of
521 [] -> return ()
533 [] -> return ()
522− (o:_) -> process "" (Compile ViaC o)
534+ (o:_) -> process "" (Compile tgt o)
523 when ok $ case newoutput of
535 when ok $ case newoutput of
524 [] -> return ()
536 [] -> return ()
525 (o:_) -> process "" (NewCompile o)
537 (o:_) -> process "" (NewCompile o)
@@ -579,6 +591,14 @@ getPkgClean :: Opt -> Maybe String
579getPkgClean (PkgClean str) = Just str
591getPkgClean (PkgClean str) = Just str
580getPkgClean _ = Nothing
592getPkgClean _ = Nothing
594+getTarget :: Opt -> Maybe Target
595+getTarget (UseTarget x) = Just x
596+getTarget _ = Nothing
598+getOutputTy :: Opt -> Maybe OutputType
599+getOutputTy (OutputTy t) = Just t
600+getOutputTy _ = Nothing
582opt :: (Opt -> Maybe a) -> [Opt] -> [a]
602opt :: (Opt -> Maybe a) -> [Opt] -> [a]
583opt = mapMaybe
603opt = mapMaybe