module Language.Atom.Compile
( compile
, reportSchedule
, Schedule
) where
import System.Exit
import Language.Atom.Code
import Language.Atom.Scheduling
import Language.Atom.Elaboration
import Language.Atom.Language hiding (Atom)
compile :: Name -> Config -> Atom () -> IO (Schedule, RuleCoverage, [Name], [Name], [(Name, Type)])
compile name config atom = do
r <- elaborate name atom
case r of
Nothing -> putStrLn "ERROR: Design rule checks failed." >> exitWith (ExitFailure 1)
Just (state, rules, assertionNames, coverageNames, probeNames) -> do
let schedule' = schedule rules
ruleCoverage <- writeC name config state rules schedule' assertionNames coverageNames probeNames
return (schedule', ruleCoverage, assertionNames, coverageNames, probeNames)