helium-1.8: src/Helium/Main/PhaseCodeGenerator.hs
{-| Module : PhaseCodeGenerator
License : GPL
Maintainer : helium@cs.uu.nl
Stability : experimental
Portability : portable
-}
module Helium.Main.PhaseCodeGenerator(phaseCodeGenerator) where
import Lvm.Core.Expr(CoreModule)
import Helium.Main.CompileUtils
import Helium.CodeGeneration.CoreToLvm(coreToLvm)
import qualified Control.Exception as CE (catch, IOException)
phaseCodeGenerator :: String -> CoreModule -> [Option] -> IO ()
phaseCodeGenerator fullName coreModule options = do
enterNewPhase "Code generation" options
let (path, baseName, _) = splitFilePath fullName
fullNameNoExt = combinePathAndFile path baseName
CE.catch (coreToLvm fullNameNoExt coreModule) (\ioErr -> do
putStrLn ("Could not write to file '" ++
fullNameNoExt ++ ".lvm" ++ "'" ++ show (ioErr :: CE.IOException));
exitWith (ExitFailure 1)
)