Cheng Shao pushed to branch wip/hiddenmodules-uniqset at Glasgow Haskell Compiler / GHC

Commits:

7 changed files:

Changes:

  • compiler/GHC/Driver/Config/Finder.hs
    ... ... @@ -9,7 +9,7 @@ import GHC.Driver.DynFlags
    9 9
     import GHC.Unit.Finder.Types
    
    10 10
     import GHC.Data.FastString
    
    11 11
     import GHC.Data.OsPath
    
    12
    -import qualified Data.Map as Map
    
    12
    +import GHC.Types.Unique.Map
    
    13 13
     
    
    14 14
     -- | Create a new 'FinderOpts' from DynFlags.
    
    15 15
     initFinderOpts :: DynFlags -> FinderOpts
    
    ... ... @@ -22,7 +22,7 @@ initFinderOpts flags = FinderOpts
    22 22
       , finder_workingDirectory = fmap unsafeEncodeUtf $ workingDirectory flags
    
    23 23
       , finder_thisPackageName  = mkFastString <$> thisPackageName flags
    
    24 24
       , finder_hiddenModules = hiddenModules flags
    
    25
    -  , finder_reexportedModules = Map.fromList [(known_as, is_as) | ReexportedModule is_as known_as <- reverse (reexportedModules flags)]
    
    25
    +  , finder_reexportedModules = listToUniqMap [(known_as, is_as) | ReexportedModule is_as known_as <- reverse (reexportedModules flags)]
    
    26 26
       , finder_hieDir = fmap unsafeEncodeUtf $ hieDir flags
    
    27 27
       , finder_hieSuf = unsafeEncodeUtf $ hieSuf flags
    
    28 28
       , finder_hiDir = fmap unsafeEncodeUtf $ hiDir flags
    

  • compiler/GHC/Driver/DynFlags.hs
    ... ... @@ -143,6 +143,7 @@ import System.Directory
    143 143
     import GHC.Foreign (withCString, peekCString)
    
    144 144
     
    
    145 145
     import qualified Data.Set as Set
    
    146
    +import GHC.Types.Unique.Set
    
    146 147
     
    
    147 148
     import qualified GHC.LanguageExtensions as LangExt
    
    148 149
     
    
    ... ... @@ -261,7 +262,7 @@ data DynFlags = DynFlags {
    261 262
       -- Note [Filepaths and Multiple Home Units]
    
    262 263
       workingDirectory      :: Maybe FilePath,
    
    263 264
       thisPackageName       :: Maybe String, -- ^ What the package is called, use with multiple home units
    
    264
    -  hiddenModules         :: Set.Set ModuleName,
    
    265
    +  hiddenModules         :: !(UniqSet ModuleName),
    
    265 266
       reexportedModules     :: [ReexportedModule],
    
    266 267
     
    
    267 268
       -- ways
    
    ... ... @@ -597,7 +598,7 @@ defaultDynFlags mySettings =
    597 598
     
    
    598 599
             workingDirectory        = Nothing,
    
    599 600
             thisPackageName         = Nothing,
    
    600
    -        hiddenModules           = Set.empty,
    
    601
    +        hiddenModules           = emptyUniqSet,
    
    601 602
             reexportedModules       = [],
    
    602 603
     
    
    603 604
             objectDir               = Nothing,
    

  • compiler/GHC/Driver/Make.hs
    ... ... @@ -109,13 +109,14 @@ import GHC.Unit.Module.ModDetails
    109 109
     
    
    110 110
     import qualified Data.Map as Map
    
    111 111
     import qualified Data.Set as Set
    
    112
    +import GHC.Types.Unique.Set
    
    112 113
     
    
    113 114
     import Control.Concurrent.MVar
    
    114 115
     import Control.Monad
    
    115 116
     import qualified Control.Monad.Catch as MC
    
    116 117
     import Data.IORef
    
    117 118
     import Data.Maybe
    
    118
    -import Data.List (sortOn, groupBy, sortBy)
    
    119
    +import Data.List (sort, sortOn, groupBy, sortBy)
    
    119 120
     import qualified Data.List as List
    
    120 121
     import System.FilePath
    
    121 122
     
    
    ... ... @@ -313,14 +314,15 @@ warnUnknownModules hsc_env dflags mod_graph = do
    313 314
       where
    
    314 315
         diag_opts = initDiagOpts dflags
    
    315 316
     
    
    316
    -    unit_mods = Set.fromList (map ms_mod_name
    
    317
    +    unit_mods :: UniqSet ModuleName
    
    318
    +    unit_mods = mkUniqSet (map ms_mod_name
    
    317 319
                       (filter (\ms -> ms_unitid ms == homeUnitId_ dflags)
    
    318 320
                            (mgModSummaries mod_graph)))
    
    319 321
     
    
    320 322
         reexported_mods = reexportedModules dflags
    
    321 323
         hidden_mods     = hiddenModules dflags
    
    322 324
     
    
    323
    -    hidden_warns = hidden_mods `Set.difference` unit_mods
    
    325
    +    hidden_warns = hidden_mods `minusUniqSet` unit_mods
    
    324 326
     
    
    325 327
         lookupModule mn = findImportedModule hsc_env mn NoPkgQual
    
    326 328
     
    
    ... ... @@ -337,7 +339,7 @@ warnUnknownModules hsc_env dflags mod_graph = do
    337 339
         final_msgs hidden_warns reexported_warns
    
    338 340
               =
    
    339 341
             unionManyMessages $
    
    340
    -          [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (Set.toList hidden_warns)) | not (Set.null hidden_warns)]
    
    342
    +          [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (sort $ nonDetEltsUniqSet hidden_warns)) | not (isEmptyUniqSet hidden_warns)]
    
    341 343
               ++ [warn (DriverUnknownReexportedModules (homeUnitId_ dflags) reexported_warns) | not (null reexported_warns)]
    
    342 344
     
    
    343 345
     -- | Describes which modules of the module graph need to be loaded.
    

  • compiler/GHC/Driver/Session.hs
    ... ... @@ -293,6 +293,7 @@ import Data.List.NonEmpty (NonEmpty (..))
    293 293
     import qualified Data.List.NonEmpty as NE
    
    294 294
     import qualified Data.Map as Map
    
    295 295
     import qualified Data.Set as Set
    
    296
    +import GHC.Types.Unique.Set
    
    296 297
     import Data.Word
    
    297 298
     import System.FilePath
    
    298 299
     import Text.ParserCombinators.ReadP hiding (char)
    
    ... ... @@ -3153,7 +3154,7 @@ setPackageName p d = d { thisPackageName = Just p }
    3153 3154
     
    
    3154 3155
     addHiddenModule :: String -> DynP ()
    
    3155 3156
     addHiddenModule p =
    
    3156
    -  upd (\s -> s{ hiddenModules  = Set.insert (mkModuleName p) (hiddenModules s) })
    
    3157
    +  upd (\s -> s{ hiddenModules  = addOneToUniqSet (hiddenModules s) (mkModuleName p) })
    
    3157 3158
     
    
    3158 3159
     addReexportedModule :: String -> DynP ()
    
    3159 3160
     addReexportedModule p =
    

  • compiler/GHC/HsToCore/Docs.hs
    ... ... @@ -175,7 +175,7 @@ mkDocStructureFromExportList mdl import_avails export_list =
    175 175
         moduleExport alias avails =
    
    176 176
             DsiModExport (nubSortNE orig_names) (sortAvails (nubAvails avails))
    
    177 177
           where
    
    178
    -        orig_names = M.findWithDefault aliasErr alias aliasMap
    
    178
    +        orig_names = fromMaybe aliasErr (lookupUniqMap aliasMap alias)
    
    179 179
             aliasErr = error $ "mkDocStructureFromExportList: "
    
    180 180
                                ++ (moduleNameString . moduleName) mdl
    
    181 181
                                ++ ": Can't find alias " ++ moduleNameString alias
    
    ... ... @@ -185,9 +185,9 @@ mkDocStructureFromExportList mdl import_avails export_list =
    185 185
                         NonEmpty.toList
    
    186 186
     
    
    187 187
         -- Map from aliases to true module names.
    
    188
    -    aliasMap :: Map ModuleName (NonEmpty ModuleName)
    
    188
    +    aliasMap :: UniqMap ModuleName (NonEmpty ModuleName)
    
    189 189
         aliasMap =
    
    190
    -        M.fromListWith (S.<>) $
    
    190
    +        listToUniqMap_C (S.<>) $
    
    191 191
               (this_mdl_name, this_mdl_name :| [])
    
    192 192
               : (flip concatMap (M.toList imported) $ \(mdl, imvs) ->
    
    193 193
                   [(imv_name imv, moduleName mdl :| []) | imv <- imvs])
    

  • compiler/GHC/Unit/Finder.hs
    ... ... @@ -65,9 +65,10 @@ import Control.Applicative ((<|>))
    65 65
     import Control.Monad
    
    66 66
     import Data.Time
    
    67 67
     import qualified Data.Map as M
    
    68
    +import GHC.Types.Unique.Map
    
    68 69
     import GHC.Driver.Env
    
    69 70
     import GHC.Driver.Config.Finder
    
    70
    -import qualified Data.Set as Set
    
    71
    +import GHC.Types.Unique.Set
    
    71 72
     import Data.List.NonEmpty ( NonEmpty (..) )
    
    72 73
     import qualified System.OsPath as OsPath
    
    73 74
     import qualified Data.List.NonEmpty as NE
    
    ... ... @@ -194,9 +195,9 @@ findImportedModuleNoHsc fc fopts ue mhome_unit mod_name mb_pkg =
    194 195
         home_pkg_import (uid, opts)
    
    195 196
           -- If the module is reexported, then look for it as if it was from the perspective
    
    196 197
           -- of that package which reexports it.
    
    197
    -      | Just real_mod_name <- mod_name `M.lookup` finder_reexportedModules opts =
    
    198
    +      | Just real_mod_name <- lookupUniqMap (finder_reexportedModules opts) mod_name =
    
    198 199
             findImportedModuleNoHsc fc opts ue (Just $ DefiniteHomeUnit uid Nothing) real_mod_name NoPkgQual
    
    199
    -      | mod_name `Set.member` finder_hiddenModules opts =
    
    200
    +      | elementOfUniqSet mod_name (finder_hiddenModules opts) =
    
    200 201
             return (mkHomeHidden uid)
    
    201 202
           | otherwise =
    
    202 203
             findHomePackageModule fc opts uid mod_name
    
    ... ... @@ -794,4 +795,3 @@ findObjectLinkable mod obj_fn obj_time =
    794 795
       pure (Linkable obj_time mod (NE.singleton (DotO obj_fn ModuleObject)))
    
    795 796
       -- We used to look for _stub.o files here, but that was a bug (#706)
    
    796 797
       -- Now GHC merges the stub.o into the main .o (#3687)
    797
    -

  • compiler/GHC/Unit/Finder/Types.hs
    ... ... @@ -12,12 +12,13 @@ import GHC.Prelude
    12 12
     import GHC.Unit
    
    13 13
     import GHC.Data.OsPath
    
    14 14
     import qualified Data.Map as M
    
    15
    +import GHC.Types.Unique.Map
    
    15 16
     import GHC.Fingerprint
    
    16 17
     import GHC.Platform.Ways
    
    17 18
     import GHC.Unit.Env
    
    18 19
     
    
    19 20
     import GHC.Data.FastString
    
    20
    -import qualified Data.Set as Set
    
    21
    +import GHC.Types.Unique.Set
    
    21 22
     
    
    22 23
     -- | The 'FinderCache' maps modules to the result of
    
    23 24
     -- searching for that module. It records the results of searching for
    
    ... ... @@ -101,8 +102,8 @@ data FinderOpts = FinderOpts
    101 102
           -- that have a similar name.
    
    102 103
       , finder_workingDirectory :: Maybe OsPath
    
    103 104
       , finder_thisPackageName  :: Maybe FastString
    
    104
    -  , finder_hiddenModules    :: Set.Set ModuleName
    
    105
    -  , finder_reexportedModules :: M.Map ModuleName ModuleName -- Reverse mapping, if you are looking for this name then look for this module.
    
    105
    +  , finder_hiddenModules    :: !(UniqSet ModuleName)
    
    106
    +  , finder_reexportedModules :: !(UniqMap ModuleName ModuleName) -- Reverse mapping, if you are looking for this name then look for this module.
    
    106 107
       , finder_hieDir :: Maybe OsPath
    
    107 108
       , finder_hieSuf :: OsString
    
    108 109
       , finder_hiDir :: Maybe OsPath