diff options
author | Dougal <d.maclaurin@gmail.com> | 2022-02-05 18:09:59 -0500 |
---|---|---|
committer | Dougal <d.maclaurin@gmail.com> | 2022-02-05 18:09:59 -0500 |
commit | 9f63718350b0b2cb8ca48652440deba286b3d687 (patch) | |
tree | bd06add61245f4de88f6fa6178b82f1d89924487 /src/dex.hs | |
parent | a34b4dc461525b7cea82d693066bde353115eef1 (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.hs | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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 |