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
driver: use UniqSet for hiddenModules in DynFlags/FinderOpts
This patch replaces Set ModuleName with UniqSet ModuleName in
DynFlags.hiddenModules and FinderOpts.finder_hiddenModules for
improved efficiency.
Co-authored-by: Codex
- - - - -
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:
=====================================
compiler/GHC/Driver/DynFlags.hs
=====================================
@@ -143,6 +143,7 @@ import System.Directory
import GHC.Foreign (withCString, peekCString)
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import qualified GHC.LanguageExtensions as LangExt
@@ -261,7 +262,7 @@ data DynFlags = DynFlags {
-- Note [Filepaths and Multiple Home Units]
workingDirectory :: Maybe FilePath,
thisPackageName :: Maybe String, -- ^ What the package is called, use with multiple home units
- hiddenModules :: Set.Set ModuleName,
+ hiddenModules :: !(UniqSet ModuleName),
reexportedModules :: [ReexportedModule],
-- ways
@@ -597,7 +598,7 @@ defaultDynFlags mySettings =
workingDirectory = Nothing,
thisPackageName = Nothing,
- hiddenModules = Set.empty,
+ hiddenModules = emptyUniqSet,
reexportedModules = [],
objectDir = Nothing,
=====================================
compiler/GHC/Driver/Make.hs
=====================================
@@ -109,13 +109,14 @@ import GHC.Unit.Module.ModDetails
import qualified Data.Map as Map
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Control.Concurrent.MVar
import Control.Monad
import qualified Control.Monad.Catch as MC
import Data.IORef
import Data.Maybe
-import Data.List (sortOn, groupBy, sortBy)
+import Data.List (sort, sortOn, groupBy, sortBy)
import qualified Data.List as List
import System.FilePath
@@ -313,14 +314,15 @@ warnUnknownModules hsc_env dflags mod_graph = do
where
diag_opts = initDiagOpts dflags
- unit_mods = Set.fromList (map ms_mod_name
+ unit_mods :: UniqSet ModuleName
+ unit_mods = mkUniqSet (map ms_mod_name
(filter (\ms -> ms_unitid ms == homeUnitId_ dflags)
(mgModSummaries mod_graph)))
reexported_mods = reexportedModules dflags
hidden_mods = hiddenModules dflags
- hidden_warns = hidden_mods `Set.difference` unit_mods
+ hidden_warns = hidden_mods `minusUniqSet` unit_mods
lookupModule mn = findImportedModule hsc_env mn NoPkgQual
@@ -337,7 +339,7 @@ warnUnknownModules hsc_env dflags mod_graph = do
final_msgs hidden_warns reexported_warns
=
unionManyMessages $
- [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (Set.toList hidden_warns)) | not (Set.null hidden_warns)]
+ [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (sort $ nonDetEltsUniqSet hidden_warns)) | not (isEmptyUniqSet hidden_warns)]
++ [warn (DriverUnknownReexportedModules (homeUnitId_ dflags) reexported_warns) | not (null reexported_warns)]
-- | 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 (..))
import qualified Data.List.NonEmpty as NE
import qualified Data.Map as Map
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Data.Word
import System.FilePath
import Text.ParserCombinators.ReadP hiding (char)
@@ -3153,7 +3154,7 @@ setPackageName p d = d { thisPackageName = Just p }
addHiddenModule :: String -> DynP ()
addHiddenModule p =
- upd (\s -> s{ hiddenModules = Set.insert (mkModuleName p) (hiddenModules s) })
+ upd (\s -> s{ hiddenModules = addOneToUniqSet (hiddenModules s) (mkModuleName p) })
addReexportedModule :: String -> DynP ()
addReexportedModule p =
=====================================
compiler/GHC/Unit/Finder.hs
=====================================
@@ -67,7 +67,7 @@ import Data.Time
import qualified Data.Map as M
import GHC.Driver.Env
import GHC.Driver.Config.Finder
-import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Data.List.NonEmpty ( NonEmpty (..) )
import qualified System.OsPath as OsPath
import qualified Data.List.NonEmpty as NE
@@ -196,7 +196,7 @@ findImportedModuleNoHsc fc fopts ue mhome_unit mod_name mb_pkg =
-- of that package which reexports it.
| Just real_mod_name <- mod_name `M.lookup` finder_reexportedModules opts =
findImportedModuleNoHsc fc opts ue (Just $ DefiniteHomeUnit uid Nothing) real_mod_name NoPkgQual
- | mod_name `Set.member` finder_hiddenModules opts =
+ | elementOfUniqSet mod_name (finder_hiddenModules opts) =
return (mkHomeHidden uid)
| otherwise =
findHomePackageModule fc opts uid mod_name
@@ -794,4 +794,3 @@ findObjectLinkable mod obj_fn obj_time =
pure (Linkable obj_time mod (NE.singleton (DotO obj_fn ModuleObject)))
-- We used to look for _stub.o files here, but that was a bug (#706)
-- Now GHC merges the stub.o into the main .o (#3687)
-
=====================================
compiler/GHC/Unit/Finder/Types.hs
=====================================
@@ -17,7 +17,7 @@ import GHC.Platform.Ways
import GHC.Unit.Env
import GHC.Data.FastString
-import qualified Data.Set as Set
+import GHC.Types.Unique.Set
-- | The 'FinderCache' maps modules to the result of
-- searching for that module. It records the results of searching for
@@ -101,7 +101,7 @@ data FinderOpts = FinderOpts
-- that have a similar name.
, finder_workingDirectory :: Maybe OsPath
, finder_thisPackageName :: Maybe FastString
- , finder_hiddenModules :: Set.Set ModuleName
+ , finder_hiddenModules :: UniqSet ModuleName
, finder_reexportedModules :: M.Map ModuleName ModuleName -- Reverse mapping, if you are looking for this name then look for this module.
, finder_hieDir :: Maybe OsPath
, finder_hieSuf :: OsString
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b09b64e884f6f3943d803b0e21540fa8...
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/b09b64e884f6f3943d803b0e21540fa8...
You're receiving this email because of your account on gitlab.haskell.org.