@@ -191,7 +191,7 @@ data ShakeExtras = ShakeExtras
191
191
lspEnv :: Maybe (LSP. LanguageContextEnv Config )
192
192
,debouncer :: Debouncer NormalizedUri
193
193
,logger :: Logger
194
- ,globals :: Var (HMap. HashMap TypeRep Dynamic )
194
+ ,globals :: IORef (HMap. HashMap TypeRep Dynamic )
195
195
,state :: Values
196
196
,diagnostics :: STMDiagnosticStore
197
197
,hiddenDiagnostics :: STMDiagnosticStore
@@ -284,15 +284,15 @@ addIdeGlobal x = do
284
284
285
285
addIdeGlobalExtras :: IsIdeGlobal a => ShakeExtras -> a -> IO ()
286
286
addIdeGlobalExtras ShakeExtras {globals} x@ (typeOf -> ty) =
287
- void $ liftIO $ modifyVarIO' globals $ \ mp -> case HMap. lookup ty mp of
288
- Just _ -> errorIO $ " Internal error, addIdeGlobalExtras, got the same type twice for " ++ show ty
289
- Nothing -> return $! HMap. insert ty (toDyn x) mp
287
+ void $ liftIO $ atomicModifyIORef'_ globals $ \ mp -> case HMap. lookup ty mp of
288
+ Just _ -> error $ " Internal error, addIdeGlobalExtras, got the same type twice for " ++ show ty
289
+ Nothing -> HMap. insert ty (toDyn x) mp
290
290
291
291
292
292
getIdeGlobalExtras :: forall a . IsIdeGlobal a => ShakeExtras -> IO a
293
293
getIdeGlobalExtras ShakeExtras {globals} = do
294
294
let typ = typeRep (Proxy :: Proxy a )
295
- x <- HMap. lookup (typeRep (Proxy :: Proxy a )) <$> readVar globals
295
+ x <- HMap. lookup (typeRep (Proxy :: Proxy a )) <$> readIORef globals
296
296
case x of
297
297
Just x
298
298
| Just x <- fromDynamic x -> pure x
@@ -501,7 +501,7 @@ shakeOpen lspEnv defaultConfig logger debouncer
501
501
us <- mkSplitUniqSupply ' r'
502
502
ideNc <- newIORef (initNameCache us knownKeyNames)
503
503
shakeExtras <- do
504
- globals <- newVar HMap. empty
504
+ globals <- newIORef HMap. empty
505
505
state <- STM. newIO
506
506
diagnostics <- STM. newIO
507
507
hiddenDiagnostics <- STM. newIO
0 commit comments