aboutsummaryrefslogtreecommitdiff
path: root/BStack.icl
diff options
context:
space:
mode:
authorCamil Staps2016-07-01 08:30:37 +0200
committerCamil Staps2016-07-01 08:30:37 +0200
commit4d7a4800346e3084c62df811bde83aa56fd7de9d (patch)
treeada02323e0c6a8f800c3f215781e4e415235d6a3 /BStack.icl
parentDescriptors, Program (diff)
Fixes
Diffstat (limited to 'BStack.icl')
-rw-r--r--BStack.icl20
1 files changed, 14 insertions, 6 deletions
diff --git a/BStack.icl b/BStack.icl
index aa96551..8ca4017 100644
--- a/BStack.icl
+++ b/BStack.icl
@@ -5,6 +5,14 @@ import StdEnv
import ABC.Def
import ABC.Misc
+instance == Basic
+where
+ (==) (Bool b) (Bool c) = b == c
+ (==) (Int m) (Int n) = m == n
+ (==) _ _ = False
+
+:: BStack :== [Basic]
+
bs_copy :: BSrc BStack -> BStack
bs_copy i s = [bs_get i s:s]
@@ -31,16 +39,16 @@ bs_popn 0 s = s
bs_popn _ [] = abortn "bs_popn: popping too many elements"
bs_popn i [_:s] = bs_popn (i-1) s
-bs_push :: Dynamic BStack -> BStack
+bs_push :: Basic BStack -> BStack
bs_push d s = [d:s]
bs_pushB :: Bool BStack -> BStack
-bs_pushB b s = [dynamic b:s]
+bs_pushB b s = [Bool b:s]
bs_pushI :: Int BStack -> BStack
-bs_pushI i s = [dynamic i:s]
+bs_pushI i s = [Int i:s]
-bs_update :: BDst Dynamic BStack -> BStack
+bs_update :: BDst Basic BStack -> BStack
bs_update 0 d [_:s] = [d:s]
bs_update _ _ [] = abortn "bs_update: index too large"
bs_update i d [e:s] = [e:bs_update (i-1) d s]
@@ -80,9 +88,9 @@ bs_ltI [Int m:Int n:s] = bs_pushB (m < n) s
bs_ltI _ = abortn "bs_ltI: no integers"
bs_mulI :: BStack -> BStack
-bs_mulI [Int m:Int n:s] = bs_pushB (m * n) s
+bs_mulI [Int m:Int n:s] = bs_pushI (m * n) s
bs_mulI _ = abortn "bs_mulI: no integers"
bs_subI :: BStack -> BStack
-bs_subI [Int m:Int n:s] = bs_pushB (m - n) s
+bs_subI [Int m:Int n:s] = bs_pushI (m - n) s
bs_subI _ = abortn "bs_subI: no integers"