aboutsummaryrefslogtreecommitdiff
path: root/ABC/Program.icl
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]