Made running the properties configurable by a --sanity-check command-line option

This commit is contained in:
Neil Brown 2008-02-24 12:15:02 +00:00
parent feabd450f0
commit 6d9534f9b9
3 changed files with 18 additions and 5 deletions

View File

@ -61,6 +61,7 @@ options =
, Option ['v'] ["verbose"] (NoArg $ optVerbose) "be more verbose (use multiple times for more detail)"
, Option ['o'] ["output"] (ReqArg optOutput "FILE") "output file (default \"-\")"
, Option [] ["usage-checking"] (ReqArg optUsageChecking "SETTING") "usage checking (EXPERIMENTAL) (options: on, off)"
, Option [] ["sanity-check"] (ReqArg optSanityCheck "SETTING") "internal sanity check (options: on, off)"
]
optMode :: String -> OptFunc
@ -105,6 +106,14 @@ optUsageChecking s ps
_ -> dieIO (Nothing, "Unknown usage checking mode: " ++ s)
return $ ps { csUsageChecking = usageCheck }
optSanityCheck :: String -> OptFunc
optSanityCheck s ps
= do sanityCheck <- case s of
"on" -> return True
"off" -> return False
_ -> dieIO (Nothing, "Unknown sanity checking mode: " ++ s)
return $ ps { csSanityCheck = sanityCheck }
getOpts :: [String] -> IO ([OptFunc], [String])
getOpts argv =
case getOpt RequireOrder options argv of

View File

@ -57,6 +57,7 @@ data CompState = CompState {
csMode :: CompMode,
csBackend :: CompBackend,
csFrontend :: CompFrontend,
csSanityCheck :: Bool,
csUsageChecking :: Bool,
csVerboseLevel :: Int,
csOutputFile :: String,
@ -89,6 +90,7 @@ emptyState = CompState {
csMode = ModeFull,
csBackend = BackendC,
csFrontend = FrontendOccam,
csSanityCheck = False,
csUsageChecking = False, -- For now! TODO turn this on by default
csVerboseLevel = 0,
csOutputFile = "-",

View File

@ -69,8 +69,9 @@ getPassList optsPS = filterPasses optsPS $ concat
calculatePassList :: (Die m, CSMR m) => m [Pass]
calculatePassList
= do rawList <- getCompState >>* getPassList
case buildGraph rawList of
= do st <- getCompState
let rawList = getPassList st
case buildGraph (csSanityCheck st) rawList of
Left err -> dieReport (Nothing, "Error working out pass list: " ++ err)
Right g -> return $ graphToList (g :: Gr Pass ())
@ -82,8 +83,9 @@ calculatePassList
graphToList :: Graph gr => gr Pass () -> [Pass]
graphToList = topsort'
buildGraph :: forall gr. Graph gr => [Pass] -> Either String (gr Pass ())
buildGraph passes = do checked <- checkedRelations
buildGraph :: forall gr. Graph gr => Bool -> [Pass] -> Either String (gr Pass ())
buildGraph runProps passes
= do checked <- checkedRelations
checkPassUnique
checkGraph
nodes <- labelledNodes
@ -98,7 +100,7 @@ buildGraph passes = do checked <- checkedRelations
propToPass :: Property -> Pass
propToPass prop = Pass {
passCode = runPassR (\t -> propCheck prop t >> return t)
passCode = if runProps then runPassR (\t -> propCheck prop t >> return t) else return
,passName = prefixPropName (propName prop)
,passPre = Set.empty
,passPost = Set.empty