-- | Atom compilation. module Language.Atom.Compile ( compile ) where import Control.Monad.State hiding (join) import Data.Maybe import System.Exit import System.IO import Language.Atom.Code import Language.Atom.Scheduling import Language.Atom.Elaboration import Language.Atom.Language hiding (Atom) -- | Compiles an atom description to C. compile :: Name -> Config -> Atom () -> IO [Name] compile name config atom = do r <- elaborate name atom case r of Nothing -> putStrLn "ERROR: Design rule checks failed." >> exitWith (ExitFailure 1) Just (rules, init, coverage) -> do schedule <- schedule name rules writeC name config schedule init return coverage