summaryrefslogtreecommitdiff
path: root/VM.hs
diff options
context:
space:
mode:
Diffstat (limited to 'VM.hs')
-rw-r--r--VM.hs6
1 files changed, 4 insertions, 2 deletions
diff --git a/VM.hs b/VM.hs
index bd7cbef..554a310 100644
--- a/VM.hs
+++ b/VM.hs
@@ -81,8 +81,10 @@ vmRunInstr info@(Info _ _ datas) state (dest, instr) = case instr of
IAllocClo name clrefs ->
let cloVals = (map (findRef (sTempMap state)) clrefs)
in return (assignRef state dest (RVClosure name cloVals))
- IDiscard _ ->
- return state -- TODO: erase temporary from state for IDiscard (RTemp i)
+ IDiscard ref ->
+ case ref of
+ RTemp i -> return (state { sTempMap = IMap.delete i (sTempMap state) })
+ _ -> return state
IPush refs ->
return (state { sStack = map (findRef (sTempMap state)) refs ++ sStack state })
IPop refs ->