on master help sign in
Data.Text.Lazy.Fusion: fix a bug in unstreamChunks.
701d179Nicolas Pouillard
Data/Text/Lazy/Fusion.hs+7−7
@@ -55,21 +55,21 @@ unstreamChunks chunkSize (Stream next s0 len0)
55 Yield x s' -> I.Text arr 0 len `chunk` outer s''
55 Yield x s' -> I.Text arr 0 len `chunk` outer s''
56 where (arr,(s'',len)) = A.run2 fill
56 where (arr,(s'',len)) = A.run2 fill
57 fill = do a <- A.unsafeNew unknownLength
57 fill = do a <- A.unsafeNew unknownLength
58+ i <- unsafeWrite a 0 x
58− inner a unknownLength x s' 0
59+ inner a unknownLength s' i
59 unknownLength = 4
60 unknownLength = 4
60− inner marr len x s i
61+ inner marr len s i
61 | i + 1 >= chunkSize = return (marr, (s,i))
62 | i + 1 >= chunkSize = return (marr, (s,i))
62 | i + 1 >= len = do
63 | i + 1 >= len = do
63 let newLen = min (len * 2) chunkSize
64 let newLen = min (len * 2) chunkSize
64 marr' <- A.unsafeNew newLen
65 marr' <- A.unsafeNew newLen
65 A.copy marr marr'
66 A.copy marr marr'
66− inner marr' newLen x s i
67+ inner marr' newLen s i
67 | otherwise =
68 | otherwise =
68 case next s of
69 case next s of
69− Done -> do i' <- unsafeWrite marr i x
70− return (marr,(s,i'))
70+ Done -> return (marr,(s,i))
71− Skip s' -> inner marr len x s' i
71+ Skip s' -> inner marr len s' i
72− Yield x' s' -> unsafeWrite marr i x >>= inner marr len x' s'
72+ Yield x s' -> unsafeWrite marr i x >>= inner marr len s'
73{-# INLINE [0] unstreamChunks #-}
73{-# INLINE [0] unstreamChunks #-}
74
74
75-- | /O(n)/ Convert a 'Stream Char' into a 'Text', using
75-- | /O(n)/ Convert a 'Stream Char' into a 'Text', using