1
0
forked from GitHub/gf-core

PGF2.hsc: use throwIO instead of throw

From the documentation: the throwIO variant should be used in preference to
throw to raise an exception within the IO monad because it guarantees ordering
with respect to other IO operations, whereas throw does not.

Also removed some unused imports.
This commit is contained in:
hallgren
2014-06-10 12:42:01 +00:00
parent 7b582218c9
commit 26aecdb4d3

View File

@@ -16,18 +16,14 @@ module PGF2 (-- * PGF
) where ) where
import Prelude hiding (fromEnum) import Prelude hiding (fromEnum)
import Control.Exception import Control.Exception(Exception,throwIO)
--import System.IO import System.IO.Unsafe(unsafePerformIO,unsafeInterleaveIO)
import System.IO.Unsafe
import PGF2.FFI import PGF2.FFI
import Foreign hiding ( Pool, newPool, unsafePerformIO ) import Foreign hiding ( Pool, newPool, unsafePerformIO )
import Foreign.C import Foreign.C
--import Foreign.C.String
--import Foreign.Ptr
import Data.Typeable import Data.Typeable
import qualified Data.Map as Map import qualified Data.Map as Map
--import qualified Data.ByteString as BS
import Data.IORef import Data.IORef
@@ -58,7 +54,7 @@ readPGF fpath =
gu_pool_free pool gu_pool_free pool
ioError (errnoToIOError "readPGF" (Errno errno) Nothing (Just fpath)) ioError (errnoToIOError "readPGF" (Errno errno) Nothing (Just fpath))
else do gu_pool_free pool else do gu_pool_free pool
throw (PGFError "The grammar cannot be loaded") throwIO (PGFError "The grammar cannot be loaded")
else return pgf else return pgf
master <- newForeignPtr gu_pool_finalizer pool master <- newForeignPtr gu_pool_finalizer pool
return PGF {pgf = pgf, pgfMaster = master} return PGF {pgf = pgf, pgfMaster = master}
@@ -225,10 +221,10 @@ parse lang cat sent =
msg <- peekCString c_msg msg <- peekCString c_msg
gu_pool_free parsePl gu_pool_free parsePl
gu_pool_free exprPl gu_pool_free exprPl
throw (PGFError msg) throwIO (PGFError msg)
else do gu_pool_free parsePl else do gu_pool_free parsePl
gu_pool_free exprPl gu_pool_free exprPl
throw (PGFError "Parsing failed") throwIO (PGFError "Parsing failed")
else do parseFPl <- newForeignPtr gu_pool_finalizer parsePl else do parseFPl <- newForeignPtr gu_pool_finalizer parsePl
exprFPl <- newForeignPtr gu_pool_finalizer exprPl exprFPl <- newForeignPtr gu_pool_finalizer exprPl
exprs <- fromPgfExprEnum enum parseFPl (lang,exprFPl) exprs <- fromPgfExprEnum enum parseFPl (lang,exprFPl)
@@ -248,8 +244,8 @@ linearize lang e = unsafePerformIO $
else if ty == gu_type__PgfExn else if ty == gu_type__PgfExn
then do c_msg <- (#peek GuExn, data.data) exn then do c_msg <- (#peek GuExn, data.data) exn
msg <- peekCString c_msg msg <- peekCString c_msg
throw (PGFError msg) throwIO (PGFError msg)
else throw (PGFError "The abstract tree cannot be linearized") else throwIO (PGFError "The abstract tree cannot be linearized")
else do lin <- gu_string_buf_freeze sb pl else do lin <- gu_string_buf_freeze sb pl
peekCString lin peekCString lin