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)