on master help sign in
Fix bug in getWord16be, found by QuickCheck
commitfc5cdf0e3ab054d17d370ec3f52625e493219ca7 authorLennart Kolmodin <kolmodin@gentoo.org> dateThu 26 Aug 2010, 17:16 (16 years ago) parent76c9a4a
1 file changed+7−4
BitsGet.hs+7−4
BitsGet.hs+7−4
@@ -148,16 +148,19 @@ readWithoutOffset s@(S bs o) shifterL shifterR n
148148readWithOffset s@(S bs o) shifterL shifterR n
149149 | n <= 64 = let bits_in_msb = 8 - o
150150 (n',top) = (n - bits_in_msb
151− , (fromIntegral (unsafeHead bs) .&. make_mask bits_in_msb) `shifterL` (n - bits_in_msb))
151+ , (fromIntegral (unsafeHead bs) .&. make_mask bits_in_msb) `shifterL` n')
152152
153− segs = byte_offset n
153+ segs = byte_offset n'
154154
155+ bn 0 = 0
155156 bn 1 = fromIntegral (unsafeIndex bs 1)
156157 bn n = (bn (n-1) `shifterL` 8) .|. fromIntegral (unsafeIndex bs n)
157158
158− mseg = bn segs
159+ o' = bit_offset n'
159160
160− last | bit_offset n' > 0 = (fromIntegral (unsafeIndex bs (segs + 1))) `shifterR` (8 - (bit_offset n'))
161+ mseg = bn segs `shifterL` o'
162+
163+ last | o' > 0 = (fromIntegral (unsafeIndex bs (segs + 1))) `shifterR` (8 - o')
161164 | otherwise = 0
162165
163166 w = top .|. mseg .|. last