Skip to content
This repository was archived by the owner on Oct 7, 2020. It is now read-only.

Commit 9621ccf

Browse files
committed
Cache HscEnv rather than DynFlags
1 parent 256bbd2 commit 9621ccf

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

hie-plugin-api/Haskell/Ide/Engine/GhcModuleCache.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import qualified Data.ByteString.Char8 as B
1616
import qualified Data.ByteString as BS
1717
import Crypto.Hash.SHA1
1818

19-
import GHC (TypecheckedModule, ParsedModule, DynFlags)
19+
import GHC (TypecheckedModule, ParsedModule, DynFlags, HscEnv)
2020

2121
import Data.List
2222

@@ -108,7 +108,7 @@ lookupCradle fp gmc = traceShow ("lookupCradle", fp, gmc) $
108108
Just (k, c, suf) -> traceShow ("matchjust",k, suf) $ LoadCradle c
109109
Nothing -> NewCradle fp
110110

111-
data CachedCradle = CachedCradle BIOS.Cradle DynFlags
111+
data CachedCradle = CachedCradle BIOS.Cradle HscEnv
112112

113113
instance Show CachedCradle where
114114
show (CachedCradle x _) = show x

hie-plugin-api/Haskell/Ide/Engine/ModuleCache.hs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ import qualified GhcMod.Types as GM
4646
import qualified GhcMod.Utils as GM
4747
import qualified GHC as GHC
4848
import qualified DynFlags as GHC
49+
import qualified HscMain as GHC
50+
import qualified HscTypes as GHC
4951
import qualified Data.Trie.Convenience as T
5052
import qualified Data.Trie as T
5153
import qualified HIE.Bios as BIOS
@@ -101,19 +103,16 @@ loadCradle iniDynFlags (NewCradle fp) = do
101103
-- Now load the new cradle
102104
crdl <- liftIO $ BIOS.findCradle fp
103105
traceShowM crdl
104-
GHC.setSessionDynFlags iniDynFlags
106+
liftIO (GHC.newHscEnv iniDynFlags) >>= GHC.setSession
105107
liftIO $ setCurrentDirectory (BIOS.cradleRootDir crdl)
106108
BIOS.initializeFlagsWithCradle fp crdl
107109
GHC.getSessionDynFlags >>= setCurrentCradle crdl
108-
loadCradle iniDynFlags (LoadCradle (CachedCradle crd dflags)) = do
110+
loadCradle iniDynFlags (LoadCradle (CachedCradle crd env)) = do
109111
traceShowM ("Reload Cradle" , crd)
110112
-- Cache the existing cradle
111113
maybe (return ()) cacheCradle =<< (currentCradle <$> getModuleCache)
112-
113-
GHC.setSessionDynFlags iniDynFlags
114-
GHC.setSessionDynFlags dflags
115-
116-
setCurrentCradle crd dflags
114+
GHC.setSession env
115+
setCurrentCradle crd (GHC.hsc_dflags env)
117116

118117

119118

@@ -127,8 +126,8 @@ setCurrentCradle crdl df = do
127126

128127
cacheCradle :: (HasGhcModuleCache m, GHC.GhcMonad m) => ([FilePath], BIOS.Cradle) -> m ()
129128
cacheCradle (ds, c) = do
130-
dflags <- GHC.getSessionDynFlags
131-
let cc = CachedCradle c dflags
129+
env <- GHC.getSession
130+
let cc = CachedCradle c env
132131
new_map = T.fromList (map (, cc) (map B.pack ds))
133132
modifyCache (\s -> s { cradleCache = T.unionWith (\a _ -> a) new_map (cradleCache s) })
134133

0 commit comments

Comments
 (0)