|
1 | | -{-# Language ScopedTypeVariables #-} |
| 1 | +{-# Language ScopedTypeVariables, CPP #-} |
2 | 2 |
|
3 | 3 | module FindSymbol |
4 | 4 | ( findSymbol |
5 | 5 | ) where |
6 | 6 |
|
| 7 | +#if __GLASGOW_HASKELL__ < 710 |
7 | 8 | import Control.Applicative ((<$>)) |
| 9 | +import qualified UniqFM |
| 10 | +#else |
| 11 | +import GHC.PackageDb (exposedName) |
| 12 | +import GhcMonad (liftIO) |
| 13 | +#endif |
| 14 | + |
8 | 15 | import Control.Monad (filterM) |
9 | 16 | import Control.Exception |
10 | 17 | import Data.List (find, nub) |
11 | 18 | import Data.Maybe (catMaybes, isJust) |
12 | | -import qualified GHC |
13 | | -import qualified UniqFM |
| 19 | +import qualified GHC |
14 | 20 | import qualified Packages as PKG |
15 | 21 | import qualified Name |
16 | 22 | import Exception (ghandle) |
@@ -57,11 +63,25 @@ findSymbolInPackages symbol = |
57 | 63 | where |
58 | 64 | allExposedModules :: GHC.Ghc [GHC.Module] |
59 | 65 | allExposedModules = do |
60 | | - modNames <- exposedModuleNames <$> GHC.getSessionDynFlags |
| 66 | + modNames <- exposedModuleNames |
61 | 67 | catMaybes <$> mapM findModule modNames |
62 | 68 | where |
63 | | - exposedModuleNames = concatMap (\pkg -> if PKG.exposed pkg then PKG.exposedModules pkg else []) |
64 | | - . UniqFM.eltsUFM . PKG.pkgIdMap . GHC.pkgState |
| 69 | + exposedModuleNames :: GHC.Ghc [GHC.ModuleName] |
| 70 | +#if __GLASGOW_HASKELL__ < 710 |
| 71 | + exposedModuleNames = |
| 72 | + concatMap exposedModules |
| 73 | + . UniqFM.eltsUFM |
| 74 | + . PKG.pkgIdMap |
| 75 | + . GHC.pkgState |
| 76 | + <$> GHC.getSessionDynFlags |
| 77 | +#else |
| 78 | + exposedModuleNames = do |
| 79 | + dynFlags <- GHC.getSessionDynFlags |
| 80 | + pkgConfigs <- liftIO $ PKG.readPackageConfigs dynFlags |
| 81 | + return $ map exposedName (concatMap exposedModules pkgConfigs) |
| 82 | +#endif |
| 83 | + |
| 84 | + exposedModules pkg = if PKG.exposed pkg then PKG.exposedModules pkg else [] |
65 | 85 |
|
66 | 86 | findModule :: GHC.ModuleName -> GHC.Ghc (Maybe GHC.Module) |
67 | 87 | findModule moduleName = |
|
0 commit comments