{-# 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