never executed always true always false
1 module HelVM.HelMA.Automata.SubLeq.Evaluator
2 ( evalParams
3 , run
4 , runRio
5 , simpleEval
6 ) where
7
8 import HelVM.HelMA.Automata.SubLeq.Automaton
9 import HelVM.HelMA.Automata.SubLeq.Lexer
10
11 import qualified HelVM.HelMA.Automaton.API.AppOptions as App
12 import qualified HelVM.HelMA.Automaton.API.Emit as Emit
13 import HelVM.HelMA.Automaton.API.Env
14 import HelVM.HelMA.Automaton.API.EvalParams
15 import HelVM.HelMA.Automaton.API.IOTypes
16
17 import HelVM.HelMA.Automaton.Eff.AutomatonEff
18 import HelVM.HelMA.Automaton.Eff.MonadEff
19
20 import HelVM.HelMA.Automaton.Extra
21
22 import HelVM.HelMA.Automaton.Trampoline
23
24 import HelVM.HelMA.Automaton.Types.DumpType
25 import HelVM.HelMA.Automaton.Types.RAMType
26
27 import qualified HelVM.HelIO.Collections.SList as SList
28
29 import qualified Data.Sequence as Seq
30
31 import qualified RIO
32
33 runRio ∷ Has env ⇒ RIO.RIO env ()
34 runRio = runWithOptions =<< optionsRio where
35 runWithOptions o = run (App.emit o) . App.evalParams o =<< readSourceFileRio
36
37 run ∷ Has env ⇒ Emit.Emit → EvalParams → RIO.RIO env ()
38 run Emit.No = runAsRIO . evalParams
39 run Emit.IL = putLTextLnRio . show . tokenize . source
40 run Emit.TL = putLTextLnRio . show . tokenize . source
41 run Emit.Code = putLTextLnRio . show . readSymbols . source
42
43 simpleEval ∷ AppSafeEff m ⇒ RAMType → Source → m ()
44 simpleEval rt s = evalSource s rt testMaybeLimit Pretty
45
46 ----
47
48 evalParams ∷ AppSafeEff m ⇒ EvalParams → m ()
49 evalParams p = evalSource (source p) (ramAutoOptions p) Nothing (dumpAutoOptions p)
50
51 evalSource ∷ AppSafeEff m ⇒ Source → RAMType → LimitMaybe → DumpType → m ()
52 evalSource source = evalIL $ tokenize source
53
54 evalIL ∷ AutomatonEff e m ⇒ [e] → RAMType → LimitMaybe → DumpType → m ()
55 evalIL = flip evalIL'
56
57 evalIL' ∷ AutomatonEff e m ⇒ RAMType → [e] → LimitMaybe → DumpType → m ()
58 evalIL' ListRAMType = start
59 evalIL' SeqRAMType = start . Seq.fromList
60 evalIL' SListRAMType = start . SList.sListFromList
61 evalIL' MapListRAMType = start . Seq.fromList
62
63 start ∷ RAutomatonEff e r m ⇒ r → LimitMaybe → DumpType → m ()
64 start r limit dt = logDump dt =<< runAutomat limit (newMemory r)