X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Futils%2FBufWrite.hs;h=306413573f322f0c9bbcf80a71d0d0b03bf4ebe9;hp=d625a6e6c3de5b39b3e29d61471240828bed28df;hb=d0faaa6fa0cecd23c5670fd199e9206275313666;hpb=412e6ede94afaa638cd4d918278fcf2a27222993 diff --git a/compiler/utils/BufWrite.hs b/compiler/utils/BufWrite.hs index d625a6e..3064135 100644 --- a/compiler/utils/BufWrite.hs +++ b/compiler/utils/BufWrite.hs @@ -23,6 +23,7 @@ module BufWrite ( #include "HsVersions.h" import FastString +import FastTypes import FastMutInt import Control.Monad ( when ) @@ -30,11 +31,6 @@ import Data.Char ( ord ) import Foreign import System.IO -import GHC.IOBase ( IO(..) ) -import GHC.Ptr ( Ptr(..) ) - -import GHC.Exts ( Int(..), Int#, Addr# ) - -- ----------------------------------------------------------------------------- data BufHandle = BufHandle {-#UNPACK#-}!(Ptr Word8) @@ -94,18 +90,18 @@ bPutFS b@(BufHandle buf r hdl) fs@(FastString _ len _ fp _) = copyBytes (buf `plusPtr` i) ptr len writeFastMutInt r (i+len) -bPutLitString :: BufHandle -> Addr# -> Int# -> IO () -bPutLitString b@(BufHandle buf r hdl) a# len# = do - let len = I# len# +bPutLitString :: BufHandle -> LitString -> FastInt -> IO () +bPutLitString b@(BufHandle buf r hdl) a len_ = a `seq` do + let len = iBox len_ i <- readFastMutInt r if (i+len) >= buf_size then do hPutBuf hdl buf i writeFastMutInt r 0 if (len >= buf_size) - then hPutBuf hdl (Ptr a#) len - else bPutLitString b a# len# + then hPutBuf hdl a len + else bPutLitString b a len_ else do - copyBytes (buf `plusPtr` i) (Ptr a#) len + copyBytes (buf `plusPtr` i) a len writeFastMutInt r (i+len) bFlush :: BufHandle -> IO ()