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)