diff options
author | David Waern <david.waern@gmail.com> | 2011-11-26 00:02:29 +0100 |
---|---|---|
committer | David Waern <david.waern@gmail.com> | 2011-11-26 00:02:29 +0100 |
commit | fdf98d6255deba9582dd475e6953b1bb49fba660 (patch) | |
tree | 839d39e5cdb3ec89868ed74705464b0674cd69b3 /compiler/main/DynFlags.hs | |
parent | ee2dad13f8a3cd484f25aa949895535d6eb0f15e (diff) | |
parent | 381becf01a71654464a8c73ba8f4671337ebae9a (diff) | |
download | haskell-fdf98d6255deba9582dd475e6953b1bb49fba660.tar.gz |
Merge branch 'master' of http://darcs.haskell.org/ghc
Diffstat (limited to 'compiler/main/DynFlags.hs')
-rw-r--r-- | compiler/main/DynFlags.hs | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 4eb6dc9bcb..fce75b0bff 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -129,6 +129,9 @@ import qualified Data.Set as Set import System.FilePath import System.IO ( stderr, hPutChar ) +import Data.IntSet (IntSet) +import qualified Data.IntSet as IntSet + -- ----------------------------------------------------------------------------- -- DynFlags @@ -304,7 +307,7 @@ data DynFlag | Opt_DistrustAllPackages | Opt_PackageTrust - deriving (Eq, Show) + deriving (Eq, Show, Enum) data WarningFlag = Opt_WarnDuplicateExports @@ -341,7 +344,7 @@ data WarningFlag = | Opt_WarnAlternativeLayoutRuleTransitional | Opt_WarnUnsafe | Opt_WarnSafe - deriving (Eq, Show) + deriving (Eq, Show, Enum) data Language = Haskell98 | Haskell2010 deriving Enum @@ -552,8 +555,8 @@ data DynFlags = DynFlags { generatedDumps :: IORef (Set FilePath), -- hsc dynamic flags - flags :: [DynFlag], - warningFlags :: [WarningFlag], + flags :: IntSet, + warningFlags :: IntSet, -- Don't change this without updating extensionFlags: language :: Maybe Language, -- | Safe Haskell mode @@ -569,7 +572,7 @@ data DynFlags = DynFlags { extensions :: [OnOff ExtensionFlag], -- extensionFlags should always be equal to -- flattenExtensionFlags language extensions - extensionFlags :: [ExtensionFlag], + extensionFlags :: IntSet, -- | Message output action: use "ErrUtils" instead of this if you can log_action :: LogAction, @@ -894,8 +897,8 @@ defaultDynFlags mySettings = dirsToClean = panic "defaultDynFlags: No dirsToClean", generatedDumps = panic "defaultDynFlags: No generatedDumps", haddockOptions = Nothing, - flags = defaultFlags, - warningFlags = standardWarnings, + flags = IntSet.fromList (map fromEnum defaultFlags), + warningFlags = IntSet.fromList (map fromEnum standardWarnings), language = Nothing, safeHaskell = Sf_SafeInfered, thOnLoc = noSrcSpan, @@ -938,12 +941,11 @@ data OnOff a = On a -- OnOffs accumulate in reverse order, so we use foldr in order to -- process them in the right order -flattenExtensionFlags :: Maybe Language -> [OnOff ExtensionFlag] - -> [ExtensionFlag] +flattenExtensionFlags :: Maybe Language -> [OnOff ExtensionFlag] -> IntSet flattenExtensionFlags ml = foldr f defaultExtensionFlags - where f (On f) flags = f : delete f flags - f (Off f) flags = delete f flags - defaultExtensionFlags = languageExtensions ml + where f (On f) flags = IntSet.insert (fromEnum f) flags + f (Off f) flags = IntSet.delete (fromEnum f) flags + defaultExtensionFlags = IntSet.fromList (map fromEnum (languageExtensions ml)) languageExtensions :: Maybe Language -> [ExtensionFlag] @@ -985,31 +987,31 @@ languageExtensions (Just Haskell2010) -- | Test whether a 'DynFlag' is set dopt :: DynFlag -> DynFlags -> Bool -dopt f dflags = f `elem` (flags dflags) +dopt f dflags = fromEnum f `IntSet.member` flags dflags -- | Set a 'DynFlag' dopt_set :: DynFlags -> DynFlag -> DynFlags -dopt_set dfs f = dfs{ flags = f : flags dfs } +dopt_set dfs f = dfs{ flags = IntSet.insert (fromEnum f) (flags dfs) } -- | Unset a 'DynFlag' dopt_unset :: DynFlags -> DynFlag -> DynFlags -dopt_unset dfs f = dfs{ flags = filter (/= f) (flags dfs) } +dopt_unset dfs f = dfs{ flags = IntSet.delete (fromEnum f) (flags dfs) } -- | Test whether a 'WarningFlag' is set wopt :: WarningFlag -> DynFlags -> Bool -wopt f dflags = f `elem` (warningFlags dflags) +wopt f dflags = fromEnum f `IntSet.member` warningFlags dflags -- | Set a 'WarningFlag' wopt_set :: DynFlags -> WarningFlag -> DynFlags -wopt_set dfs f = dfs{ warningFlags = f : warningFlags dfs } +wopt_set dfs f = dfs{ warningFlags = IntSet.insert (fromEnum f) (warningFlags dfs) } -- | Unset a 'WarningFlag' wopt_unset :: DynFlags -> WarningFlag -> DynFlags -wopt_unset dfs f = dfs{ warningFlags = filter (/= f) (warningFlags dfs) } +wopt_unset dfs f = dfs{ warningFlags = IntSet.delete (fromEnum f) (warningFlags dfs) } -- | Test whether a 'ExtensionFlag' is set xopt :: ExtensionFlag -> DynFlags -> Bool -xopt f dflags = f `elem` extensionFlags dflags +xopt f dflags = fromEnum f `IntSet.member` extensionFlags dflags -- | Set a 'ExtensionFlag' xopt_set :: DynFlags -> ExtensionFlag -> DynFlags @@ -1589,9 +1591,9 @@ dynamic_flags = [ , Flag "Werror" (NoArg (setDynFlag Opt_WarnIsError)) , Flag "Wwarn" (NoArg (unSetDynFlag Opt_WarnIsError)) , Flag "Wall" (NoArg (mapM_ setWarningFlag minusWallOpts)) - , Flag "Wnot" (NoArg (do upd (\dfs -> dfs {warningFlags = []}) + , Flag "Wnot" (NoArg (do upd (\dfs -> dfs {warningFlags = IntSet.empty}) deprecate "Use -w instead")) - , Flag "w" (NoArg (upd (\dfs -> dfs {warningFlags = []}))) + , Flag "w" (NoArg (upd (\dfs -> dfs {warningFlags = IntSet.empty}))) ------ Plugin flags ------------------------------------------------ , Flag "fplugin-opt" (hasArg addPluginModuleNameOption) |