X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=ghc%2Fcompiler%2Fmain%2FDriverFlags.hs;h=2c084060d211581ae00fbe24ec04f4df07413920;hb=dcf6daa80768154d11c8853af7b52fc51fba4742;hp=f474f6c8eedb30c7d77f322d02f7538f8972454d;hpb=2c63b3b61a8e9f7b78ec179a46234c771dae4c78;p=ghc-hetmet.git diff --git a/ghc/compiler/main/DriverFlags.hs b/ghc/compiler/main/DriverFlags.hs index f474f6c..2c08406 100644 --- a/ghc/compiler/main/DriverFlags.hs +++ b/ghc/compiler/main/DriverFlags.hs @@ -1,5 +1,5 @@ ----------------------------------------------------------------------------- --- $Id: DriverFlags.hs,v 1.26 2000/12/05 12:19:49 rrt Exp $ +-- $Id: DriverFlags.hs,v 1.31 2000/12/11 12:15:15 simonmar Exp $ -- -- Driver flags -- @@ -22,7 +22,9 @@ import TmpFiles ( newTempName ) import Directory ( removeFile ) import Exception import IOExts + import IO +import Maybe import Monad import System import Char @@ -194,7 +196,7 @@ static_flags = ------- Miscellaneous ----------------------------------------------- , ( "no-link-chk" , NoArg (return ()) ) -- ignored for backwards compat - , ( "no-hs-main" , NoArg (writeIORef v_noHsMain True) ) + , ( "no-hs-main" , NoArg (writeIORef v_NoHsMain True) ) ------- Output Redirection ------------------------------------------ , ( "odir" , HasArg (writeIORef v_Output_dir . Just) ) @@ -262,9 +264,7 @@ static_flags = , ( "rdynamic" , NoArg (return ()) ) -- ignored for compat w/ gcc ----- RTS opts ------------------------------------------------------ -#ifdef not_yet , ( "H" , HasArg (setHeapSize . fromIntegral . decodeSize) ) -#endif ------ Compiler flags ----------------------------------------------- , ( "O2-for-C" , NoArg (writeIORef v_minus_o2_for_C True) ) @@ -281,8 +281,14 @@ static_flags = , ( "fexcess-precision" , NoArg (do writeIORef v_Excess_precision True add v_Opt_C "-fexcess-precision")) + -- Optimisation flags are treated specially, so the normal + -- -fno-* pattern below doesn't work. We therefore allow + -- certain optimisation passes to be turned off explicitly: + , ( "fno-strictness" , NoArg (writeIORef v_Strictness False) ) + , ( "fno-cpr" , NoArg (writeIORef v_CPR False) ) + , ( "fno-cse" , NoArg (writeIORef v_CSE False) ) + -- flags that are "active negatives" - , ( "fno-implicit-prelude" , PassFlag (add v_Opt_C) ) , ( "fno-prune-tydecls" , PassFlag (add v_Opt_C) ) , ( "fno-prune-instdecls" , PassFlag (add v_Opt_C) ) , ( "fno-pre-inlining" , PassFlag (add v_Opt_C) ) @@ -381,6 +387,7 @@ dynamic_flags = [ , ( "ddump-simpl", NoArg (setDynFlag Opt_D_dump_simpl) ) , ( "ddump-simpl-iterations", NoArg (setDynFlag Opt_D_dump_simpl_iterations) ) , ( "ddump-spec", NoArg (setDynFlag Opt_D_dump_spec) ) + , ( "ddump-sat", NoArg (setDynFlag Opt_D_dump_sat) ) , ( "ddump-stg", NoArg (setDynFlag Opt_D_dump_stg) ) , ( "ddump-stranal", NoArg (setDynFlag Opt_D_dump_stranal) ) , ( "ddump-tc", NoArg (setDynFlag Opt_D_dump_tc) ) @@ -405,23 +412,6 @@ dynamic_flags = [ , ( "dstg-lint", NoArg (setDynFlag Opt_DoStgLinting) ) , ( "dusagesp-lint", NoArg (setDynFlag Opt_DoUSPLinting) ) - ------ Warnings ---------------------------------------------------- - - , ( "fwarn-duplicate-exports", NoArg (setDynFlag Opt_WarnDuplicateExports) ) - , ( "fwarn-hi-shadowing", NoArg (setDynFlag Opt_WarnHiShadows) ) - , ( "fwarn-incomplete-patterns", NoArg (setDynFlag Opt_WarnIncompletePatterns) ) - , ( "fwarn-missing-fields", NoArg (setDynFlag Opt_WarnMissingFields) ) - , ( "fwarn-missing-methods", NoArg (setDynFlag Opt_WarnMissingMethods)) - , ( "fwarn-missing-signatures", NoArg (setDynFlag Opt_WarnMissingSigs) ) - , ( "fwarn-name-shadowing", NoArg (setDynFlag Opt_WarnNameShadowing) ) - , ( "fwarn-overlapping-patterns", NoArg (setDynFlag Opt_WarnOverlappingPatterns ) ) - , ( "fwarn-simple-patterns", NoArg (setDynFlag Opt_WarnSimplePatterns)) - , ( "fwarn-type-defaults", NoArg (setDynFlag Opt_WarnTypeDefaults) ) - , ( "fwarn-unused-binds", NoArg (setDynFlag Opt_WarnUnusedBinds) ) - , ( "fwarn-unused-imports", NoArg (setDynFlag Opt_WarnUnusedImports) ) - , ( "fwarn-unused-matches", NoArg (setDynFlag Opt_WarnUnusedMatches) ) - , ( "fwarn-deprecations", NoArg (setDynFlag Opt_WarnDeprecations) ) - ------ Machine dependant (-m) stuff --------------------------- , ( "monly-2-regs", NoArg (updateState (\s -> s{stolen_x86_regs = 2}) )) @@ -430,24 +420,44 @@ dynamic_flags = [ ------ Compiler flags ----------------------------------------------- - , ( "fasm" , AnySuffix (\_ -> setLang HscAsm) ) - - , ( "fvia-c" , NoArg (setLang HscC) ) - , ( "fvia-C" , NoArg (setLang HscC) ) + , ( "fasm", AnySuffix (\_ -> setLang HscAsm) ) + , ( "fvia-c", NoArg (setLang HscC) ) + , ( "fvia-C", NoArg (setLang HscC) ) - , ( "fglasgow-exts", NoArg (setDynFlag Opt_GlasgowExts) ) - , ( "fno-implicit-prelude", NoArg (setDynFlag Opt_NoImplicitPrelude) ) + -- "active negatives" + , ( "fno-implicit-prelude", NoArg (setDynFlag Opt_NoImplicitPrelude) ) - , ( "fallow-overlapping-instances", - NoArg (setDynFlag Opt_AllowOverlappingInstances) ) + -- the rest of the -f* and -fno-* flags + , ( "fno-", PrefixPred (\f -> isFFlag f) (\f -> unSetDynFlag (getFFlag f)) ) + , ( "f". PrefixPred (\f -> isFFlag f) (\f -> setDynFlag (getFFlag f)) ) + ] - , ( "fallow-undecidable-instances", - NoArg (setDynFlag Opt_AllowUndecidableInstances) ) +-- these -f flags can all be reversed with -fno- + +fFlags = [ + ( "warn-duplicate-exports", Opt_WarnDuplicateExports ), + ( "warn-hi-shadowing", Opt_WarnHiShadows ), + ( "warn-incomplete-patterns", Opt_WarnIncompletePatterns ), + ( "warn-missing-fields", Opt_WarnMissingFields ), + ( "warn-missing-methods", Opt_WarnMissingMethods ), + ( "warn-missing-signatures", Opt_WarnMissingSigs ), + ( "warn-name-shadowing", Opt_WarnNameShadowing ), + ( "warn-overlapping-patterns", Opt_WarnOverlappingPatterns ), + ( "warn-simple-patterns", Opt_WarnSimplePatterns ), + ( "warn-type-defaults", Opt_WarnTypeDefaults ), + ( "warn-unused-binds", Opt_WarnUnusedBinds ), + ( "warn-unused-imports", Opt_WarnUnusedImports ), + ( "warn-unused-matches", Opt_WarnUnusedMatches ), + ( "warn-deprecations", Opt_WarnDeprecations ), + ( "glasgow-exts", Opt_GlasgowExts ), + ( "allow-overlapping-instances", Opt_AllowOverlappingInstances ), + ( "allow-undecidable-instances", Opt_AllowUndecidableInstances ), + ( "fgenerics", Opt_Generics ), + ( "report-compile", Opt_ReportCompile ) + ] - , ( "fgenerics", NoArg (setDynFlag Opt_Generics) ) - - , ( "freport-compile", NoArg (setDynFlag Opt_ReportCompile) ) - ] +isFFlag f = f `elem` (map fst fFlags) +getFFlag f = fromJust (lookup f fFlags) ----------------------------------------------------------------------------- -- convert sizes like "3.5M" into integers @@ -467,8 +477,11 @@ floatOpt :: IORef Double -> String -> IO () floatOpt ref str = writeIORef ref (read str :: Double) -#ifdef not_yet +#if __GLASGOW_HASKELL__ >= 411 foreign import "setHeapSize" unsafe setHeapSize :: Int -> IO () +#else +setHeapSize :: Int -> IO () -- -H is ignored +setHeapSize _ = return () #endif -----------------------------------------------------------------------------