@@ -27,6 +27,7 @@ import Core.Constraints
2727
2828import IRTS.Compiler
2929import IRTS.LParser
30+import IRTS.CodegenCommon
3031
3132-- import RTS.SC
3233-- import RTS.Bytecode
@@ -178,7 +179,8 @@ process fn (ExecVal t)
178179-- [pexp t])
179180 (tmpn, tmph) <- liftIO tempfile
180181 liftIO $ hClose tmph
181− compile ViaC tmpn tm
182+ t <- target
183+ compile t tmpn tm
182184 liftIO $ system tmpn
183185 return ()
184186 where fc = FC "(input)" 0
@@ -334,7 +336,8 @@ process fn Execute = do (m, _) <- elabVal toplevel False
334336-- (PRef (FC "main" 0) (NS (UN "main") ["main"]))
335337 (tmpn, tmph) <- liftIO tempfile
336338 liftIO $ hClose tmph
337− compile ViaC tmpn m
339+ t <- target
340+ compile t tmpn m
338341 liftIO $ system tmpn
339342 return ()
340343 where fc = FC "main" 0
@@ -443,7 +446,8 @@ parseArgs ("--install":n:ns) = PkgInstall n : (parseArgs ns)
443446parseArgs ("--clean":n:ns) = PkgClean n : (parseArgs ns)
444447parseArgs ("--bytecode":n:ns) = NoREPL : BCAsm n : (parseArgs ns)
445448parseArgs ("--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)
447451parseArgs ("--dumpdefuns":n:ns) = DumpDefun n : (parseArgs ns)
448452parseArgs ("--dumpcases":n:ns) = DumpCases n : (parseArgs ns)
449453parseArgs (n:ns) = Filename n : (parseArgs ns)
@@ -489,17 +493,25 @@ idrisMain opts =
489493 let bcs = opt getBC opts
490494 let vm = opt getFOVM opts
491495 let pkgdirs = opt getPkgDir opts
496+ let outty = case opt getOutputTy opts of
497+ [] -> Executable
498+ xs -> last xs
499+ let tgt = case opt getTarget opts of
500+ [] -> ViaC
501+ xs -> last xs
492502 when (DefaultTotal `elem` opts) $ do i <- get
493503 put (i { default_total = True })
494504 setREPL runrepl
495505 setVerbose runrepl
496506 setCmdLine opts
507+ setOutputTy outty
508+ setTarget tgt
497509 when (Verbose `elem` opts) $ setVerbose True
498510 mapM_ makeOption opts
499511 -- if we have the --fovm flag, drop into the first order VM testing
500512 case vm of
501513 [] -> return ()
502− xs -> liftIO $ mapM_ fovm xs
514+ xs -> liftIO $ mapM_ (fovm tgt outty) xs
503515 -- if we have the --bytecode flag, drop into the bytecode assembler
504516 case bcs of
505517 [] -> return ()
@@ -519,7 +531,7 @@ idrisMain opts =
519531 ok <- noErrors
520532 when ok $ case output of
521533 [] -> return ()
522− (o:_) -> process "" (Compile ViaC o)
534+ (o:_) -> process "" (Compile tgt o)
523535 when ok $ case newoutput of
524536 [] -> return ()
525537 (o:_) -> process "" (NewCompile o)
@@ -579,6 +591,14 @@ getPkgClean :: Opt -> Maybe String
579591getPkgClean (PkgClean str) = Just str
580592getPkgClean _ = Nothing
581593
594+getTarget :: Opt -> Maybe Target
595+getTarget (UseTarget x) = Just x
596+getTarget _ = Nothing
597+
598+getOutputTy :: Opt -> Maybe OutputType
599+getOutputTy (OutputTy t) = Just t
600+getOutputTy _ = Nothing
601+
582602opt :: (Opt -> Maybe a) -> [Opt] -> [a]
583603opt = mapMaybe
584604