module Hint.Parsers
where
import Prelude hiding(span)
import qualified GHC(Session, getSessionDynFlags)
import qualified Lexer as GHC.L (P(..), ParseResult(..), mkPState)
import qualified Parser as GHC.P (parseStmt, parseType)
import qualified StringBuffer as GHC.SB(stringToStringBuffer)
import qualified SrcLoc as GHC.S (SrcSpan, noSrcLoc)
import qualified ErrUtils as GHC.E (Message)
data ParseResult = ParseOk | ParseError GHC.S.SrcSpan GHC.E.Message
parseExpr :: GHC.Session -> String -> IO ParseResult
parseExpr = runParser GHC.P.parseStmt
parseType :: GHC.Session -> String -> IO ParseResult
parseType = runParser GHC.P.parseType
runParser :: GHC.L.P a -> GHC.Session -> String -> IO ParseResult
runParser parser ghc_session expr =
do
dyn_fl <- GHC.getSessionDynFlags ghc_session
buf <- GHC.SB.stringToStringBuffer expr
let parse_res = GHC.L.unP parser (GHC.L.mkPState buf GHC.S.noSrcLoc dyn_fl)
case parse_res of
GHC.L.POk{} -> return ParseOk
GHC.L.PFailed span err -> return (ParseError span err)