mirror of
https://github.com/github/semantic.git
synced 2024-12-11 08:45:48 +03:00
Add lookupFrameAddress to Heap
Co-Authored-By: Rick Winfrey <rick.winfrey@gmail.com>
This commit is contained in:
parent
f51d3a90a8
commit
a49b7f5440
@ -72,6 +72,20 @@ lookup address (EPath label scope path) declaration heap = do
|
|||||||
nextAddress <- Map.lookup scope scopeMap
|
nextAddress <- Map.lookup scope scopeMap
|
||||||
lookup nextAddress path declaration heap
|
lookup nextAddress path declaration heap
|
||||||
|
|
||||||
|
lookupFrameAddress :: (Ord address, Ord scope) => Path scope -> Heap scope address value -> Maybe address
|
||||||
|
lookupFrameAddress path h@Heap{..} = do
|
||||||
|
frameAddress <- currentFrame
|
||||||
|
go path frameAddress
|
||||||
|
where
|
||||||
|
go path address = case path of
|
||||||
|
DPath decl position -> pure address
|
||||||
|
EPath edge nextScopeAddress path' -> do
|
||||||
|
linkMap <- frameLinks address h
|
||||||
|
frameAddress <- do
|
||||||
|
scopeMap <- Map.lookup edge linkMap
|
||||||
|
Map.lookup nextScopeAddress scopeMap
|
||||||
|
go path' frameAddress
|
||||||
|
|
||||||
newFrame :: (Ord address) => scope -> address -> Map EdgeLabel (Map scope address) -> Heap scope address value -> Heap scope address value
|
newFrame :: (Ord address) => scope -> address -> Map EdgeLabel (Map scope address) -> Heap scope address value -> Heap scope address value
|
||||||
newFrame scope address links = insertFrame address (Frame scope links mempty)
|
newFrame scope address links = insertFrame address (Frame scope links mempty)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user