cleanup
[clean-tests.git] / datatype / Compiler.hs
index 79ee6b7..152621b 100644 (file)
@@ -6,13 +6,11 @@
 module Compiler where
 
 import Language
-import Serialise
---
+
 import qualified Data.Map as DM
-import Control.Monad.Writer
-import Control.Monad.State
 import Control.Monad.ST
---import Debug.Trace
+import Control.Monad.State
+import Control.Monad.Writer
 import Data.Array
 import Data.Array.ST
 import Data.Function
@@ -191,20 +189,20 @@ interpret memsize prog = runSTArray resultStack ! (memsize-1)
             Mul -> bop (*) memory reg >>= int program memory
             Div -> bop div memory reg >>= int program memory
             Neg -> uop negate memory reg >>= int program memory
-            And -> bop ((b2i .) . on (&&) i2b) memory reg >>= int program memory
-            Or  -> bop ((b2i .) . on (||) i2b) memory reg >>= int program memory
-            Not -> uop (b2i . Prelude.not . i2b) memory reg >>= int program memory
-            Eq  -> bop ((b2i .) . (==)) memory reg >>= int program memory
-            Neq -> bop ((b2i .) . (/=)) memory reg >>= int program memory
-            Le  -> bop ((b2i .) . (<)) memory reg >>= int program memory
-            Ge  -> bop ((b2i .) . (>)) memory reg >>= int program memory
-            Leq -> bop ((b2i .) . (<=)) memory reg >>= int program memory
-            Geq -> bop ((b2i .) . (>=)) memory reg >>= int program memory
+            And -> bop ((fromEnum .) . on (&&) toEnum) memory reg >>= int program memory
+            Or  -> bop ((fromEnum .) . on (||) toEnum) memory reg >>= int program memory
+            Not -> uop (fromEnum . Prelude.not . toEnum) memory reg >>= int program memory
+            Eq  -> bop ((fromEnum .) . (==)) memory reg >>= int program memory
+            Neq -> bop ((fromEnum .) . (/=)) memory reg >>= int program memory
+            Le  -> bop ((fromEnum .) . (<)) memory reg >>= int program memory
+            Ge  -> bop ((fromEnum .) . (>)) memory reg >>= int program memory
+            Leq -> bop ((fromEnum .) . (<=)) memory reg >>= int program memory
+            Geq -> bop ((fromEnum .) . (>=)) memory reg >>= int program memory
             Lbl _ -> int program memory reg
             Bra l -> branch l program reg >>= int program memory
             Brf l -> do
                 (reg', v) <- pop memory reg
-                reg'' <- if i2b v then pure reg' else branch l program reg'
+                reg'' <- if toEnum v then pure reg' else branch l program reg'
                 int program memory reg''
             Sth n ->
                     popn memory n reg
@@ -233,11 +231,3 @@ interpret memsize prog = runSTArray resultStack ! (memsize-1)
         _ -> readArray program (pc reg) >>= \case
             Lbl l | label == l -> pure $ reg
             _ -> branch label program $ reg { pc = pc reg - 1 }
-
-b2i :: Bool -> Int
-b2i True = 1
-b2i False = 0
-
-i2b :: Int -> Bool
-i2b 0 = False
-i2b _ = True