summaryrefslogtreecommitdiff
path: root/compiler/main/DynFlags.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/main/DynFlags.hs')
-rw-r--r--compiler/main/DynFlags.hs82
1 files changed, 19 insertions, 63 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 3327a1effe..3ecb1031a4 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -92,7 +92,7 @@ module DynFlags (
getVerbFlags,
updOptLevel,
setTmpDir,
- setPackageKey,
+ setUnitId,
interpretPackageEnv,
-- ** Parsing DynFlags
@@ -100,10 +100,6 @@ module DynFlags (
parseDynamicFilePragma,
parseDynamicFlagsFull,
- -- ** Package key cache
- PackageKeyCache,
- ShPackageKey(..),
-
-- ** Available DynFlags
allFlags,
flagsAll,
@@ -181,8 +177,6 @@ import Foreign.C ( CInt(..) )
import System.IO.Unsafe ( unsafeDupablePerformIO )
#endif
import {-# SOURCE #-} ErrUtils ( Severity(..), MsgDoc, mkLocMessage )
-import UniqFM
-import UniqSet
import System.IO.Unsafe ( unsafePerformIO )
import Data.IORef
@@ -667,29 +661,6 @@ type SigOf = Map ModuleName Module
getSigOf :: DynFlags -> ModuleName -> Maybe Module
getSigOf dflags n = Map.lookup n (sigOf dflags)
--- NameCache updNameCache
-type PackageKeyEnv = UniqFM
-type PackageKeyCache = PackageKeyEnv ShPackageKey
-
--- | An elaborated representation of a 'PackageKey', which records
--- all of the components that go into the hashed 'PackageKey'.
-data ShPackageKey
- = ShPackageKey {
- shPackageKeyUnitName :: !UnitName,
- shPackageKeyLibraryName :: !LibraryName,
- shPackageKeyInsts :: ![(ModuleName, Module)],
- shPackageKeyFreeHoles :: UniqSet ModuleName
- }
- | ShDefinitePackageKey {
- shPackageKey :: !PackageKey
- }
- deriving Eq
-
-instance Outputable ShPackageKey where
- ppr (ShPackageKey pn vh insts fh)
- = ppr pn <+> ppr vh <+> ppr insts <+> parens (ppr fh)
- ppr (ShDefinitePackageKey pk) = ppr pk
-
-- | Contains not only a collection of 'GeneralFlag's but also a plethora of
-- information relating to the compilation of a single file or GHC session
data DynFlags = DynFlags {
@@ -734,10 +705,7 @@ data DynFlags = DynFlags {
solverIterations :: IntWithInf, -- ^ Number of iterations in the constraints solver
-- Typically only 1 is needed
- thisPackage :: PackageKey, -- ^ key of package currently being compiled
- thisLibraryName :: LibraryName,
- -- ^ the version hash which identifies the textual
- -- package being compiled.
+ thisPackage :: UnitId, -- ^ key of package currently being compiled
-- ways
ways :: [Way], -- ^ Way flags from the command line
@@ -824,7 +792,6 @@ data DynFlags = DynFlags {
-- Packages.initPackages
pkgDatabase :: Maybe [PackageConfig],
pkgState :: PackageState,
- pkgKeyCache :: {-# UNPACK #-} !(IORef PackageKeyCache),
-- Temporary files
-- These have to be IORefs, because the defaultCleanupHandler needs to
@@ -902,8 +869,6 @@ data DynFlags = DynFlags {
interactivePrint :: Maybe String,
- llvmVersion :: IORef Int,
-
nextWrapperNum :: IORef (ModuleEnv Int),
-- | Machine dependant flags (-m<blah> stuff)
@@ -1153,7 +1118,7 @@ isNoLink _ = False
data PackageArg =
PackageArg String -- ^ @-package@, by 'PackageName'
| PackageIdArg String -- ^ @-package-id@, by 'SourcePackageId'
- | PackageKeyArg String -- ^ @-package-key@, by 'InstalledPackageId'
+ | UnitIdArg String -- ^ @-package-key@, by 'ComponentId'
deriving (Eq, Show)
-- | Represents the renaming that may be associated with an exposed
@@ -1411,7 +1376,6 @@ initDynFlags dflags = do
refDirsToClean <- newIORef Map.empty
refFilesToNotIntermediateClean <- newIORef []
refGeneratedDumps <- newIORef Set.empty
- refLlvmVersion <- newIORef 28
refRtldInfo <- newIORef Nothing
refRtccInfo <- newIORef Nothing
wrapperNum <- newIORef emptyModuleEnv
@@ -1428,7 +1392,6 @@ initDynFlags dflags = do
dirsToClean = refDirsToClean,
filesToNotIntermediateClean = refFilesToNotIntermediateClean,
generatedDumps = refGeneratedDumps,
- llvmVersion = refLlvmVersion,
nextWrapperNum = wrapperNum,
useUnicode = canUseUnicode,
rtldInfo = refRtldInfo,
@@ -1473,8 +1436,7 @@ defaultDynFlags mySettings =
reductionDepth = treatZeroAsInf mAX_REDUCTION_DEPTH,
solverIterations = treatZeroAsInf mAX_SOLVER_ITERATIONS,
- thisPackage = mainPackageKey,
- thisLibraryName = LibraryName nilFS,
+ thisPackage = mainUnitId,
objectDir = Nothing,
dylibInstallName = Nothing,
@@ -1520,7 +1482,6 @@ defaultDynFlags mySettings =
pkgDatabase = Nothing,
-- This gets filled in with GHC.setSessionDynFlags
pkgState = emptyPackageState,
- pkgKeyCache = v_unsafePkgKeyCache,
ways = defaultWays mySettings,
buildTag = mkBuildTag (defaultWays mySettings),
rtsBuildTag = mkBuildTag (defaultWays mySettings),
@@ -1583,7 +1544,6 @@ defaultDynFlags mySettings =
useUnicode = False,
traceLevel = 1,
profAuto = NoProfAuto,
- llvmVersion = panic "defaultDynFlags: No llvmVersion",
interactivePrint = Nothing,
nextWrapperNum = panic "defaultDynFlags: No nextWrapperNum",
sseVersion = Nothing,
@@ -1954,10 +1914,10 @@ parseSigOf str = case filter ((=="").snd) (readP_to_S parse str) of
m <- tok $ parseModule
return (n, m)
parseModule = do
- pk <- munch1 (\c -> isAlphaNum c || c `elem` "-_")
+ pk <- munch1 (\c -> isAlphaNum c || c `elem` "-_.")
_ <- R.char ':'
m <- parseModuleName
- return (mkModule (stringToPackageKey pk) m)
+ return (mkModule (stringToUnitId pk) m)
tok m = skipSpaces >> m
setSigOf :: String -> DynFlags -> DynFlags
@@ -2766,13 +2726,12 @@ package_flags = [
deprecate "Use -no-user-package-db instead")
, defGhcFlag "package-name" (HasArg $ \name -> do
- upd (setPackageKey name)
+ upd (setUnitId name)
deprecate "Use -this-package-key instead")
- , defGhcFlag "this-package-key" (hasArg setPackageKey)
- , defGhcFlag "library-name" (hasArg setLibraryName)
+ , defGhcFlag "this-package-key" (hasArg setUnitId)
, defFlag "package-id" (HasArg exposePackageId)
, defFlag "package" (HasArg exposePackage)
- , defFlag "package-key" (HasArg exposePackageKey)
+ , defFlag "package-key" (HasArg exposeUnitId)
, defFlag "hide-package" (HasArg hidePackage)
, defFlag "hide-all-packages" (NoArg (setGeneralFlag Opt_HideAllPackages))
, defFlag "package-env" (HasArg setPackageEnv)
@@ -2877,7 +2836,8 @@ fWarningFlags = [
Opt_WarnAlternativeLayoutRuleTransitional,
flagSpec' "warn-amp" Opt_WarnAMP
(\_ -> deprecate "it has no effect, and will be removed in GHC 7.12"),
- flagSpec "warn-auto-orphans" Opt_WarnAutoOrphans,
+ flagSpec' "warn-auto-orphans" Opt_WarnAutoOrphans
+ (\_ -> deprecate "it has no effect"),
flagSpec "warn-deferred-type-errors" Opt_WarnDeferredTypeErrors,
flagSpec "warn-deprecations" Opt_WarnWarningsDeprecations,
flagSpec "warn-deprecated-flags" Opt_WarnDeprecatedFlags,
@@ -3751,15 +3711,15 @@ parsePackageFlag constr str = case filter ((=="").snd) (readP_to_S parse str) of
return (orig, orig))
tok m = m >>= \x -> skipSpaces >> return x
-exposePackage, exposePackageId, exposePackageKey, hidePackage, ignorePackage,
+exposePackage, exposePackageId, exposeUnitId, hidePackage, ignorePackage,
trustPackage, distrustPackage :: String -> DynP ()
exposePackage p = upd (exposePackage' p)
exposePackageId p =
upd (\s -> s{ packageFlags =
parsePackageFlag PackageIdArg p : packageFlags s })
-exposePackageKey p =
+exposeUnitId p =
upd (\s -> s{ packageFlags =
- parsePackageFlag PackageKeyArg p : packageFlags s })
+ parsePackageFlag UnitIdArg p : packageFlags s })
hidePackage p =
upd (\s -> s{ packageFlags = HidePackage p : packageFlags s })
ignorePackage p =
@@ -3774,11 +3734,8 @@ exposePackage' p dflags
= dflags { packageFlags =
parsePackageFlag PackageArg p : packageFlags dflags }
-setPackageKey :: String -> DynFlags -> DynFlags
-setPackageKey p s = s{ thisPackage = stringToPackageKey p }
-
-setLibraryName :: String -> DynFlags -> DynFlags
-setLibraryName v s = s{ thisLibraryName = LibraryName (mkFastString v) }
+setUnitId :: String -> DynFlags -> DynFlags
+setUnitId p s = s{ thisPackage = stringToUnitId p }
-- -----------------------------------------------------------------------------
-- | Find the package environment (if one exists)
@@ -3927,10 +3884,10 @@ setMainIs arg
| not (null main_fn) && isLower (head main_fn)
-- The arg looked like "Foo.Bar.baz"
= upd $ \d -> d{ mainFunIs = Just main_fn,
- mainModIs = mkModule mainPackageKey (mkModuleName main_mod) }
+ mainModIs = mkModule mainUnitId (mkModuleName main_mod) }
| isUpper (head arg) -- The arg looked like "Foo" or "Foo.Bar"
- = upd $ \d -> d{ mainModIs = mkModule mainPackageKey (mkModuleName arg) }
+ = upd $ \d -> d{ mainModIs = mkModule mainUnitId (mkModuleName arg) }
| otherwise -- The arg looked like "baz"
= upd $ \d -> d{ mainFunIs = Just arg }
@@ -4120,6 +4077,7 @@ compilerInfo dflags
("Support parallel --make", "YES"),
("Support reexported-modules", "YES"),
("Support thinning and renaming package flags", "YES"),
+ ("Requires unified installed package IDs", "YES"),
("Uses package keys", "YES"),
("Dynamic by default", if dYNAMIC_BY_DEFAULT dflags
then "YES" else "NO"),
@@ -4270,8 +4228,6 @@ unsafeGlobalDynFlags = unsafePerformIO $ readIORef v_unsafeGlobalDynFlags
setUnsafeGlobalDynFlags :: DynFlags -> IO ()
setUnsafeGlobalDynFlags = writeIORef v_unsafeGlobalDynFlags
-GLOBAL_VAR(v_unsafePkgKeyCache, emptyUFM, PackageKeyCache)
-
-- -----------------------------------------------------------------------------
-- SSE and AVX