summaryrefslogtreecommitdiff
path: root/compiler/utils/FastString.lhs
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2012-07-14 22:11:14 +0100
committerIan Lynagh <igloo@earth.li>2012-07-14 22:11:14 +0100
commit2f01debc33a3ba60feaf2f9add0778bbd2ab81c2 (patch)
treeeab6921820614bafbe948ee7f9e2788dc11f1128 /compiler/utils/FastString.lhs
parent3248fd922498d7ee70783139ac50334ae1d0574a (diff)
downloadhaskell-2f01debc33a3ba60feaf2f9add0778bbd2ab81c2.tar.gz
Redefine appendFS in terms of appendFB
I think the old definition had a bug, although it probably never actually bit us: It used lengthFS to work out how large the arguments where, but lengthFS returns the number of characters, not bytes.
Diffstat (limited to 'compiler/utils/FastString.lhs')
-rw-r--r--compiler/utils/FastString.lhs16
1 files changed, 4 insertions, 12 deletions
diff --git a/compiler/utils/FastString.lhs b/compiler/utils/FastString.lhs
index a340e6eedb..29965b188f 100644
--- a/compiler/utils/FastString.lhs
+++ b/compiler/utils/FastString.lhs
@@ -540,18 +540,10 @@ zEncodeFS fs@(FastString _ _ _ _ enc) =
return efs
appendFS :: FastString -> FastString -> FastString
-appendFS fs1 fs2 =
- inlinePerformIO $ do
- r <- mallocForeignPtrBytes len
- withForeignPtr r $ \ r' -> do
- withForeignPtr (buf fs1) $ \ fs1Ptr -> do
- withForeignPtr (buf fs2) $ \ fs2Ptr -> do
- copyBytes r' fs1Ptr len1
- copyBytes (advancePtr r' len1) fs2Ptr len2
- mkFastStringForeignPtr r' r len
- where len = len1 + len2
- len1 = lengthFS fs1
- len2 = lengthFS fs2
+appendFS fs1 fs2 = inlinePerformIO
+ $ mkFastStringFastBytes
+ $ appendFB (fastStringToFastBytes fs1)
+ (fastStringToFastBytes fs2)
concatFS :: [FastString] -> FastString
concatFS ls = mkFastString (Prelude.concat (map unpackFS ls)) -- ToDo: do better