summaryrefslogtreecommitdiff
path: root/libraries/ghc-boot
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2021-01-18 11:53:55 +0000
committerMatthew Pickering <matthewtpickering@gmail.com>2021-03-03 19:11:08 +0000
commitf121ffe4be7dd156701d856fbc9afeaf50e7038e (patch)
tree1c2f89f47a79d339cd8677c3f4a427054a9ac30a /libraries/ghc-boot
parent91d09039a8d6665097c1aa12f6fb3e6e45d4acca (diff)
downloadhaskell-f121ffe4be7dd156701d856fbc9afeaf50e7038e.tar.gz
Don't use FastString to convert string to UTF8
Diffstat (limited to 'libraries/ghc-boot')
-rw-r--r--libraries/ghc-boot/GHC/Utils/Encoding.hs14
1 files changed, 12 insertions, 2 deletions
diff --git a/libraries/ghc-boot/GHC/Utils/Encoding.hs b/libraries/ghc-boot/GHC/Utils/Encoding.hs
index 519b607425..ba07784b0d 100644
--- a/libraries/ghc-boot/GHC/Utils/Encoding.hs
+++ b/libraries/ghc-boot/GHC/Utils/Encoding.hs
@@ -27,6 +27,7 @@ module GHC.Utils.Encoding (
utf8DecodeStringLazy,
utf8EncodeChar,
utf8EncodeString,
+ utf8EncodeStringPtr,
utf8EncodeShortByteString,
utf8EncodedLength,
countUTF8Chars,
@@ -276,8 +277,17 @@ utf8EncodeChar write# c =
#endif
s -> (# s, () #)
-utf8EncodeString :: Ptr Word8 -> String -> IO ()
-utf8EncodeString (Ptr a#) str = go a# str
+utf8EncodeString :: String -> ByteString
+utf8EncodeString s =
+ unsafePerformIO $ do
+ let len = utf8EncodedLength s
+ buf <- mallocForeignPtrBytes len
+ withForeignPtr buf $ \ptr -> do
+ utf8EncodeStringPtr ptr s
+ pure (BS.fromForeignPtr buf 0 len)
+
+utf8EncodeStringPtr :: Ptr Word8 -> String -> IO ()
+utf8EncodeStringPtr (Ptr a#) str = go a# str
where go !_ [] = return ()
go a# (c:cs) = do
#if !MIN_VERSION_base(4,16,0)