never executed always true always false
1 module HelVM.HelMA.Automata.SubLeq.Evaluator (
2 runRio,
3 run,
4 simpleEval,
5 evalParams,
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.MapList as MapList
28 import qualified HelVM.HelIO.Collections.SList as SList
29
30 import qualified Data.Sequence as Seq
31
32 import qualified RIO
33
34 runRio :: Has env => RIO.RIO env ()
35 runRio = runWithOptions =<< optionsRio where
36 runWithOptions o = run (App.emit o) . App.evalParams o =<< readSourceFileRio
37
38 run :: Has env => Emit.Emit -> EvalParams -> RIO.RIO env ()
39 run Emit.No = runAsRIO . evalParams
40 run Emit.IL = putLTextLnRio . show . tokenize . source
41 run Emit.TL = putLTextLnRio . show . tokenize . source
42 run Emit.Code = putLTextLnRio . show . readSymbols . source
43
44 simpleEval :: AppEff m => RAMType -> Source -> m ()
45 simpleEval rt s = evalSource s rt testMaybeLimit Pretty
46
47 ----
48
49 evalParams :: AppEff m => EvalParams -> m ()
50 evalParams p = evalSource (source p) (ramAutoOptions p) Nothing (dumpAutoOptions p)
51
52 evalSource :: AppEff m => Source -> RAMType -> LimitMaybe -> DumpType -> m ()
53 evalSource source = evalIL $ tokenize source
54
55 evalIL :: AutomatonEff e m => [e] -> RAMType -> LimitMaybe -> DumpType -> m ()
56 evalIL = flip evalIL'
57
58 evalIL' :: AutomatonEff e m => RAMType -> [e] -> LimitMaybe -> DumpType -> m ()
59 evalIL' ListRAMType = start
60 evalIL' SeqRAMType = start . Seq.fromList
61 evalIL' SListRAMType = start . SList.sListFromList
62 evalIL' MapListRAMType = start . MapList.mapListFromList
63
64 start :: RAutomatonEff e r m => r -> LimitMaybe -> DumpType -> m ()
65 start r limit dt = logDump dt =<< runAutomat limit (newMemory r)