diff options
Diffstat (limited to 'ABC/Machine')
-rw-r--r-- | ABC/Machine/BStack.dcl | 1 | ||||
-rw-r--r-- | ABC/Machine/BStack.icl | 12 | ||||
-rw-r--r-- | ABC/Machine/Instructions.dcl | 1 | ||||
-rw-r--r-- | ABC/Machine/Instructions.icl | 4 |
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} |