aboutsummaryrefslogtreecommitdiff
path: root/CStack.icl
blob: f549c4fa06c9ebe367ff5fddc8572f36d5c9f831 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
implementation module ABC.CStack

import StdEnv

import ABC.Def

cs_init :: CStack
cs_init = []

cs_get  :: CSrc CStack -> InstrId
cs_get _ []    = abortn "cs_get: index too large"
cs_get 0 [i:_] = i
cs_get i [_:s] = cs_get (i-1) s

cs_popn :: CSrc CStack -> CStack
cs_popn 0 s     = s
cs_popn _ []    = abortn "cs_popn: popping too many elements"
cs_popn i [_:s] = cs_popn (i-1) s

cs_push :: InstrId CStack -> CStack
cs_push i s = [i:s]