------- primary modes ------------------------------------------------
, ( "M" , PassFlag (setMode DoMkDependHS))
- , ( "E" , PassFlag (setMode (StopBefore Hsc)))
+ , ( "E" , PassFlag (setMode (StopBefore anyHsc)))
, ( "C" , PassFlag (\f -> do setMode (StopBefore HCc) f
- setLang HscC))
+ setTarget HscC))
, ( "S" , PassFlag (setMode (StopBefore As)))
- , ( "c" , PassFlag (setMode (StopBefore Ln)))
, ( "-make" , PassFlag (setMode DoMake))
, ( "-interactive" , PassFlag (setMode DoInteractive))
, ( "-mk-dll" , PassFlag (setMode DoMkDLL))
-- -fno-code says to stop after Hsc but don't generate any code.
, ( "fno-code" , PassFlag (\f -> do setMode (StopBefore HCc) f
- setLang HscNothing
+ setTarget HscNothing
writeIORef v_Recomp False))
------- GHCi -------------------------------------------------------
, ( "odir" , HasArg (writeIORef v_Output_dir . Just) )
, ( "o" , SepArg (writeIORef v_Output_file . Just) )
, ( "osuf" , HasArg (writeIORef v_Object_suf) )
- , ( "hcsuf" , HasArg (writeIORef v_HC_suf . Just) )
- , ( "hisuf" , HasArg (writeIORef v_Hi_suf) )
+ , ( "hcsuf" , HasArg (writeIORef v_HC_suf ) )
+ , ( "hisuf" , HasArg (writeIORef v_Hi_suf ) )
, ( "hidir" , HasArg (writeIORef v_Hi_dir . Just) )
, ( "buildtag" , HasArg (writeIORef v_Build_tag) )
, ( "tmpdir" , HasArg setTmpDir)
, ( "optdll" , HasArg (add v_Opt_dll) )
----- Linker --------------------------------------------------------
- , ( "no-link" , NoArg (writeIORef v_NoLink True) )
+ , ( "c" , NoArg (writeIORef v_NoLink True) )
+ , ( "no-link" , NoArg (writeIORef v_NoLink True) ) -- Deprecated
, ( "static" , NoArg (writeIORef v_Static True) )
, ( "dynamic" , NoArg (writeIORef v_Static False) )
, ( "rdynamic" , NoArg (return ()) ) -- ignored for compat w/ gcc
------ Compiler flags -----------------------------------------------
- , ( "fasm", AnySuffix (\_ -> setLang HscAsm) )
- , ( "fvia-c", NoArg (setLang HscC) )
- , ( "fvia-C", NoArg (setLang HscC) )
- , ( "filx", NoArg (setLang HscILX) )
+ , ( "fasm", AnySuffix (\_ -> setTarget HscAsm) )
+ , ( "fvia-c", NoArg (setTarget HscC) )
+ , ( "fvia-C", NoArg (setTarget HscC) )
+ , ( "filx", NoArg (setTarget HscILX) )
, ( "fglasgow-exts", NoArg (mapM_ setDynFlag glasgowExtsFlags) )
, ( "fno-glasgow-exts", NoArg (mapM_ unSetDynFlag glasgowExtsFlags) )
( "warn-unused-imports", Opt_WarnUnusedImports ),
( "warn-unused-matches", Opt_WarnUnusedMatches ),
( "warn-deprecations", Opt_WarnDeprecations ),
+ ( "warn-orphans", Opt_WarnOrphans ),
( "fi", Opt_FFI ), -- support `-ffi'...
( "ffi", Opt_FFI ), -- ...and also `-fffi'
( "arrows", Opt_Arrows ), -- arrow syntax
( "parr", Opt_PArr ),
( "th", Opt_TH ),
( "implicit-prelude", Opt_ImplicitPrelude ),
+ ( "scoped-type-variables", Opt_ScopedTypeVariables ),
( "monomorphism-restriction", Opt_MonomorphismRestriction ),
( "implicit-params", Opt_ImplicitParams ),
( "allow-overlapping-instances", Opt_AllowOverlappingInstances ),
( "unbox-strict-fields", Opt_UnboxStrictFields )
]
-glasgowExtsFlags = [ Opt_GlasgowExts, Opt_FFI, Opt_TH, Opt_ImplicitParams ]
+glasgowExtsFlags = [ Opt_GlasgowExts, Opt_FFI, Opt_TH, Opt_ImplicitParams, Opt_ScopedTypeVariables ]
isFFlag f = f `elem` (map fst fFlags)
getFFlag f = fromJust (lookup f fFlags)
-- -i on its own deletes the import paths
addImportPath "" = updDynFlags (\s -> s{importPaths = []})
-addImportPath p = updDynFlags (\s -> s{importPaths = p : importPaths s})
+addImportPath p = do
+ paths <- splitPathList p
+ updDynFlags (\s -> s{importPaths = importPaths s ++ paths})
-- we can only switch between HscC, HscAsmm, and HscILX with dynamic flags
-- (-fvia-C, -fasm, -filx respectively).
-setLang l = updDynFlags (\dfs -> case hscLang dfs of
- HscC -> dfs{ hscLang = l }
- HscAsm -> dfs{ hscLang = l }
- HscILX -> dfs{ hscLang = l }
+setTarget l = updDynFlags (\dfs -> case hscTarget dfs of
+ HscC -> dfs{ hscTarget = l }
+ HscAsm -> dfs{ hscTarget = l }
+ HscILX -> dfs{ hscTarget = l }
_ -> dfs)
setOptLevel :: Int -> IO ()
setOptLevel n
= do dflags <- readIORef v_DynFlags
- if hscLang dflags == HscInterpreted && n > 0
+ if hscTarget dflags == HscInterpreted && n > 0
then putStr "warning: -O conflicts with --interactive; -O ignored.\n"
else writeIORef v_DynFlags (updOptLevel n dflags)
(ghc_usage_path,ghci_usage_path) <- getUsageMsgPaths
mode <- readIORef v_GhcMode
let usage_path
- | mode == DoInteractive = ghci_usage_path
- | otherwise = ghc_usage_path
+ | DoInteractive <- mode = ghci_usage_path
+ | otherwise = ghc_usage_path
usage <- readFile usage_path
dump usage
exitWith ExitSuccess