Slight improvement to getLocation

This commit is contained in:
Andrzej Rybczak 2022-03-09 16:51:23 +01:00
parent 3890b0a600
commit ce7112a309

View File

@ -525,11 +525,11 @@ getLocation ix (Env fork size ref _) = do
-- specific effects for reinterpretation. -- specific effects for reinterpretation.
case fork of case fork of
NoFork -> pure $ Location i es NoFork -> pure $ Location i es
Forks _ baseIx lref forks -> do Forks _ baseIx lref forks
EnvRef _ les _ <- readIORef lref | i >= baseIx -> do
if i >= baseIx EnvRef _ les _ <- readIORef lref
then pure $ Location (i - baseIx) les pure $ Location (i - baseIx) les
else go es# i forks | otherwise -> go es# i forks
where where
go :: SmallMutableArray# RealWorld Any go :: SmallMutableArray# RealWorld Any
-> Int -> Int
@ -537,8 +537,8 @@ getLocation ix (Env fork size ref _) = do
-> IO Location -> IO Location
go es# i = \case go es# i = \case
NoFork -> pure $ Location i (SmallMutableArray es#) NoFork -> pure $ Location i (SmallMutableArray es#)
Forks _ baseIx lref forks -> do Forks _ baseIx lref forks
EnvRef _ les _ <- readIORef lref | i >= baseIx -> do
if i >= baseIx EnvRef _ les _ <- readIORef lref
then pure $ Location (i - baseIx) les pure $ Location (i - baseIx) les
else go es# i forks | otherwise -> go es# i forks