on master help sign in
Rename EnvRefCache to EnvRefStore
0366320Andrzej Rybczak
effectful-core/src/Effectful/Internal/Env.hs+20−20
@@ -173,8 +173,8 @@ cloneEnv (Env NoFork gref0 gen0) = do
173 fs <- cloneSmallMutableArray fs0 0 (sizeofSmallMutableArray fs0)
173 fs <- cloneSmallMutableArray fs0 0 (sizeofSmallMutableArray fs0)
174 gen <- cloneForkIdGen gen0
174 gen <- cloneForkIdGen gen0
175 gref <- newIORef $ EnvRef n es fs
175 gref <- newIORef $ EnvRef n es fs
176− cache <- newIORef IM.empty
176+ store <- newIORef IM.empty
177− relinkData gref gen cache es fs n
177+ relinkData gref gen store es fs n
178 pure $ Env NoFork gref gen
178 pure $ Env NoFork gref gen
179cloneEnv (Env forks@(Forks _ baseIx lref0 _) gref0 gen0) = do
179cloneEnv (Env forks@(Forks _ baseIx lref0 _) gref0 gen0) = do
180 EnvRef _ es0 fs0 <- readIORef gref0
180 EnvRef _ es0 fs0 <- readIORef gref0
@@ -187,8 +187,8 @@ cloneEnv (Env forks@(Forks _ baseIx lref0 _) gref0 gen0) = do
187 copySmallMutableArray fs 0 fs0 0 baseN
187 copySmallMutableArray fs 0 fs0 0 baseN
188 gen <- cloneForkIdGen gen0
188 gen <- cloneForkIdGen gen0
189 gref <- newIORef $ EnvRef len es fs
189 gref <- newIORef $ EnvRef len es fs
190− cache <- newIORef IM.empty
190+ store <- newIORef IM.empty
191− relinkData gref gen cache es fs n
191+ relinkData gref gen store es fs n
192 -- The forked environment is flattened and becomes the global one.
192 -- The forked environment is flattened and becomes the global one.
193 pure $ Env NoFork gref gen
193 pure $ Env NoFork gref gen
194{-# NOINLINE cloneEnv #-}
194{-# NOINLINE cloneEnv #-}
@@ -238,18 +238,18 @@ copyForks es fs len = \case
238 copySmallMutableArray fs baseIx fs0 0 n
238 copySmallMutableArray fs baseIx fs0 0 n
239 copyForks es fs baseIx forks
239 copyForks es fs baseIx forks
240
240
241−type EnvRefCache = IORef (IM.IntMap (IORef EnvRef))
241+type EnvRefStore = IORef (IM.IntMap (IORef EnvRef))
242
242
243-- | Relink local environments hiding in the handlers.
243-- | Relink local environments hiding in the handlers.
244relinkData
244relinkData
245 :: IORef EnvRef
245 :: IORef EnvRef
246 -> ForkIdGen
246 -> ForkIdGen
247− -> EnvRefCache
247+ -> EnvRefStore
248 -> SmallMutableArray RealWorld Any
248 -> SmallMutableArray RealWorld Any
249 -> SmallMutableArray RealWorld Any
249 -> SmallMutableArray RealWorld Any
250 -> Int
250 -> Int
251 -> IO ()
251 -> IO ()
252−relinkData gref gen cache es fs = \case
252+relinkData gref gen store es fs = \case
253 0 -> pure ()
253 0 -> pure ()
254 n -> do
254 n -> do
255 let i = n - 1
255 let i = n - 1
@@ -257,41 +257,41 @@ relinkData gref gen cache es fs = \case
257 readSmallArray es i
257 readSmallArray es i
258 >>= f relinkEnv . fromAny
258 >>= f relinkEnv . fromAny
259 >>= writeSmallArray es i . toAny
259 >>= writeSmallArray es i . toAny
260− relinkData gref gen cache es fs i
260+ relinkData gref gen store es fs i
261 where
261 where
262 relinkEnv :: Env es -> IO (Env es)
262 relinkEnv :: Env es -> IO (Env es)
263− relinkEnv (Env forks _ _) = Env <$> relinkForks gref gen cache forks
263+ relinkEnv (Env forks _ _) = Env <$> relinkForks gref gen store forks
264 <*> pure gref
264 <*> pure gref
265 <*> pure gen
265 <*> pure gen
266
266
267−relinkForks :: IORef EnvRef -> ForkIdGen -> EnvRefCache -> Forks -> IO Forks
267+relinkForks :: IORef EnvRef -> ForkIdGen -> EnvRefStore -> Forks -> IO Forks
268−relinkForks gref gen cache = \case
268+relinkForks gref gen store = \case
269 NoFork -> pure NoFork
269 NoFork -> pure NoFork
270 Forks fid baseIx lref0 forks -> do
270 Forks fid baseIx lref0 forks -> do
271 -- A specific IORef EnvRef can be held by more than one local environment
271 -- A specific IORef EnvRef can be held by more than one local environment
272 -- and we need to replace all its occurences with the same, new value
272 -- and we need to replace all its occurences with the same, new value
273 -- containing its clone.
273 -- containing its clone.
274− readIORef cache >>= pure . IM.lookup (unForkId fid) >>= \case
274+ readIORef store >>= pure . IM.lookup (unForkId fid) >>= \case
275 Just lref -> Forks fid baseIx <$> pure lref
275 Just lref -> Forks fid baseIx <$> pure lref
276− <*> relinkForks gref gen cache forks
276+ <*> relinkForks gref gen store forks
277− Nothing -> Forks fid baseIx <$> cloneEnvRef gref gen cache fid lref0
277+ Nothing -> Forks fid baseIx <$> cloneEnvRef gref gen store fid lref0
278− <*> relinkForks gref gen cache forks
278+ <*> relinkForks gref gen store forks
279
279
280−-- | Clone the local 'EnvRef' and put it in a cache.
280+-- | Clone the local 'EnvRef' and put it in a store.
281cloneEnvRef
281cloneEnvRef
282 :: IORef EnvRef
282 :: IORef EnvRef
283 -> ForkIdGen
283 -> ForkIdGen
284− -> EnvRefCache
284+ -> EnvRefStore
285 -> ForkId
285 -> ForkId
286 -> IORef EnvRef
286 -> IORef EnvRef
287 -> IO (IORef EnvRef)
287 -> IO (IORef EnvRef)
288−cloneEnvRef gref gen cache fid lref0 = do
288+cloneEnvRef gref gen store fid lref0 = do
289 EnvRef n es0 fs0 <- readIORef lref0
289 EnvRef n es0 fs0 <- readIORef lref0
290 es <- cloneSmallMutableArray es0 0 (sizeofSmallMutableArray es0)
290 es <- cloneSmallMutableArray es0 0 (sizeofSmallMutableArray es0)
291 fs <- cloneSmallMutableArray fs0 0 (sizeofSmallMutableArray fs0)
291 fs <- cloneSmallMutableArray fs0 0 (sizeofSmallMutableArray fs0)
292 ref <- newIORef $ EnvRef n es fs
292 ref <- newIORef $ EnvRef n es fs
293− modifyIORef' cache $ IM.insert (unForkId fid) ref
293+ modifyIORef' store $ IM.insert (unForkId fid) ref
294− relinkData gref gen cache es fs n
294+ relinkData gref gen store es fs n
295 pure ref
295 pure ref
296
296
297----------------------------------------
297----------------------------------------