Tidy up -keep* flags
[ghc-hetmet.git] / compiler / main / DynFlags.hs
index 0a18964..063f102 100644 (file)
@@ -178,7 +178,7 @@ data DynFlag
    | Opt_TypeFamilies
    | Opt_OverloadedStrings
    | Opt_DisambiguateRecordFields
-   | Opt_RecordDotDot
+   | Opt_RecordWildCards
    | Opt_RecordPuns
    | Opt_GADTs
    | Opt_RelaxedPolyRec                        -- -X=RelaxedPolyRec
@@ -361,7 +361,7 @@ data GhcLink        -- What to do in the link step, if there is one
   = NoLink             -- Don't link at all
   | LinkBinary         -- Link object code into a binary
   | LinkInMemory        -- Use the in-memory dynamic linker
-  | MkDLL              -- Make a DLL
+  | LinkDynLib         -- Link objects into a dynamic lib (DLL on Windows, DSO on ELF platforms)
   deriving Eq
 
 isNoLink :: GhcLink -> Bool
@@ -561,13 +561,14 @@ data Option
 updOptLevel :: Int -> DynFlags -> DynFlags
 -- Set dynflags appropriate to the optimisation level
 updOptLevel n dfs
-  = dfs2{ optLevel = n }
+  = dfs2{ optLevel = final_n }
   where
+   final_n = max 0 (min 2 n)   -- Clamp to 0 <= n <= 2
    dfs1 = foldr (flip dopt_unset) dfs  remove_dopts
    dfs2 = foldr (flip dopt_set)   dfs1 extra_dopts
 
-   extra_dopts  = [ f | (ns,f) <- optLevelFlags, n `elem` ns ]
-   remove_dopts = [ f | (ns,f) <- optLevelFlags, n `notElem` ns ]
+   extra_dopts  = [ f | (ns,f) <- optLevelFlags, final_n `elem` ns ]
+   remove_dopts = [ f | (ns,f) <- optLevelFlags, final_n `notElem` ns ]
        
 optLevelFlags :: [([Int], DynFlag)]
 optLevelFlags
@@ -873,7 +874,7 @@ dynamic_flags = [
        -------- Linking ----------------------------------------------------
   ,  ( "c"             , NoArg (upd $ \d -> d{ ghcLink=NoLink } ))
   ,  ( "no-link"       , NoArg (upd $ \d -> d{ ghcLink=NoLink } )) -- Dep.
-  ,  ( "-mk-dll"       , NoArg (upd $ \d -> d{ ghcLink=MkDLL } ))
+  ,  ( "shared"                , NoArg (upd $ \d -> d{ ghcLink=LinkDynLib } ))
 
        ------- Libraries ---------------------------------------------------
   ,  ( "L"             , Prefix addLibraryPath )
@@ -897,10 +898,15 @@ dynamic_flags = [
   ,  ( "stubdir"       , HasArg (upd . setStubDir . Just))
 
        ------- Keeping temporary files -------------------------------------
-  ,  ( "keep-hc-file"   , AnySuffix (\_ -> setDynFlag Opt_KeepHcFiles))
-  ,  ( "keep-s-file"    , AnySuffix (\_ -> setDynFlag Opt_KeepSFiles))
-  ,  ( "keep-raw-s-file", AnySuffix (\_ -> setDynFlag Opt_KeepRawSFiles))
-  ,  ( "keep-tmp-files" , AnySuffix (\_ -> setDynFlag Opt_KeepTmpFiles))
+     -- These can be singular (think ghc -c) or plural (think ghc --make)
+  ,  ( "keep-hc-file"    , NoArg (setDynFlag Opt_KeepHcFiles))
+  ,  ( "keep-hc-files"   , NoArg (setDynFlag Opt_KeepHcFiles))
+  ,  ( "keep-s-file"     , NoArg (setDynFlag Opt_KeepSFiles))
+  ,  ( "keep-s-files"    , NoArg (setDynFlag Opt_KeepSFiles))
+  ,  ( "keep-raw-s-file" , NoArg (setDynFlag Opt_KeepRawSFiles))
+  ,  ( "keep-raw-s-files", NoArg (setDynFlag Opt_KeepRawSFiles))
+     -- This only makes sense as plural
+  ,  ( "keep-tmp-files"  , NoArg (setDynFlag Opt_KeepTmpFiles))
 
        ------- Miscellaneous ----------------------------------------------
   ,  ( "no-hs-main"     , NoArg (setDynFlag Opt_NoHsMain))
@@ -1099,6 +1105,10 @@ xFlags = [
 
   ( "ImplicitPrelude",                 Opt_ImplicitPrelude ),  -- On by default
 
+  ( "RecordWildCards",                 Opt_RecordWildCards ),
+  ( "RecordPuns",                      Opt_RecordPuns ),
+  ( "DisambiguateRecordFields",                Opt_DisambiguateRecordFields ),
+
   ( "OverloadedStrings",               Opt_OverloadedStrings ),
   ( "GADTs",                           Opt_GADTs ),
   ( "TypeFamilies",                    Opt_TypeFamilies ),
@@ -1121,6 +1131,7 @@ impliedFlags = [
 
 glasgowExtsFlags = [ Opt_GlasgowExts 
                   , Opt_FFI 
+                  , Opt_GADTs
                   , Opt_ImplicitParams 
                   , Opt_ScopedTypeVariables
                   , Opt_TypeFamilies ]