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

Commits:

5 changed files:

Changes:

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

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