never executed always true always false
    1 module HelVM.HelMA.Automata.ETA.Evaluator (
    2   runRio,
    3   run,
    4   simpleEval,
    5   evalParams,
    6 ) where
    7 
    8 import           HelVM.HelMA.Automata.ETA.API.AutomatonType
    9 
   10 import           HelVM.HelMA.Automata.ETA.Automaton
   11 import           HelVM.HelMA.Automata.ETA.Lexer
   12 import           HelVM.HelMA.Automata.ETA.Optimizer
   13 import           HelVM.HelMA.Automata.ETA.Parser
   14 import qualified HelVM.HelMA.Automata.ETA.SimpleParams      as S
   15 import           HelVM.HelMA.Automata.ETA.Symbol
   16 import           HelVM.HelMA.Automata.ETA.Token
   17 
   18 
   19 import qualified HelVM.HelMA.Automaton.API.AppOptions       as App
   20 import qualified HelVM.HelMA.Automaton.API.AutomatonOptions as Automaton
   21 import           HelVM.HelMA.Automaton.API.AutoOptions
   22 import qualified HelVM.HelMA.Automaton.API.Emit             as Emit
   23 import           HelVM.HelMA.Automaton.API.Env
   24 import           HelVM.HelMA.Automaton.API.EvalParams
   25 import           HelVM.HelMA.Automaton.API.IOTypes
   26 
   27 import qualified HelVM.HelMA.Automaton.Automaton            as Automaton
   28 
   29 import           HelVM.HelMA.Automaton.Eff.AutomatonEff
   30 import           HelVM.HelMA.Automaton.Eff.MonadEff
   31 
   32 import           HelVM.HelMA.Automaton.Extra
   33 
   34 import           HelVM.HelMA.Automaton.Types.DumpType
   35 import           HelVM.HelMA.Automaton.Types.StackType
   36 
   37 import           HelVM.HelIO.Collections.SList              as SList
   38 
   39 import qualified Data.Sequence                              as Seq
   40 
   41 import           Prelude                                    hiding (divMod)
   42 
   43 import qualified RIO
   44 
   45 import           Text.Pretty.Simple
   46 
   47 runRio :: Has env => AutomatonType -> RIO.RIO env ()
   48 runRio i = runWIthOptions =<< optionsRio where
   49   runWIthOptions o = run (App.emit o) i . App.evalParams o =<< readSourceFileRio
   50 
   51 run :: Has env => Emit.Emit -> AutomatonType -> EvalParams -> RIO.RIO env ()
   52 run Emit.No   i = runAsRIO . evalParams i
   53 run Emit.IL   _ = putLTextLnRio . pShowNoColor . parseSafe . source
   54 run Emit.TL   _ = putLTextLnRio . show . tokenize . source
   55 run Emit.Code _ = putLTextLnRio . show . readTokens . source
   56 
   57 simpleEval :: AppEff m => S.SimpleParams -> m ()
   58 simpleEval p = evalSource (S.implType p) (S.source p) (S.stackType p) (S.autoOptions p)
   59 
   60 ----
   61 
   62 evalParams :: AppEff m => AutomatonType -> EvalParams -> m ()
   63 evalParams e p = evalSource e (source p) (stackAutoOptions p) (autoOptions p)
   64 
   65 evalSource :: (AutomatonEff Symbol m) => AutomatonType -> Source -> StackType -> AutoOptions -> m ()
   66 evalSource automatonType source = evalTL automatonType (tokenize source)
   67 
   68 evalTL :: (AutomatonEff Symbol m) => AutomatonType -> TokenList -> StackType -> AutoOptions -> m ()
   69 evalTL Fast     = fastEval
   70 evalTL Original = originalEval
   71 
   72 fastEval :: (AutomatonEff Symbol m) => TokenList -> StackType -> AutoOptions -> m ()
   73 fastEval tl s a = flip Automaton.start (Automaton.withDefaultRam s a) =<< optimize tl
   74 
   75 originalEval :: (AutomatonEff Symbol m) => TokenList -> StackType -> AutoOptions -> m ()
   76 originalEval tl ListStackType  = eval tl []
   77 originalEval tl SeqStackType   = eval tl Seq.empty
   78 originalEval tl SListStackType = eval tl SList.sListEmpty
   79 
   80 eval :: (SAutomatonEff Symbol s m) => TokenList -> s -> AutoOptions -> m ()
   81 eval tl s (AutoOptions _ limit dt) = logDump dt =<< runAutomat limit (newMemory tl s)