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)
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