Commit e296ab05 authored by ei@vuokko.info's avatar ei@vuokko.info
Browse files

Add dynCompileExpr

parent b43bef57
......@@ -78,7 +78,7 @@ module GHC (
RunResult(..),
runStmt,
showModule,
compileExpr, HValue,
compileExpr, HValue, dynCompileExpr,
lookupName,
#endif
......@@ -175,6 +175,7 @@ module GHC (
#ifdef GHCI
import qualified Linker
import Data.Dynamic ( Dynamic )
import Linker ( HValue, extendLinkEnv )
import TcRnDriver ( tcRnLookupRdrName, tcRnGetInfo,
tcRnLookupName, getModuleExports )
......@@ -230,7 +231,7 @@ import SysTools ( initSysTools, cleanTempFiles, cleanTempFilesExcept,
cleanTempDirs )
import Module
import UniqFM
import PackageConfig ( PackageId )
import PackageConfig ( PackageId, stringToPackageId )
import FiniteMap
import Panic
import Digraph
......@@ -2020,6 +2021,27 @@ compileExpr s expr = withSession s $ \hsc_env -> do
([n],[hv]) -> return (Just hv)
_ -> panic "compileExpr"
-- -----------------------------------------------------------------------------
-- Compile an expression into a dynamic
dynCompileExpr :: Session -> String -> IO (Maybe Dynamic)
dynCompileExpr ses expr = do
(full,exports) <- getContext ses
setContext ses full $
(mkModule
(stringToPackageId "base") (mkModuleName "Data.Dynamic")
):exports
let stmt = "let __dynCompileExpr = Data.Dynamic.toDyn (" ++ expr ++ ")"
res <- withSession ses (flip hscStmt stmt)
setContext ses full exports
case res of
Nothing -> return Nothing
Just (_, names, hvals) -> do
vals <- (unsafeCoerce# hvals :: IO [Dynamic])
case (names,vals) of
(_:[], v:[]) -> return (Just v)
_ -> panic "dynCompileExpr"
-- -----------------------------------------------------------------------------
-- running a statement interactively
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment