never executed always true always false
    1 module HelVM.HelMA.Automata.BrainFuck.Evaluator where
    2 
    3 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Fast.Evaluator  as Fast
    4 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Fast.Parser     as Fast
    5 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Flat.Evaluator  as Flat
    6 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Flat.Parser     as Flat
    7 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Tree.Evaluator  as Tree
    8 import qualified HelVM.HelMA.Automata.BrainFuck.Impl.Tree.Parser     as Tree
    9 
   10 
   11 import           HelVM.HelMA.Automata.BrainFuck.API.ImplType
   12 
   13 import           HelVM.HelMA.Automata.BrainFuck.Common.Symbol
   14 import           HelVM.HelMA.Automata.BrainFuck.Common.TapeOfSymbols
   15 
   16 import qualified HelVM.HelMA.Automaton.API.AppOptions                as App
   17 import qualified HelVM.HelMA.Automaton.API.Emit                      as Emit
   18 import           HelVM.HelMA.Automaton.API.Env
   19 
   20 import           HelVM.HelMA.Automaton.API.EvalParams
   21 import           HelVM.HelMA.Automaton.API.IOTypes
   22 
   23 import           HelVM.HelMA.Automaton.Eff.MonadEff
   24 
   25 import           HelVM.HelMA.Automaton.Extra
   26 
   27 import           HelVM.HelMA.Automaton.Types.CellType
   28 import           HelVM.HelMA.Automaton.Types.DumpType
   29 
   30 import qualified RIO
   31 
   32 import           Text.Pretty.Simple
   33 
   34 runRio :: Has env => ImplType -> RIO.RIO env ()
   35 runRio t = runWithOptions =<< optionsRio where
   36   runWithOptions o = run (App.emit o) t . App.evalParams o =<< readSourceFileRio
   37 
   38 run :: Has env => Emit.Emit -> ImplType -> EvalParams -> RIO.RIO env ()
   39 run Emit.No   i        = runAsRIO . evalParams i
   40 run Emit.IL   FastType = putLTextLnRio . pShowNoColor . Fast.parseAsListSafe   . source
   41 run Emit.IL   TreeType = putLTextLnRio . pShowNoColor . Tree.parseAsVectorSafe . source
   42 run _ _                = putLTextLnRio . show . Flat.readTokens . source
   43 
   44 simpleEval :: AppEff m => (ImplType , Source , CellType) -> m ()
   45 simpleEval (c , s , t) = eval c s t Pretty --TODO Add MaybeLimit and use Trampoline
   46 
   47 ----
   48 
   49 evalParams :: AppEff m => ImplType -> EvalParams -> m ()
   50 evalParams b p = eval b (source p) (cellAutoOptions p) (dumpAutoOptions p)
   51 
   52 eval :: AppEff m => ImplType -> Source -> CellType -> DumpType -> m ()
   53 eval c s Int8Type   = evalSource c s (newTape :: FullTape Int8)
   54 eval c s Word8Type  = evalSource c s (newTape :: FullTape Word8)
   55 eval c s Int16Type  = evalSource c s (newTape :: FullTape Int16)
   56 eval c s Word16Type = evalSource c s (newTape :: FullTape Word16)
   57 eval c s Int32Type  = evalSource c s (newTape :: FullTape Int32)
   58 eval c s Word32Type = evalSource c s (newTape :: FullTape Word32)
   59 eval c s Int64Type  = evalSource c s (newTape :: FullTape Int64)
   60 eval c s Word64Type = evalSource c s (newTape :: FullTape Word64)
   61 
   62 evalSource :: (AppEff m , Symbol e) => ImplType -> Source -> FullTape e -> DumpType -> m ()
   63 evalSource FastType = Fast.evalSource
   64 evalSource TreeType = Tree.evalSource
   65 evalSource FlatType = Flat.evalSource