never executed always true always false
    1 module HelVM.HelMA.Automata.ETA.Addressing
    2   ( findAddress
    3   , genericFindAddress
    4   , genericNextLabel
    5   , nextLabel
    6   ) where
    7 
    8 import           HelVM.HelMA.Automata.ETA.Symbol
    9 import           HelVM.HelMA.Automata.ETA.Token
   10 
   11 import           HelVM.HelIO.Containers.MTIndexSafe
   12 
   13 import           HelVM.HelIO.Control.Safe
   14 
   15 import           Data.Sequences
   16 
   17 import           Prelude                            hiding ( length, splitAt )
   18 
   19 import qualified Data.Vector                        as Vector
   20 
   21 ----
   22 
   23 genericFindAddress ∷ (MonadSafe m , Integral cell) ⇒ Vector.Vector Token → cell → m InstructionAddress
   24 genericFindAddress il = findAddress il . fromIntegral
   25 
   26 findAddress ∷ MonadSafe m ⇒ Vector.Vector Token → Int → m InstructionAddress
   27 findAddress _  1       = pure 0
   28 findAddress il address = appendErrorTupleList [("il" , show il) , ("address" , show address)] ((+1) <$> indexSafe (Vector.elemIndices R il) (address-2))
   29 
   30 ----
   31 
   32 genericNextLabel ∷ Integral cell ⇒ Vector.Vector Token → InstructionAddress → cell
   33 genericNextLabel il = fromIntegral . nextLabel il
   34 
   35 nextLabel ∷ Vector.Vector Token → InstructionAddress → Int
   36 nextLabel il ic = Vector.length (Vector.elemIndices R il') + 2  where (il' , _) = splitAt ic il