Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
GHC
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Alex D
GHC
Commits
2df88d37
Commit
2df88d37
authored
Sep 15, 2008
by
Thomas Schilling
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Generalise type of 'withExtendedLinkEnv'.
parent
ae6bd0bc
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
8 additions
and
7 deletions
+8
-7
compiler/ghci/Linker.lhs
compiler/ghci/Linker.lhs
+8
-7
No files found.
compiler/ghci/Linker.lhs
View file @
2df88d37
...
...
@@ -289,16 +289,17 @@ linkDependencies hsc_env span needed_mods = do
-- | Temporarily extend the linker state.
withExtendedLinkEnv :: [(Name,HValue)] -> IO a -> IO a
withExtendedLinkEnv :: (MonadIO m, ExceptionMonad m) =>
[(Name,HValue)] -> m a -> m a
withExtendedLinkEnv new_env action
=
bracket_
set_new_env
reset_old_env
action
=
gbracket
set_new_env
(\_ -> reset_old_env)
(\_ -> action)
where set_new_env = do
pls <- readIORef v_PersistentLinkerState
pls <-
liftIO $
readIORef v_PersistentLinkerState
let new_closure_env = extendClosureEnv (closure_env pls) new_env
new_pls = pls { closure_env = new_closure_env }
writeIORef v_PersistentLinkerState new_pls
liftIO $
writeIORef v_PersistentLinkerState new_pls
return ()
-- Remember that the linker state might be side-effected
...
...
@@ -306,7 +307,7 @@ withExtendedLinkEnv new_env action
-- lose those changes (we might have linked a new module or
-- package), so the reset action only removes the names we
-- added earlier.
reset_old_env = do
reset_old_env =
liftIO $
do
modifyIORef v_PersistentLinkerState $ \pls ->
let cur = closure_env pls
new = delListFromNameEnv cur (map fst new_env)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment