From b970b9df337db1a9e1b7039e2915b90f4021be76 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 19 Mar 2009 11:38:48 +0000 Subject: [PATCH] Added command line options for occam 2 mobility, and turned it off by default --- Main.hs | 27 ++++++++++++++------------- data/CompState.hs | 2 +- pass/PassList.hs | 2 +- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Main.hs b/Main.hs index 3de9dcd..e29868d 100644 --- a/Main.hs +++ b/Main.hs @@ -67,7 +67,8 @@ optionsNoWarnings = , Option [] ["mode"] (ReqArg optMode "MODE") "select mode (options: flowgraph, parse, compile, post-c, full)" , Option ['o'] ["output"] (ReqArg optOutput "FILE") "output file (default \"-\")" , Option [] ["sanity-check"] (ReqArg optSanityCheck "SETTING") "internal sanity check (options: on, off)" - , Option [] ["usage-checking"] (ReqArg optUsageChecking "SETTING") "usage checking (EXPERIMENTAL) (options: on, off)" + , Option [] ["occam2-mobility"] (ReqArg optClassicOccamMobility "SETTING") "occam2 implicit mobility (EXPERIMENTAL) (options: on, off)" + , Option [] ["usage-checking"] (ReqArg optUsageChecking "SETTING") "usage checking (options: on, off)" , Option ['v'] ["verbose"] (NoArg $ optVerbose) "be more verbose (use multiple times for more detail)" ] @@ -123,22 +124,22 @@ optPrintHelp _ = dieIO (Nothing, usageInfo "Usage: tock [OPTION...] SOURCEFILE" optPrintWarningHelp :: OptFunc optPrintWarningHelp _ = dieIO (Nothing, usageInfo "Usage: tock [OPTION...] SOURCEFILE" optionsWarnings) +optOnOff :: (String, Bool -> CompState -> CompState) -> String -> OptFunc +optOnOff (n, f) s ps + = do mode <- case s of + "on" -> return True + "off" -> return False + _ -> dieIO (Nothing, "Unknown " ++ n ++ " mode: " ++ s) + return $ f mode ps optUsageChecking :: String -> OptFunc -optUsageChecking s ps - = do usageCheck <- case s of - "on" -> return True - "off" -> return False - _ -> dieIO (Nothing, "Unknown usage checking mode: " ++ s) - return $ ps { csUsageChecking = usageCheck } +optUsageChecking = optOnOff ("usage checking", \m ps -> ps { csUsageChecking = m }) 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 } +optSanityCheck = optOnOff ("sanity checking", \m ps -> ps { csSanityCheck = m }) + +optClassicOccamMobility :: String -> OptFunc +optClassicOccamMobility = optOnOff ("occam 2 mobility", \m ps -> ps { csClassicOccamMobility = m }) optEnableWarning :: WarningType -> OptFunc optEnableWarning w ps = return $ ps { csEnabledWarnings = Set.insert w (csEnabledWarnings ps) } diff --git a/data/CompState.hs b/data/CompState.hs index 5100bb5..7c78593 100644 --- a/data/CompState.hs +++ b/data/CompState.hs @@ -147,7 +147,7 @@ emptyState = CompState { , WarnUnknownPreprocessorDirective , WarnUnusedVariable], -- TODO enable WarnUninitialisedVariable by default - csClassicOccamMobility = True, + csClassicOccamMobility = False, csCurrentFile = "none", csUsedFiles = Set.empty, diff --git a/pass/PassList.hs b/pass/PassList.hs index a557d52..0788635 100644 --- a/pass/PassList.hs +++ b/pass/PassList.hs @@ -60,7 +60,7 @@ commonPasses opts = concat $ [pass "Usage checking turned OFF" Prop.agg_namesDone [Prop.parUsageChecked] return] -- TODO add an implicit mobility pass after these two: - , enablePassesWhen csClassicOccamMobility [mobiliseArrays, inferDeref] + , enablePassesWhen csClassicOccamMobility [mobiliseArrays, inferDeref, implicitMobility] , simplifyAbbrevs , simplifyComms , simplifyExprs