\begin{code}
{-# OPTIONS -optc-DNON_POSIX_SOURCE -#include "Linker.h" #-}
-module Linker ( HValue, showLinkerState,
+module Linker ( HValue, getHValue, showLinkerState,
linkExpr, unload, extendLinkEnv, withExtendedLinkEnv,
extendLoadedPkgs,
- linkPackages,initDynLinker
- ,recoverDataCon
+ linkPackages,initDynLinker,
+ recoverDataCon
) where
#include "HsVersions.h"
import ByteCodeItbls
import ByteCodeAsm
import RtClosureInspect
-import Var
import IfaceEnv
import Config
import OccName
import Data.IORef
import Data.List
import Foreign.Ptr
-import GHC.Exts
import System.IO
import System.Directory
helper [] = Nothing
helper x = Just . second (drop 1) . break (==delim) $ x
in unfoldr helper
-
-removeLeadingUnderscore = if cLeadingUnderscore=="YES"
+ removeLeadingUnderscore = if cLeadingUnderscore=="YES"
then tail
else id
-
+getHValue :: Name -> IO (Maybe HValue)
+getHValue name = do
+ pls <- readIORef v_PersistentLinkerState
+ case lookupNameEnv (closure_env pls) name of
+ Just (_,x) -> return$ Just x
+ _ -> return Nothing
withExtendedLinkEnv :: [(Name,HValue)] -> IO a -> IO a
withExtendedLinkEnv new_env action
let de_additions = [(address, name) | (address, name) <- zip addresses names
, not(address `elemAddressEnv` de_in)
]
- de_out = extendAddressEnvList' de_in de_additions
+ de_out = extendAddressEnvList de_in de_additions
return ( ce_out, de_out, hvals)
where
goForRefs = getRefs []