packages feed

uhc-light-1.1.8.1: src-main/EHCRun.hs

module Main
where
import UHC.Light.Compiler.EHC.Main.Utils
import qualified UHC.Light.Compiler.Config as Cfg
import UHC.Light.Compiler.Base.API
import UHC.Light.Compiler.CoreRun.API
import UHC.Light.Compiler.Opts
import UHC.Util.Pretty
import UHC.Util.FPath
import System.Exit
import System.Console.GetOpt
import System.IO
import Control.Monad
import System.Environment
import Data.List
import qualified Data.ByteString.Char8 as B

{-# LINE 31 "src/ehc/EHCRun.chs" #-}
-- | Top level main. TBD: hooks & customization
main :: IO ()
main = do
    args <- getArgs
    progName <- getProgName
    let opts0         = defaultEHCOpts
                          {ehcProgName = mkFPath progName}
        oo@(o,n,errs) = ehcrunCmdLineOptsApply args opts0
        opts          = maybe opts0 id o

    case ehcOptImmQuit opts of
      Just immq     -> handleImmQuitOption ehcrunCmdLineOpts ["rcr"] immq opts
      _             -> case (n,errs) of
        ([fname], []) -> run opts fname
        (_      , es) -> do
          putStr (head errs)
          exitFailure

  where run opts fname = do
            inp <- B.readFile fname
            case parseModFromString $ B.unpack inp of
              Left  es  -> forM_ es putStrLn
              Right mod -> do
                res <- runCoreRunIO opts mod
                case res of
                  Left  e   -> putStrLn $ show $ pp e
                  Right val -> putStrLn $ show $ pp val
{-
      _       ->
        putStrLn $ "Usage: " ++ progName ++ " file.rcr"
-}