X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2Futils%2FFastString.lhs;h=cdabd626ca9d75a2a9b9668a5f628095ca67c13d;hb=1c5499d4d5d506ce0cc971e98c09bfbf7bc290a1;hp=ea307799c424f6f164fbf1074f49a6c819e14750;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1;p=ghc-hetmet.git diff --git a/compiler/utils/FastString.lhs b/compiler/utils/FastString.lhs index ea30779..cdabd62 100644 --- a/compiler/utils/FastString.lhs +++ b/compiler/utils/FastString.lhs @@ -24,6 +24,7 @@ module FastString -- ** Construction mkFastString, mkFastStringBytes, + mkFastStringByteList, mkFastStringForeignPtr, mkFastString#, mkZFastString, @@ -160,6 +161,7 @@ data FastStringTable = {-# UNPACK #-} !Int (MutableArray# RealWorld [FastString]) +{-# NOINLINE string_table #-} string_table :: IORef FastStringTable string_table = unsafePerformIO $ do @@ -275,6 +277,15 @@ mkFastString str = utf8EncodeString ptr str mkFastStringForeignPtr ptr buf l +-- | Creates a 'FastString' from a UTF-8 encoded @[Word8]@ +mkFastStringByteList :: [Word8] -> FastString +mkFastStringByteList str = + inlinePerformIO $ do + let l = Prelude.length str + buf <- mallocForeignPtrBytes l + withForeignPtr buf $ \ptr -> do + pokeArray (castPtr ptr) str + mkFastStringForeignPtr ptr buf l -- | Creates a Z-encoded 'FastString' from a 'String' mkZFastString :: String -> FastString @@ -479,21 +490,7 @@ pokeCAString ptr str = in go str 0 -#if __GLASGOW_HASKELL__ < 600 - -mallocForeignPtrBytes :: Int -> IO (ForeignPtr a) -mallocForeignPtrBytes n = do - r <- mallocBytes n - newForeignPtr r (finalizerFree r) - -foreign import ccall unsafe "stdlib.h free" - finalizerFree :: Ptr a -> IO () - -peekCAStringLen = peekCStringLen - -#elif __GLASGOW_HASKELL__ <= 602 - +#if __GLASGOW_HASKELL__ <= 602 peekCAStringLen = peekCStringLen - #endif \end{code}