[commit: ghc] wip/T12357-unpack: Encoding: Attempt at reducing allocations (33ff4c1)
git at git.haskell.org
git at git.haskell.org
Tue Jul 5 08:00:17 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T12357-unpack
Link : http://ghc.haskell.org/trac/ghc/changeset/33ff4c10a824c08657a94bd9841f1ef57eeef419/ghc
>---------------------------------------------------------------
commit 33ff4c10a824c08657a94bd9841f1ef57eeef419
Author: Ben Gamari <ben at smart-cactus.org>
Date: Mon Jul 4 20:09:07 2016 -0400
Encoding: Attempt at reducing allocations
>---------------------------------------------------------------
33ff4c10a824c08657a94bd9841f1ef57eeef419
compiler/utils/Encoding.hs | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/compiler/utils/Encoding.hs b/compiler/utils/Encoding.hs
index d959671..6028397 100644
--- a/compiler/utils/Encoding.hs
+++ b/compiler/utils/Encoding.hs
@@ -115,17 +115,18 @@ utf8CharStart p = go p
else return p
utf8DecodeStringLazy :: BS.ByteString -> IO [Char]
-utf8DecodeStringLazy bs
- = unpack bs
+utf8DecodeStringLazy !bs
+ = unpack 0
where
- unpack bs
- | BS.null bs = return []
+ unpack !offset
+ | BS.null bs' = return []
| otherwise =
- BS.unsafeUseAsCString bs $ \ptr ->
+ BS.unsafeUseAsCString bs' $ \ptr ->
case utf8DecodeChar (castPtr ptr) of
(c, nBytes) -> do
- chs <- unsafeInterleaveIO $ unpack (BS.drop nBytes bs)
+ chs <- unsafeInterleaveIO $ unpack (offset + nBytes)
return (c : chs)
+ where !bs' = BS.drop offset bs
utf8DecodeString :: Ptr Word8 -> Int -> IO [Char]
utf8DecodeString ptr len
More information about the ghc-commits
mailing list