blob: 4a34ec68c49d6313d4072627b74f5add82758b22 (
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
27
28
29
30
|
implementation module ABC.Program
import StdEnv
import ABC.Machine
import ABC.Misc
pc_init :: InstrId
pc_init = 0
pc_next :: InstrId -> InstrId
pc_next i = i + 1
pc_halt :: InstrId -> InstrId
pc_halt _ = -1
pc_end :: InstrId -> Bool
pc_end i = i < 0
:: Location = I Instruction
:: ProgramStore :== [Location]
ps_get :: InstrId ProgramStore -> Instruction
ps_get 0 [I p:_] = p
ps_get _ [] = abortn "ps_get: index too large"
ps_get i [_:ps] = ps_get (i-1) ps
ps_init :: [Instruction] -> ProgramStore
ps_init [] = []
ps_init [i:is] = [I i:ps_init is]
|