on master help sign in
Better SCC annotations for lazy unstreamChunks
1caa3f9Bryan O'Sullivan
Data/Text/Lazy/Fusion.hs+4−2
@@ -54,7 +54,8 @@ unstreamChunks chunkSize (Stream next s0 len0)
54 | isEmpty len0 = Empty
54 | isEmpty len0 = Empty
55 | otherwise = outer s0
55 | otherwise = outer s0
56 where
56 where
57+ outer s = {-# SCC "unstreamChunks/outer" #-}
57− outer s = case next s of
58+ case next s of
58 Done -> Empty
59 Done -> Empty
59 Skip s' -> outer s'
60 Skip s' -> outer s'
60 Yield x s' -> I.Text arr 0 len `chunk` outer s''
61 Yield x s' -> I.Text arr 0 len `chunk` outer s''
@@ -64,12 +65,13 @@ unstreamChunks chunkSize (Stream next s0 len0)
64 unknownLength = 4
65 unknownLength = 4
65 inner marr len s !i
66 inner marr len s !i
66 | i + 1 >= chunkSize = return (marr, (s,i))
67 | i + 1 >= chunkSize = return (marr, (s,i))
67− | i + 1 >= len = do
68+ | i + 1 >= len = {-# SCC "unstreamChunks/resize" #-} do
68 let newLen = min (len `shiftL` 1) chunkSize
69 let newLen = min (len `shiftL` 1) chunkSize
69 marr' <- A.new newLen
70 marr' <- A.new newLen
70 A.copyM marr' 0 marr 0 len
71 A.copyM marr' 0 marr 0 len
71 inner marr' newLen s i
72 inner marr' newLen s i
72 | otherwise =
73 | otherwise =
74+ {-# SCC "unstreamChunks/inner" #-}
73 case next s of
75 case next s of
74 Done -> return (marr,(s,i))
76 Done -> return (marr,(s,i))
75 Skip s' -> inner marr len s' i
77 Skip s' -> inner marr len s' i