summaryrefslogtreecommitdiff
path: root/VM.hs
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2019-11-26 13:46:29 +0100
committertomsmeding <tom.smeding@gmail.com>2019-11-26 13:46:29 +0100
commit5f86130930c19277fbf0ef3433cc43ab93aacf3f (patch)
tree22c11dc678a6262c44a34630076824f941193043 /VM.hs
parent9de16e245424e62318cdce4909e33c256f585cb6 (diff)
declare defines for top-level mutual recursion
Diffstat (limited to 'VM.hs')
-rw-r--r--VM.hs5
1 files changed, 3 insertions, 2 deletions
diff --git a/VM.hs b/VM.hs
index 5f7a818..bed0596 100644
--- a/VM.hs
+++ b/VM.hs
@@ -3,7 +3,6 @@ module VM(vmRun) where
import Control.Monad
import Data.Char
import Data.List
-import Data.Maybe
import qualified Data.Map.Strict as Map
import Data.Map.Strict ((!))
import System.IO
@@ -88,7 +87,9 @@ vmRunTerm info@(Info bbmap _ _) state@(State { sTempMap = tmap }) term = case te
findRef :: TempMap -> Ref -> RunValue
findRef _ (RConst n) = RVNum n
-findRef tmap (RTemp i) = fromJust (Map.lookup i tmap)
+findRef tmap (RTemp i) = case Map.lookup i tmap of
+ Nothing -> error "Use of declared but uninitialised variable"
+ Just v -> v
findRef _ (RSClo name) = RVClosure name []
findRef _ RNone = error "VM: None ref used"