Hooked the C-- CPS pass into the compilation pipeline
[ghc-hetmet.git] / compiler / main / DynFlags.hs
index 605474f..a5c1ab8 100644 (file)
@@ -92,6 +92,7 @@ data DynFlag
 
    -- debugging flags
    = Opt_D_dump_cmm
+   | Opt_D_dump_cps_cmm
    | Opt_D_dump_asm
    | Opt_D_dump_cpranal
    | Opt_D_dump_deriv
@@ -177,6 +178,9 @@ data DynFlag
    | Opt_BangPatterns
    | Opt_TypeFamilies
    | Opt_OverloadedStrings
+   | Opt_DisambiguateRecordFields
+   | Opt_RecordWildCards
+   | Opt_RecordPuns
    | Opt_GADTs
    | Opt_RelaxedPolyRec                        -- -X=RelaxedPolyRec
 
@@ -198,7 +202,6 @@ data DynFlag
    | Opt_RewriteRules
 
    -- misc opts
-   | Opt_ShortGhciBanner
    | Opt_Cpp
    | Opt_Pp
    | Opt_ForceRecomp
@@ -358,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
@@ -558,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
@@ -839,8 +843,6 @@ dynamic_flags = [
   ,  ( "F"             , NoArg  (setDynFlag Opt_Pp))
   ,  ( "#include"      , HasArg (addCmdlineHCInclude) )
   ,  ( "v"             , OptIntSuffix setVerbosity )
-  ,  ( "short-ghci-banner", NoArg (setDynFlag Opt_ShortGhciBanner) )
-  ,  ( "long-ghci-banner" , NoArg (unSetDynFlag Opt_ShortGhciBanner) )
 
         ------- Specific phases  --------------------------------------------
   ,  ( "pgmL"           , HasArg (upd . setPgmL) )  
@@ -870,7 +872,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 )
@@ -894,10 +896,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))
@@ -931,6 +938,7 @@ dynamic_flags = [
   ,  ( "dstg-stats",   NoArg (setDynFlag Opt_StgStats))
 
   ,  ( "ddump-cmm",             setDumpFlag Opt_D_dump_cmm)
+  ,  ( "ddump-cps-cmm",                 setDumpFlag Opt_D_dump_cps_cmm)
   ,  ( "ddump-asm",             setDumpFlag Opt_D_dump_asm)
   ,  ( "ddump-cpranal",         setDumpFlag Opt_D_dump_cpranal)
   ,  ( "ddump-deriv",           setDumpFlag Opt_D_dump_deriv)
@@ -1009,7 +1017,7 @@ dynamic_flags = [
 
         ------ Compiler flags -----------------------------------------------
 
-  ,  ( "fasm",         AnySuffix (\_ -> setObjTarget HscAsm) )
+  ,  ( "fasm",         NoArg (setObjTarget HscAsm) )
   ,  ( "fvia-c",       NoArg (setObjTarget HscC) )
   ,  ( "fvia-C",       NoArg (setObjTarget HscC) )
 
@@ -1026,6 +1034,7 @@ dynamic_flags = [
 
        -- For now, allow -X flags with -f; ToDo: report this as deprecated
   ,  ( "f",            PrefixPred (isFlag xFlags) (\f ->  setDynFlag (getFlag xFlags f)) )
+  ,  ( "f",            PrefixPred (isNoFlag xFlags) (\f -> unSetDynFlag (getNoFlag xFlags f)) )
 
        -- the rest of the -X* and -Xno-* flags
   ,  ( "X",            PrefixPred (isFlag xFlags)   (\f -> setDynFlag   (getFlag xFlags f)) )
@@ -1095,6 +1104,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 ),
@@ -1117,6 +1130,7 @@ impliedFlags = [
 
 glasgowExtsFlags = [ Opt_GlasgowExts 
                   , Opt_FFI 
+                  , Opt_GADTs
                   , Opt_ImplicitParams 
                   , Opt_ScopedTypeVariables
                   , Opt_TypeFamilies ]