From 789690fc23a49aa3bcbc946992fd6340c90d8c10 Mon Sep 17 00:00:00 2001 From: "ich@christoph-bauer.net" Date: Sat, 27 Feb 2010 21:16:59 +0000 Subject: [PATCH] a faster appendFS --- compiler/utils/FastString.lhs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/utils/FastString.lhs b/compiler/utils/FastString.lhs index 29c7788..055f921 100644 --- a/compiler/utils/FastString.lhs +++ b/compiler/utils/FastString.lhs @@ -449,7 +449,18 @@ zEncodeFS fs@(FastString _ _ _ _ enc) = return efs appendFS :: FastString -> FastString -> FastString -appendFS fs1 fs2 = mkFastString (unpackFS fs1 ++ unpackFS fs2) +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 concatFS :: [FastString] -> FastString concatFS ls = mkFastString (Prelude.concat (map unpackFS ls)) -- ToDo: do better -- 1.7.10.4