Tidy up how Main decides which passes to run.

Since the set of passes that runs now depends on several variables, there's now
an expression which builds a list of passes to run; this should be easier to
extend in the future.
This commit is contained in:
Adam Sampson 2007-08-22 22:24:08 +00:00
parent d90f0aa680
commit 929745f05e
2 changed files with 14 additions and 10 deletions

View File

@ -31,15 +31,15 @@ import Metadata
-- | Modes that Tock can run in.
data CompMode = ModeParse | ModeCompile | ModePostC
deriving (Show, Data, Typeable)
deriving (Show, Data, Typeable, Eq)
-- | Backends that Tock can use.
data CompBackend = BackendC | BackendCPPCSP
deriving (Show, Data, Typeable)
deriving (Show, Data, Typeable, Eq)
-- | Frontends that Tock can use.
data CompFrontend = FrontendOccam | FrontendRain
deriving (Show, Data, Typeable)
deriving (Show, Data, Typeable, Eq)
-- | State necessary for compilation.
data CompState = CompState {

16
Main.hs
View File

@ -43,8 +43,8 @@ import SimplifyProcs
import SimplifyTypes
import Unnest
passes :: [(String, Pass)]
passes =
commonPasses :: [(String, Pass)]
commonPasses =
[ ("Simplify types", simplifyTypes)
, ("Simplify expressions", simplifyExprs)
, ("Simplify processes", simplifyProcs)
@ -157,10 +157,14 @@ compile fn
ModeParse -> return $ show ast1
ModeCompile ->
do progress "Passes:"
ast2 <- case csFrontend optsPS of
FrontendOccam -> (runPasses passes) ast1
--Run the rain passes, then all the normal occam passes too:
FrontendRain -> ((runPasses rainPasses) ast1) >>= (runPasses passes)
let passes
= concat [ commonPasses
, if csFrontend optsPS == FrontendRain
then rainPasses
else []
]
ast2 <- runPasses passes ast1
debug "{{{ Generate code"
let generator