summaryrefslogtreecommitdiff
path: root/src/dex.hs
diff options
context:
space:
mode:
authorDougal <d.maclaurin@gmail.com>2022-02-05 18:09:59 -0500
committerDougal <d.maclaurin@gmail.com>2022-02-05 18:09:59 -0500
commit9f63718350b0b2cb8ca48652440deba286b3d687 (patch)
treebd06add61245f4de88f6fa6178b82f1d89924487 /src/dex.hs
parenta34b4dc461525b7cea82d693066bde353115eef1 (diff)
Add a persistent cache for modules.
This is still broken in all sorts of ways. Pointers are stored without copying the memory they point to. The web interface and repl are broken. But we're getting there.
Diffstat (limited to 'src/dex.hs')
-rw-r--r--src/dex.hs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/dex.hs b/src/dex.hs
index e84e9154..4fa246de 100644
--- a/src/dex.hs
+++ b/src/dex.hs
@@ -53,7 +53,8 @@ data CmdOpts = CmdOpts EvalMode EvalConfig
runMode :: EvalMode -> EvalConfig -> IO ()
runMode evalMode opts = do
- env <- execInterblockM opts initTopState $ loadPrelude
+ cachedEnv <- loadCache
+ env <- execInterblockM opts cachedEnv $ loadPrelude
case evalMode of
ReplMode prompt -> do
let filenameAndDexCompletions = completeQuotedWord (Just '\\') "\"'" listFiles dexCompletions
@@ -62,10 +63,11 @@ runMode evalMode opts = do
importPrelude
runInputT hasklineSettings $ forever $ replLoop prompt
ScriptMode fname fmt _ -> do
- results <- evalInterblockM opts env $ evalFile fname
+ (results, finalEnv) <- runInterblockM opts env $ evalFile fname
printLitProg fmt results
+ storeCache finalEnv
-- ExportMode dexPath objPath -> do
- -- results <- evalInterblockM opts env $ map snd <$> evalFile dexPath
+ -- results <- evalInterblockM opts env $ map snd <$> evalfile dexPath
-- let outputs = foldMap (\(Result outs _) -> outs) results
-- let errors = foldMap (\case (Result _ (Failure err)) -> [err]; _ -> []) results
-- putStr $ foldMap (nonEmptyNewline . pprint) errors