never executed always true always false
1 module HelVM.HelMA.Automata.Piet.Types.InstructionMemory (
2 logWithPosition,
3 codelChooserIM,
4 directionPointerIM,
5 toggleCodelChooserIM,
6 rotateDirectionPointerIM,
7 initialInstructionMemory,
8 InstructionMemory(..),
9 ) where
10
11
12 import HelVM.HelMA.Automata.Piet.Types.DirectionPointer
13 import HelVM.HelMA.Automata.Piet.Types.InstructionCounter
14 import HelVM.HelMA.Automata.Piet.Types.Program
15
16 import HelVM.HelMA.Automaton.Eff.MonadEff
17
18 import Control.Monad.Logger
19
20 logWithPosition :: AppEff m => Text -> InstructionMemory -> m ()
21 logWithPosition msg im = logDebugN $ show (position $ instructionCounter im) <> " " <> msg
22
23 codelChooserIM :: InstructionMemory -> DirectionPointer
24 codelChooserIM = directionPointerIC . instructionCounter
25
26 directionPointerIM :: InstructionMemory -> DirectionPointer
27 directionPointerIM = directionPointerIC . instructionCounter
28
29 toggleCodelChooserIM :: Int -> InstructionMemory -> InstructionMemory
30 toggleCodelChooserIM n im = im { instructionCounter = toggleCodelChooserIC n (instructionCounter im)}
31
32 rotateDirectionPointerIM :: Int -> InstructionMemory -> InstructionMemory
33 rotateDirectionPointerIM n im = im { instructionCounter = rotateDirectionPointerIC n (instructionCounter im)}
34
35 initialInstructionMemory :: Program -> InstructionMemory
36 initialInstructionMemory prog = InstructionMemory
37 { instructionCounter = initialInstructionCounter
38 , program = prog
39 }
40
41 data InstructionMemory = InstructionMemory
42 { instructionCounter :: !InstructionCounter
43 , program :: !Program
44 }