Cheng Shao pushed to branch wip/hiddenmodules-uniqset at Glasgow Haskell Compiler / GHC
Commits:
-
b09b64e8
by Cheng Shao at 2025-08-16T16:38:29+02:00
5 changed files:
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Make.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/Unit/Finder.hs
- compiler/GHC/Unit/Finder/Types.hs
Changes:
| ... | ... | @@ -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,
|
| ... | ... | @@ -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.
|
| ... | ... | @@ -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 =
|
| ... | ... | @@ -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 | - |
| ... | ... | @@ -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
|