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

import StdEnv

import ABC.Def
import ABC.Misc

:: CStack :== [InstrId]

instance toString CStack where toString xs = "[" <++ (",", xs) <+ "]"

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]