{-# LANGUAGE ViewPatterns, NamedFieldPuns, CPP #-}
module Text.Xml.Tiny.Internal.Checks where

import Text.Printf

#ifdef ENABLE_CONSISTENCY_CHECKS
doStackChecks = True
doCursorChecks = True
doParseTableChecks = True
#else
doStackChecks = False
doCursorChecks = False
doParseTableChecks = False
#endif
{-# INLINE doStackChecks #-}
{-# INLINE doCursorChecks #-}
{-# INLINE doParseTableChecks #-}

-- checkCursor :: ParseMonad s ()
checkBSaccess o l o0 l0 =
      let valid n = let x = fromIntegral n in x >= o0 && x < o0+l0
          check = (valid o && valid (o+l))
              || error (printf "access to source out of bounds: o=%d, l=%d" o l)
      in check `seq` ()