aboutsummaryrefslogtreecommitdiff
path: root/ABC/Machine
diff options
context:
space:
mode:
Diffstat (limited to 'ABC/Machine')
-rw-r--r--ABC/Machine/BStack.dcl1
-rw-r--r--ABC/Machine/BStack.icl12
-rw-r--r--ABC/Machine/Instructions.dcl1
-rw-r--r--ABC/Machine/Instructions.icl4
4 files changed, 14 insertions, 4 deletions
diff --git a/ABC/Machine/BStack.dcl b/ABC/Machine/BStack.dcl
index 488ed75..0af277b 100644
--- a/ABC/Machine/BStack.dcl
+++ b/ABC/Machine/BStack.dcl
@@ -27,6 +27,7 @@ bs_pushI :: Int BStack -> BStack
bs_update :: BDst Basic BStack -> BStack
bs_addI :: BStack -> BStack
bs_decI :: BStack -> BStack
+bs_divI :: BStack -> BStack
bs_incI :: BStack -> BStack
bs_eqB :: BStack -> BStack
bs_eqI :: BStack -> BStack
diff --git a/ABC/Machine/BStack.icl b/ABC/Machine/BStack.icl
index 624692e..70a1f1a 100644
--- a/ABC/Machine/BStack.icl
+++ b/ABC/Machine/BStack.icl
@@ -44,7 +44,7 @@ bs_init = []
bs_popn :: NrArgs BStack -> BStack
bs_popn 0 s = s
bs_popn _ [] = abortn "bs_popn: popping too many elements"
-bs_popn i [_:s] = bs_popn (i-1) s
+bs_popn i [_:s] = bs_popn (i - 1) s
bs_push :: Basic BStack -> BStack
bs_push d s = [d:s]
@@ -58,18 +58,22 @@ bs_pushI i s = [Int i:s]
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]
+bs_update i d [e:s] = [e:bs_update (i - 1) d s]
bs_addI :: BStack -> BStack
-bs_addI [Int m:Int n:s] = bs_pushI (m+n) s
+bs_addI [Int m:Int n:s] = bs_pushI (m + n) s
bs_addI _ = abortn "bs_addI: no integers"
bs_decI :: BStack -> BStack
bs_decI [Int n:s] = bs_pushI (n-1) s
bs_decI _ = abortn "bs_decI: no integer"
+bs_divI :: BStack -> BStack
+bs_divI [Int m:Int n:s] = bs_pushI (m / n) s
+bs_divI _ = abortn "bs_divI: no integers"
+
bs_incI :: BStack -> BStack
-bs_incI [Int n:s] = bs_pushI (n+1) s
+bs_incI [Int n:s] = bs_pushI (n + 1) s
bs_incI _ = abortn "bs_incI: no integer"
bs_eqB :: BStack -> BStack
diff --git a/ABC/Machine/Instructions.dcl b/ABC/Machine/Instructions.dcl
index 6c3c8b8..f0cc5b2 100644
--- a/ABC/Machine/Instructions.dcl
+++ b/ABC/Machine/Instructions.dcl
@@ -57,6 +57,7 @@ update_b :: BSrc BDst State -> State
addI :: State -> State
decI :: State -> State
+divI :: State -> State
gtI :: State -> State
incI :: State -> State
ltI :: State -> State
diff --git a/ABC/Machine/Instructions.icl b/ABC/Machine/Instructions.icl
index 911b999..3ca55af 100644
--- a/ABC/Machine/Instructions.icl
+++ b/ABC/Machine/Instructions.icl
@@ -365,6 +365,10 @@ decI :: State -> State
decI st=:{bstack}
= {st & bstack=bs_decI bstack}
+divI :: State -> State
+divI st=:{bstack}
+ = {st & bstack=bs_divI bstack}
+
gtI :: State -> State
gtI st=:{bstack}
= {st & bstack=bs_gtI bstack}