Skip to content

Commit 960fdbc

Browse files
committed
wip
1 parent 76d19ed commit 960fdbc

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

src/AllInOne.hs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,16 +156,31 @@ allocate expr =
156156
(pointer, Node pointerL pointerR) : (allocL ++ allocR ++ memMap)
157157
alloc (Lam _ _) pointer memMap = error "lambdas should already be abstracted"
158158

159-
spine :: Graph -> [(Pointer, Graph)] -> [Graph]-> (Graph, [Graph])
160-
spine c@(Comb _) mm stack = (c, stack)
161-
spine n@(Num _) mm stack = (n, stack)
162-
spine g@(Node l r) mm stack = spine (getNode l mm) mm (g:stack)
159+
spine' :: Graph -> [(Pointer, Graph)] -> [Graph]-> (Graph, [Graph])
160+
spine' c@(Comb _) mm stack = (c, stack)
161+
spine' n@(Num _) mm stack = (n, stack)
162+
spine' g@(Node l r) mm stack = spine' (getNode l mm) mm (g:stack)
163163
where
164164
getNode :: Pointer -> [(Pointer, Graph)] -> Graph
165165
getNode p mm = case lookup p mm of
166166
Nothing -> error $ "deref " ++ show p ++ " in " ++ show mm
167167
Just g -> g
168168

169+
spine :: IORef Graf -> [IORef Graph]-> (IORef Graph, [IORef Graph])
170+
spine ioRefGraph stack = case ioRefGraph of
171+
IORef (Com c) -> (ioRefGraph, stack)
172+
IORef (Numb i) -> (ioRefGraph, stack)
173+
IORef (Node l r) -> spine l (ioRefGraph:stack)
174+
175+
-- spine c@(Comb _) mm stack = (c, stack)
176+
-- spine n@(Num _) mm stack = (n, stack)
177+
-- spine g@(Node l r) mm stack = spine (getNode l mm) mm (g:stack)
178+
-- where
179+
-- getNode :: Pointer -> [(Pointer, Graph)] -> Graph
180+
-- getNode p mm = case lookup p mm of
181+
-- Nothing -> error $ "deref " ++ show p ++ " in " ++ show mm
182+
-- Just g -> g
183+
169184
--- allocation with IORefs
170185
data Graf =
171186
Nod (IO (IORef Graf)) (IO (IORef Graf))
@@ -269,6 +284,13 @@ main = do
269284
putStrLn $ "compiled to SKI: " ++ showSK sk
270285
putStrLn $ "as graph: " ++ show sk
271286
putStrLn $ "reduce: " ++ show (reduce sk)
287+
let sk = getSK (toSK "main = c i 2 (+ 1)")
288+
print sk
289+
let g = alloc sk
290+
deallocG <- dealloc g
291+
print deallocG
292+
293+
272294
-- putStrLn $ "encoded: " ++ show (I.fromAscList $ zip [0..] $ encodeTree sk)
273295
-- putStrLn $ "run it: " ++ show (run (I.fromAscList $ zip [0..] $ encodeTree sk) [4])
274296

0 commit comments

Comments
 (0)