From a436e9d7c7c4115ecc397b4b103573e75aa6c8bc Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Fri, 13 Dec 2019 13:51:19 +0100 Subject: Honour some IDiscard instructions --- VM.hs | 6 ++++-- 1 file 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 -> -- cgit v1.2.3