on master help sign in
Handle Int8 overflow
commit50a3dda779888eccfa0350177f8c10b43b288e50 authorBryan O'Sullivan <bos@serpentine.com> dateWed 20 Mar 2013, 12:50 (14 years ago) parent8a402c1
1 file changed+7−6
Data/Text/Lazy/Builder/Int.hs+7−6
Data/Text/Lazy/Builder/Int.hs+7−6
@@ -108,14 +108,15 @@ posDecimal marr off0 ds v0 = go (off0 + ds - 1) v0
108108 where go off v
109109 | v >= 100 = do
110110 let (q, r) = v `quotRem` 100
111− write2 off (r + r)
111+ write2 off r
112112 go (off - 2) q
113113 | v < 10 = unsafeWrite marr off (i2w v)
114− | otherwise = write2 off (v + v)
115− write2 off i = do
116− unsafeWrite marr off $ get (i + 1)
117− unsafeWrite marr (off - 1) $ get i
118− get i = fromIntegral $ B.unsafeIndex digits (fromIntegral i) :: Word16
114+ | otherwise = write2 off v
115+ write2 off i0 = do
116+ let i = fromIntegral i0; j = i + i
117+ unsafeWrite marr off $ get (j + 1)
118+ unsafeWrite marr (off - 1) $ get j
119+ get = fromIntegral . B.unsafeIndex digits
119120
120121minus, zero :: Word16
121122{-# INLINE minus #-}