Binary: Only allocate un-interned FastStrings
authoralexbiehl <alex.biehl@gmail.com>
Sun, 12 Feb 2017 00:22:26 +0000 (19:22 -0500)
committerBen Gamari <ben@smart-cactus.org>
Sun, 12 Feb 2017 00:58:34 +0000 (19:58 -0500)
Test Plan: Validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3109

compiler/utils/Binary.hs

index 275b1a9..565d162 100644 (file)
@@ -724,8 +724,9 @@ putFS :: BinHandle -> FastString -> IO ()
 putFS bh fs = putBS bh $ fastStringToByteString fs
 
 getFS :: BinHandle -> IO FastString
-getFS bh = do bs <- getBS bh
-              return $! mkFastStringByteString bs
+getFS bh = do
+  l  <- get bh :: IO Int
+  getPrim bh l (\src -> pure $! mkFastStringBytes src l )
 
 putBS :: BinHandle -> ByteString -> IO ()
 putBS bh bs =