1
1
mirror of https://github.com/github/semantic.git synced 2024-12-14 17:31:48 +03:00

Pass prelude scope graph and heap to evalModule

Co-Authored-By: Rick Winfrey <rick.winfrey@gmail.com>
This commit is contained in:
joshvera 2018-11-26 19:55:29 -05:00
parent 87d2b68e4d
commit 5084eece82

View File

@ -78,14 +78,14 @@ evaluate :: ( AbstractValue term address value (ValueC term address value inner)
-> Evaluator term address value outer (ModuleTable (NonEmpty (Module (ModuleResult address value))))
evaluate lang perModule runTerm modules = do
let prelude = Module moduleInfoFromCallStack (Left lang)
(preludeScopeGraph, _) <- evalModule lowerBound prelude
foldr (run preludeScopeGraph . fmap Right) ask modules
where run prelude m rest = do
evaluated <- evalModule prelude m
(preludeScopeGraph, (heap, _)) <- evalModule lowerBound lowerBound prelude
foldr (run preludeScopeGraph heap . fmap Right) ask modules
where run preludeScopeGraph preludeHeap m rest = do
evaluated <- evalModule preludeScopeGraph preludeHeap m
-- FIXME: this should be some sort of Monoidal insert à la the Heap to accommodate multiple Go files being part of the same module.
local (ModuleTable.insert (modulePath (moduleInfo m)) ((evaluated <$ m) :| [])) rest
evalModule prelude m = runInModule (perModule (runValueEffects . moduleBody) m)
evalModule scopeGraph heap m = runInModule (perModule (runValueEffects . moduleBody) m)
where runInModule
= raiseHandler (runReader (moduleInfo m))
. runAllocator