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