{-# LANGUAGE CPP #-}
module Language.Fortran.Parser.Free.Utils where

import Language.Fortran.Parser.Free.Lexer
import Language.Fortran.Parser.Monad
import Control.Monad.State

unitNameCheck :: Token -> String -> Parse AlexInput Token ()
unitNameCheck :: Token -> String -> Parse AlexInput Token ()
unitNameCheck (TId SrcSpan
_ String
name1) String
name2
  | String
name1 forall a. Eq a => a -> a -> Bool
== String
name2 = forall (m :: * -> *) a. Monad m => a -> m a
return ()
  | Bool
otherwise = forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Unit name does not match the corresponding END statement."
unitNameCheck Token
_ String
_ = forall (m :: * -> *) a. Monad m => a -> m a
return ()

parseError :: Token -> LexAction a
parseError :: forall a. Token -> LexAction a
parseError Token
_ = do
    ParseState AlexInput
parseState <- forall s (m :: * -> *). MonadState s m => m s
get
#ifdef DEBUG
    tokens <- reverse <$> aiPreviousTokensInLine <$> getAlex
#endif
    forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ forall a. ParseState a -> String
psFilename ParseState AlexInput
parseState forall a. [a] -> [a] -> [a]
++ String
": parsing failed. "
#ifdef DEBUG
      ++ '\n' : show tokens
#endif